อัลกอริทึมแบบละโมบ
Motto of the day เพราะแสวงหา มิใช่เพราะรอคอย เพราะเชี่ยวชาญ มิใช่เพราะโอกาส เพราะสามารถ มิใช่เพราะโชคช่วย ดังนี้แล้ว “ลิขิตฟ้าหรือจะสู้มานะตน” จูกัดเหลียง
หัวข้อ แนวคิด และโคร่งร่างของอัลกอริทึม ลักษณะของปัญหา Optimal substructure Greedy choice ตัวอย่างปัญหาที่ได้คำตอบ ที่ดีที่สุด ที่ดีเพียงพอ
แนวคิดของ greedy algorithm Greedy Choice ไปทางที่รถไม่ติด
ทอนเงิน มีเหรียญ n แบบ : 1, 2, 3, …, n แต่ละแบบมีค่า : 𝑣 1 , 𝑣 2 , 𝑣 3 ,…, 𝑣 𝑛 ต้องการทอนเหรียญเป็นจำนวนน้อยสุด (มีเหรียญแต่ละแบบจำนวนไม่จำกัด)
ทอนด้วยเหรียญ ที่มีค่ามากที่สุดก่อน Greedy Choice ทอนด้วยเหรียญ ที่มีค่ามากที่สุดก่อน ตัวอย่าง : สกุลเงินไทย มีเหรียญ : 1, 2, 5, 10 บาท ต้องการทอนเงินมูลค่า 38 บาท ตอบ เหรียญ 10 บาท 3 เหรียญ 5 บาท 1 เหรียญ, 2 บาท 1 เหรียญ, 1 บาท 1 เหรียญ
ทอนเงิน: greedy อาจใช้ไม่ได้ สมมติว่ามีเหรียญ 4 บาท มีเหรียญ : 1, 2, 4, 5, 10 บาท ต้องทอนเงิน 38 บาท ทอนด้วยเหรียญที่มีค่ามากที่สุดก่อน 10 บาท 3 เหรียญ 5 บาท 1 เหรียญ, 2 บาท 1 เหรียญ, 1 บาท 1 เหรียญ, ทอนแบบใช้จำนวนเหรียญน้อยสุด 10 บาท 3 เหรียญ, 4 บาท 2 เหรียญ, ไม่ได้จำนวนเหรียญน้อยที่สุด
อัลกอริทึมแบบละโมบ เหมาะกับ optimization problems เป็นวงวนของการตัดสินใจเลือกเพื่อสร้างคำตอบ พิจารณาทางเลือกที่ดีที่สุด ณ ปัจจุบัน (locally optimal choice, greedy choice) สร้างคำตอบเล็ก -> ใหญ่ -> สมบูรณ์ หวังว่าจะได้คำตอบสมบูรณ์ที่ดีที่สุด -> ต้องพิสูจน์ (globally optimal solution)
โครงร่างของอัลกอริทึม Greedy( C ) { S = an empty set while( C ≠ ∅) { x = select ( C ) C = C – {x} if ( isFeasible( S ∪ { x } )) { S = S ∪ { x } if ( isSolution( S ) ) return S } return “No Solution”
Activity Selection
ตัวอย่าง
Greedy Strategy
เลือก 𝑓 𝑖 น้อยสุด : เสร็จเร็วสุด เลือก 𝑓 𝑖 น้อยสุด : เสร็จเร็วสุด
เลือก 𝑓 𝑖 น้อยสุด : เสร็จเร็วสุด เลือก 𝑓 𝑖 น้อยสุด : เสร็จเร็วสุด