ผลต่างระหว่างรุ่นของ "ขั้นตอนวิธี"

จาก วิกิตำรา
ไม่มีความย่อการแก้ไข
Nullzero (คุย | ส่วนร่วม)
(ไม่แตกต่าง)

รุ่นแก้ไขเมื่อ 16:14, 13 มกราคม 2556

ในปัจจุบันได้มีการคิดค้นอัลกอริทึมหลายอย่างสำหรับแก้ปัญหาที่แตกต่างกัน ออกไป เพื่อออกแบบอัลกอริทึมสำหรับแก้ปัญหาต่าง ๆ คุณอาจจะถามตัวเองว่า ปัญหาชนิดไหนสามารถแก้ได้ด้วย divide-and-conquer, dynamic programming, greedy techniques หรือ อัลกอริทึมอื่น ๆ

Divide-and-conquer

อัลกอริทึมนี้แก้ปัญหาด้วยการแตกปัญหาหลักออกเป็นปัญหาย่อย ๆ แล้วรวมคำตอบ ของปัญหาย่อยนี้เข้าด้วยกันทำให้ได้คำตอบของปัญหาหลัก โดยอัลกอริทึมนี้เราสามารถ หาคำตอบของปัญหาได้ง่ายขึ้นจากการรวมคำตอบของปัญหาหลัก Dynamic Programming

บางครั้งเราไม่สามารถแบ่งปัญหาออกเป็นปัญหาย่อย ๆ ที่ไม่เกี่ยวข้องกันได้ ถ้าเรา พยายามจะแบ่งปัญหานั้น ๆ ออกเป็นปัญหาย่อยที่เล็กที่สุด อัลกอริทึมของคุณอาจ จะใช้เวลาทำงานเป็นแบบ exponential ได้ แต่เวลาที่เราแก้ปัญหาต่าง ๆ เรามักจะ พบว่าเราต้องแก้ปัญหาย่อย ๆ ที่เหมือนกันแบบซ้ำไปซ้ำมา เพื่อหลีกเลี่ยงการคำนวน หาคำตอบซ้ำ ๆ ซาก ๆ dynamic programming จะแก้ปัญหาย่อย ๆ เหล่านั้นเพียง ครั้งเดียวแล้วเก็บผลลัพท์ไว้ ถ้าหากพบว่าต้องแก้ปัญหาย่อยนั้นซ้ำอีกเราก็สามารถนำ คำตอบมาจากคำตอบที่เคยคำนวณเก็บไว้ได้ Greedy Algorithms

Greedy Algorithms หาคำตอบโดยเลือกทางที่ดีที่สุดที่พบได้ในขณะนั้นเพื่อให้ได้คำตอบ ที่ดีที่สุด Greedy Algorithms ไม่สามารถหาคำตอบของปัญหาที่ดีที่สุดได้เสมอไป แต่ใน หลาย ๆ กรณี Greedy Algorithms สามารถหาคำตอบที่ดีที่สุดของปัญหานั้น ๆ ได้