418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต II/เฉลยข้อ 4

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

อัลกอริทึมสำหรับหา cycle ที่สั้นที่สุดที่มี edge เป็นส่วนประกอบ มีดังต่อไปนี้

  1. ตัด edge ออกจากกราฟ
  2. สมมติว่า ให้ทำการหา shortest path จาก ไปยัง ในกราฟที่ตัด ออกไปแล้ว ด้วย Dijkstra's algorithm
  3. คืนผลบวกความยาวของ cycle ในข้อ 2 กับ เป็นคำตอบ

เราสามารถแสดงว่าอัลกอริทึมข้างต้นคืนความยาวของ cycle ที่สั้นที่สุดที่มี เป็นส่วนประกอบได้ดังต่อไปนี้

พิจารณา cycle ที่มี เป็นส่วนประกอบใดๆ ถ้าเราตัด ออกจาก cycle นั้นเราจะได้ path จาก ไปยัง โดย path นี้ไม่ใช้ ใน cycle ที่มี เป็นส่วนประกอบที่สั้นที่สุดจึงต้องมีความยาวของ path จาก ไปยัง ดังกล่าวที่สั้นที่สุดเท่าที่จะเป็นไปได้ ความยาวที่สั้นที่สุดที่ว่านี้คือความยาวของ shortest path จาก ไปยัง ในกราฟที่ตัด edge ออกไปแล้วนั่นเอง

เราจะเห็นได้ว่าอัลกอริทึมข้างบนมีเวลาการทำงานเท่ากับ Dijkstra's algorithm ซึ่งมีเวลาการทำงานเท่ากับ หากเราใช้โครงสร้างข้อมูล Fibonacci Heap