โครงสร้างข้อมูล - Greedy Algorithms
อัลกอริทึมได้รับการออกแบบมาเพื่อให้ได้วิธีการแก้ปัญหาที่เหมาะสมที่สุด ในแนวทางอัลกอริทึมโลภการตัดสินใจจะทำจากโดเมนโซลูชันที่กำหนด ในฐานะที่เป็นคนโลภวิธีการแก้ปัญหาที่ใกล้เคียงที่สุดซึ่งดูเหมือนจะเป็นทางออกที่ดีที่สุดจึงถูกเลือก
อัลกอริธึมโลภพยายามค้นหาโซลูชันที่เหมาะสมในท้องถิ่นซึ่งอาจนำไปสู่โซลูชันที่ปรับให้เหมาะสมทั่วโลกในที่สุด อย่างไรก็ตามโดยทั่วไปแล้วอัลกอริทึมโลภไม่ได้ให้โซลูชันที่ปรับให้เหมาะสมทั่วโลก
การนับเหรียญ
ปัญหานี้คือการนับเป็นมูลค่าที่ต้องการโดยการเลือกเหรียญที่น้อยที่สุดและวิธีการโลภบังคับให้อัลกอริทึมเลือกเหรียญที่ใหญ่ที่สุด หากเราได้รับเหรียญ₹ 1, 2, 5 และ 10 และเราขอให้นับ₹ 18 ขั้นตอนโลภจะเป็น -
1 - เลือกหนึ่ง₹ 10 เหรียญจำนวนที่เหลือคือ 8
2 - จากนั้นเลือกหนึ่งเหรียญ₹ 5 จำนวนที่เหลือคือ 3
3 - จากนั้นเลือกหนึ่งเหรียญ₹ 2 จำนวนที่เหลือคือ 1
4 - และสุดท้ายการเลือกเหรียญ₹ 1 หนึ่งเหรียญจะช่วยแก้ปัญหาได้
แม้ว่าดูเหมือนว่าจะใช้งานได้ดีสำหรับการนับนี้เราต้องเลือกเพียง 4 เหรียญ แต่ถ้าเราเปลี่ยนปัญหาเล็กน้อยวิธีการเดียวกันอาจไม่สามารถให้ผลลัพธ์ที่ดีที่สุดเหมือนกันได้
สำหรับระบบสกุลเงินที่เรามีเหรียญ 1, 7, 10 มูลค่าการนับเหรียญสำหรับมูลค่า 18 จะเหมาะสมที่สุด แต่สำหรับการนับเช่น 15 อาจใช้เหรียญมากกว่าที่จำเป็น ตัวอย่างเช่นวิธีโลภจะใช้ 10 + 1 + 1 + 1 + 1 + 1 รวม 6 เหรียญ ในขณะที่ปัญหาเดียวกันสามารถแก้ไขได้โดยใช้เพียง 3 เหรียญ (7 + 7 + 1)
ดังนั้นเราอาจสรุปได้ว่าแนวทางโลภเลือกโซลูชันที่เหมาะสมทันทีและอาจล้มเหลวในกรณีที่การเพิ่มประสิทธิภาพทั่วโลกเป็นประเด็นสำคัญ
ตัวอย่าง
อัลกอริธึมเครือข่ายส่วนใหญ่ใช้วิธีโลภ นี่คือรายการบางส่วนของพวกเขา -
- ปัญหาพนักงานขายในการเดินทาง
- อัลกอริทึมต้นไม้ที่มีระยะครอบคลุมน้อยที่สุดของ Prim
- อัลกอริทึมต้นไม้ Spanning Tree น้อยที่สุดของ Kruskal
- อัลกอริทึมต้นไม้ Spanning Tree น้อยที่สุดของ Dijkstra
- กราฟ - การระบายสีแผนที่
- กราฟ - ปกเวอร์เท็กซ์
- ปัญหากระเป๋าเป้
- ปัญหาการจัดตารางงาน
มีปัญหาคล้าย ๆ กันมากมายที่ใช้วิธีการโลภเพื่อค้นหาวิธีแก้ปัญหาที่เหมาะสมที่สุด