การแบ่งแยกและเอาชนะ Divide & Conquer ตอนที่ 2
บทนำ กลวิธีนี้มีใช้เพื่อจัดการกับปัญหาในหลากหลายศาสตร์กับการออกแบบ อัลกอริทึม เพื่อแก้ไขปัญหาเชิงคำนวณ แนวคิดการแก้ปัญหาแบบนี้มี หลักการว่า แบ่งปัญหาใหญ่นั้นออกเป็นปัญหาย่อยๆ หลาย ๆ ปัญหาที่มี ขนาดเล็กกว่า หาคำตอบของแต่ละปัญหาย่อย แล้วนำคำตอบย่อยๆ ที่ได้นี้มา รวมกันเพื่อกลายเป็นคำตอบของปัญหาใหญ่ อาจจะซับซ้อนน้อยกว่า และ ใช้เวลาโดยรวมที่ดีกว่าก็ได้ อัลกอริทึมแบบแบ่งแยกและเอาชนะมักมีประสิทธิภาพที่ดีกว่าอัลกอริทึมที่ ทำงานอย่างตรงไปตรงมา ค่อยเป็นค่อยไป นอกจากนี้ยังเขียนบรรยายตัว อัลกอริทึมในรูปของการทำซ้ำแบบเรียกซ้ำได้อย่างเหมาะมาก ทำให้เขียน บรรยายอัลกอริทึมได้อย่างไม่ซับซ้อน และวิเคราะห์ประสิทธิภาพการทำงาน ได้ง่าย
หัวข้อ โครงของอัลกอริทึมแบบ Divide & Conquer ตัวอย่าง Quick select Min + Max
โครงของอัลกอริทึมแบบ Divide & Conquer
Divide – Conquer - Combine DQ ( P) { if ( P is trivial ) return Solve ( P ) Divide P into P1, P2, … , Pk for ( i =1to k ) Si = DQ ( Pi ) S = Combine ( S1, S2, …, Sk) return S }
Quick select
Selection : หาตัวน้อยสุดอันดับ k
Sort ได้ d[k] คือคำตอบ
ใช้ min-heap
ใช้ max-heap
QuickSelect
QuickSelect
QuickSelect : วิเคราะห์
QuickSelect : กรณีเร็วสุด
QuickSelect : กรณีช้าสุด
QuickSelect : กรณีเฉลี่ย
QuickSelect : กรณีช้าสุด O(n)
Median – of – Median – of - Five
Median – of – Median – of - Five
เวลาในการหา mm5
QuickSelect
Min + Max
min + max
min + max : แบ่งครึ่ง
min + max : แบ่งครึ่งๆ
min + max : แบ่งครึ่งๆ
min + max : แบ่ง(n-2) + 2
min + max : แบ่ง(n-2) + 2
วิเคราะห์ : แบ่ง(n-2) + 2
แบ่งครึ่งเหลือเศษมากกว่า