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

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

จากโจทย์กราฟที่ให้มาเป็นกราฟแบบมีทิศทาง ที่เป็น strongly connected คือสำหรับโหนดสองโหนด ใด ๆ ในกราฟแล้วจะมีเส้นทางจาก ไปถึง เสมอ ซึ่งโจทย์ข้อนี้ต้องการให้เราหาระยะทางที่สั้นที่สุดสำหรับทุกคู่ของโหนดที่ผ่านจุด ที่ให้มา พิจารณาโหนดสองโหนด ในกราฟ เราจะได้ว่าระยะทางที่สั้นที่สุดจากโหนด ไปยังโหนด โดยผ่านจุด ก็คือระยะทางที่สั้นที่สุดจากโหนด ไปยังจุด และจากจุด ไปยังโหนด นั่นเอง

การหาระยะทางที่สั้นที่สุดจากจุด ไปยังโหนดทุกโหนดในกราฟ สามารถทำได้โดยการรันอัลกอริทึมในการหา shortest path ซักตัวโดยเริ่มจากจุด เราก็จะได้ระยะทางที่สั้นที่สุดจากจุด ไปยังทุกโหนดในกราฟแล้ว จากนั้นเราจะทำการหากราฟผันกลับ ของกราฟที่ให้มา แล้วทำการรันอัลกอริทึมในการหาเส้นทางที่สั้นที่สุดโดยเริ่มจากจุด ซึ่งเส้นทางที่สั้นที่สุดจากจุด ไปหาทุกโหนดที่ได้ในกราฟ นี้จะเป็น ระยะทางที่สั้นที่สุดจากทุกโหนดไปยังจุด ในกราฟ นั่นเอง หลังจากนั้นคำตอบก็คือเอาเส้นทางที่สั้นที่สุดจากทุกโหนดไปหาจุด มาต่อกับระยะทางที่สั้นที่สุดจากจุด ไปหาทุกโหนดในกราฟนั่นเอง

เวลาการทำงานของอัลกอริทึมข้างต้นจะเป็นเวลาการทำงานของอัลกอริทึมในการหาเส้นทางที่สั้นที่สุด สมมติให้ใช้ Bellman-Ford algorithm ดังนั้น เวลาส่วนนี้จะเป็น และ จากโจทย์ข้อ 2 เรื่องโจทย์ปัญหาเกี่ยวกับกราฟเราสามารถหากราฟผันกลับ ของกราฟ ที่ให้มาได้โดยใช้เวลา ส่วนเวลาในการต่อเส้นทางที่สั้นที่สุดเข้าด้วยกันตอนสุดท้ายใช้เวลาอีก ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมนี้จึงเป็น