Skip to main content

greedy-algorithms

การทำความเข้าใจเกี่ยวกับ Greedy Algorithms

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

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


1. หลักการของ Greedy Algorithms

การทำงานของ Greedy Algorithm จะประกอบไปด้วย 3 ขั้นตอนหลัก:

  1. การเลือก (Selection): เลือกตัวเลือกที่ดีที่สุดในขั้นตอนปัจจุบัน
  2. การตัดสินใจ (Decision): ตัดสินใจว่าจะยอมรับตัวเลือกที่เลือกและดำเนินการต่อ
  3. การอัปเดตสถานะ (Update): อัปเดตข้อมูลที่เกี่ยวข้องหรือสถานะปัจจุบันหลังจากการตัดสินใจ

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


2. คุณสมบัติของ Greedy Algorithms

การเลือกใช้ Greedy Algorithms จะได้ผลลัพธ์ที่ถูกต้องและเหมาะสมเมื่อปัญหามีคุณสมบัติ 2 ประการหลัก:

1. Greedy Choice Property:

  • การตัดสินใจในแต่ละขั้นตอนที่ดีที่สุดในขณะนั้นสามารถสร้างทางออกที่ดีที่สุดในระดับรวมได้ ตัวเลือกที่ดีที่สุดในปัจจุบันสามารถเป็นส่วนหนึ่งของทางออกที่ดีที่สุดทั้งหมดได้

2. Optimal Substructure:

  • ปัญหานั้น ๆ มีโครงสร้างย่อยที่สามารถแก้ไขได้ด้วยวิธีการแบบ Divide and Conquer หรือโดยการใช้การตัดสินใจที่ดีที่สุดในแต่ละขั้นตอนและบูรณาการผลลัพธ์ย่อยเข้าด้วยกันเพื่อให้ได้ผลลัพธ์ที่ดีที่สุดในระดับรวม

3. ตัวอย่างของ Greedy Algorithms

1. Knapsack Problem (0/1 Knapsack)

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

ใน Greedy Approach เราจะเลือกสิ่งที่มี อัตราส่วนของค่าใช้จ่าย/น้ำหนัก (Value-to-Weight Ratio) สูงที่สุดในแต่ละขั้นตอน

ตัวอย่าง:

  • ให้รายการสินค้าที่มีน้ำหนักและค่าตามตารางนี้:

    สินค้าน้ำหนักค่าใช้จ่าย
    1210
    2315
    3440
    4550
  • ความสามารถในการบรรทุกสูงสุดของกระเป๋าคือ 5 หน่วยน้ำหนัก

  • วิธีการ greedy จะเลือกสินค้าที่ให้ค่าใช้จ่ายสูงที่สุดเมื่อคำนวณจากอัตราส่วนของค่าใช้จ่ายต่อน้ำหนัก

การเลือกสินค้าคือ:

  • เลือกสินค้าหมายเลข 4 (น้ำหนัก 5, ค่าใช้จ่าย 50) ทำให้หมดความสามารถในการบรรทุก

แม้ว่าวิธี greedy จะให้ผลลัพธ์ในบางสถานการณ์ที่ดี แต่ในบางกรณีที่ไม่สามารถแก้ไขปัญหาได้อย่างดีที่สุด

2. Activity Selection Problem

Activity Selection คือปัญหาที่ให้เราเลือกกิจกรรมที่ไม่ชนกันจากชุดกิจกรรมที่มีเวลาเริ่มต้นและเวลาสิ้นสุด

ตัวอย่าง:

ให้กิจกรรม A, B, C, D ที่มีเวลาที่เริ่มต้นและเวลาสิ้นสุดเป็น:

  • A: (1, 4)
  • B: (2, 6)
  • C: (5, 7)
  • D: (8, 9)

เราต้องการเลือกกิจกรรมที่ไม่ชนกันและจำนวนมากที่สุด

Greedy Strategy:

  • เลือกกิจกรรมที่เสร็จสิ้นเร็วที่สุดในแต่ละรอบ เพื่อให้เหลือเวลาสำหรับกิจกรรมอื่น ๆ ที่มี
  • เริ่มจากกิจกรรม A (เสร็จที่เวลา 4)
  • เลือกกิจกรรม C (เริ่มที่เวลา 5)
  • เลือกกิจกรรม D (เริ่มที่เวลา 8)

ผลลัพธ์:

  • กิจกรรมที่เลือกได้คือ A, C, D

4. ข้อดีและข้อเสียของ Greedy Algorithms

ข้อดี:

  1. ความเรียบง่าย: อัลกอริธึมนี้มักจะมีการออกแบบที่ง่ายและไม่ซับซ้อน
  2. ประสิทธิภาพสูง: ในหลายกรณี Greedy Algorithms ให้ผลลัพธ์ที่ดีและสามารถทำงานได้ในเวลาที่รวดเร็ว
  3. ไม่ต้องคำนวณซ้ำ: ไม่มีการคำนวณค่าที่ซ้ำซ้อนจากการตัดสินใจในแต่ละขั้นตอน

ข้อเสีย:

  1. ไม่ได้ผลเสมอไป: Greedy Algorithms อาจไม่สามารถหาผลลัพธ์ที่ดีที่สุดในบางปัญหาได้ เพราะมันจะเลือกวิธีที่ดีที่สุดในแต่ละขั้นตอน แต่ไม่รับประกันว่าจะเป็นวิธีที่ดีที่สุดในระดับรวม
  2. ขาดการพิจารณาอนาคต: เนื่องจากเลือกเฉพาะทางออกที่ดีที่สุดในขณะนั้น อาจทำให้สูญเสียโอกาสที่ดีกว่าในอนาคต

5. สรุป

  • Greedy Algorithms คือการเลือกทำการตัดสินใจที่ดีที่สุดในแต่ละขั้นตอน โดยไม่พิจารณาผลลัพธ์ในอนาคต
  • Greedy Algorithms เหมาะสมกับปัญหาที่มี Greedy Choice Property และ Optimal Substructure
  • ตัวอย่างของปัญหาที่สามารถใช้ Greedy Algorithms ได้ เช่น Activity Selection Problem, Huffman Encoding, Fractional Knapsack
  • การใช้ Greedy Algorithms อาจให้ผลลัพธ์ที่ดีในบางกรณี แต่ไม่รับประกันว่าจะเป็นผลลัพธ์ที่ดีที่สุดในทุกกรณี

การเลือกใช้ Greedy Algorithms จะต้องพิจารณาคุณสมบัติของปัญหาและตรวจสอบว่ามีลักษณะการแก้ปัญหาที่เหมาะสมกับวิธีการนี้หรือไม่