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

จาก Theory Wiki
รุ่นแก้ไขเมื่อ 12:01, 4 ตุลาคม 2552 โดย Cardcaptor (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย 'อัลกอริทึมสำหรับหา cycle ที่สั้นที่สุดที่มี edge <math>e \,</math>…')
(ต่าง) ←รุ่นแก้ไขก่อนหน้า | รุ่นแก้ไขล่าสุด (ต่าง) | รุ่นแก้ไขถัดไป→ (ต่าง)
ไปยังการนำทาง ไปยังการค้นหา

อัลกอริทึมสำหรับหา 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