ขั้นตอนวิธีแบ่งแยกและเอาชนะ

ในวิทยาการคอมพิวเตอร์ ขั้นตอนวิธีแบ่งแยกและเอาชนะ (; D&C) เป็นวิธีการออกแบบขั้นตอนวิธีโดยมีพื้นฐานมาจากการเรียกซ้ำ ขั้นตอนวิธีแบ่งแยกและเอาชนะทำงานโดยแบ่งปัญหาออกเป็นปัญหาย่อย 2 ส่วนหรือมากกว่านั้นแบบเวียนเกิด ปัญหาถูกแบ่งไปเรื่อย ๆ จนเล็กและง่ายพอที่จะแก้อย่างง่ายดาย หลังจากแก้ปัญหาย่อยเล็ก ๆ เหล่านั้นแล้วก็จะนำคำตอบมารวมกันขึ้นไปเรื่อย ๆ จนสุดท้ายได้คำตอบของปัญหาดั้งเดิม

กลวิธีนี้เป็นพื้นฐานของขั้นตอนวิธีที่มีประสิทธิภาพจำนวนมากมาย เช่น การเรียงลำดับ (การเรียงลำดับแบบเร็ว การเรียงลำดับแบบผสาน) การคูณเลขขนาดใหญ่ (ขั้นตอนวิธีของคาราซูบา) การคำนวณการแปลงฟูรีเยไม่ต่อเนื่อง

ในอีกด้าน การที่จะเข้าใจและสามารถออกแบบขั้นตอนวิธีแบ่งแยกและเอาชนะได้นั้นต้องใช้ทักษะในระดับหนึ่ง เพราะในการที่จะทำให้ขั้นตอนวิธีมีการเรียกซ้ำต่อไปได้เรื่อย ๆ ในเวลาที่ต้องการ บางครั้งอาจจะต้องหาวิธีสร้างปัญหาย่อยซึ่งซับซ้อนและยากมาก นอกจากนี้ การสร้างขั้นตอนวิธีแบ่งแยกและเอาชนะนั้นไม่มีขั้นตอนอย่างเป็นระบบ ตัวอย่างความซับซ้อนจากการวิเคราะห์หรือออกแบบขั้นตอนวิธีแบ่งแยกและเอาชนะ เช่น การคำนวณหาจำนวนฟีโบนัชชีในเวลา  โดยใช้รูปเมทริกซ์ร่วมกับการยกกำลังโดยการยกกำลังสอง

ขั้นตอนวิธีแบ่งแยกและเอาชนะ ยังรวมไปถึงขั้นตอนวิธีที่แต่ละปัญหาแบ่งออกเป็นปัญหาย่อยหลายส่วน แต่กลับใช้คำตอบหรือคำนวณคำตอบจากเพียงแค่ปัญหาย่อยเดียวเท่านั้น เช่น การค้นหาแบบทวิภาคบนแถวลำดับที่เรียงแล้ว (หรือขั้นตอนวิธีแบ่งครึ่ง สำหรับการหาคำตอบของรากในการวิเคราะห์เชิงจำนวน) หากนิยามของขั้นตอนวิธีนี้รวมไปถึงขั้นตอนวิธีที่มีเพียงปัญหาย่อยเดียวด้วย อาจทำให้ทุก ๆ ขั้นตอนวิธีที่มีการเรียกซ้ำหรือมีวงวนกลายเป็น "การแบ่งแยกและเอาชนะ" ไปเสียหมด บางคนจึงนับว่าขั้นตอนวิธีจะเป็น "การแบ่งแยกและเอาชนะ" ก็ต่อเมื่อมีการแบ่งปัญหาออกเป็นปัญหาย่อย 2 ส่วนหรือมากกว่าเท่านั้น และเรียก "การลดและเอาชนะ" (decrease and conquer) สำหรับขั้นตอนวิธีที่แบ่งแล้วได้ปัญหาย่อยเดียวเหมือนเดิมแทน

โดยมากแล้ว ความถูกต้องของขั้นตอนวิธีแบ่งแยกและเอาชนะสามารถพิสูจน์ได้โดยการอุปนัยทางคณิตศาสตร์ ในขณะที่เวลาการคำนวณของขั้นตอนวิธีสามารถหาได้จากการแก้ความสัมพันธ์เวียนเกิด

ข้อได้เปรียบ

แก้ไขปัญหาที่ยาก 
ขั้นตอนวิธีแบ่งแยกและเอาชนะเป็นวิธีในการแก้ปัญหาที่ยากบางปัญหาได้อย่างดี เช่น ปัญหาหอคอยแห่งฮานอย ในการที่จะแก้ปัญหานี้ สิ่งที่ต้องการมีเพียงวิธีการแบ่งปัญหาเป็นปัญหาย่อย และวิธีการในการประกอบคำตอบของปัญหาย่อยมาเป็นคำตอบของปัญหาดั้งเดิม

ประสิทธิภาพของขั้นตอนวิธี 
ขั้นตอนวิธีแบ่งแยกและเอาชนะมักจะช่วยในการสร้างขั้นตอนวิธีที่มีประสิทธิภาพ เช่น การคูณอย่างรวดเร็วด้วยขั้นตอนวิธีของคาราซูบา การเรียงลำดับอย่างรวดเร็วด้วยการเรียงลำดับแบบเร็วหรือการเรียงลำดับแบบผสาน การคูณเมทริกซ์ด้วยขั้นตอนวิธีของสแตรสเซน หรือการคำนวณการแปลงฟูรีเยไม่ต่อเนื่องแบบเร็ว

ในตัวอย่างทั้งหมดที่กล่าวมา ขั้นตอนวิธีแบ่งแยกและเอาชนะช่วยในการลดความซับซ้อนในการคำนวณได้อย่างมีนัยยะสำคัญ ยกตัวอย่างเช่นการเรียงลำดับแบบผสาน ซึ่งคำนวณกรณีฐานได้ในเวลาคงที่ และการแบ่งและรวมปัญหาในแต่ละครั้งใช้เวลา  เมื่อ n คือขนาดปัญหาที่กำลังแก้ในขณะนั้น จะได้ว่าประสิทธิภาพโดยรวมของขั้นตอนวิธี คือ  ซึ่งดีกว่าการเรียงลำดับแบบอื่น ๆ ที่คิดค้นขึ้นมาก่อนหน้านั้น ซึ่งส่วนใหญ่จะใช้เวลา

อ้างอิง 

ขั้นตอนวิธี
การวิจัยดำเนินการ
วิธีการหาค่าเหมาะสมที่สุด