ผลต่างระหว่างรุ่นของ "418531 ภาคต้น 2552/โจทย์ปัญหาการโปรแกรมพลวัต II/เฉลยข้อ 5"
Aoy (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย 'จากโจทย์กราฟที่ให้มาเป็นกราฟแบบมีทิศทาง ที่เป็…') |
Cardcaptor (คุย | มีส่วนร่วม) |
||
แถว 3: | แถว 3: | ||
การหาระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปยังโหนดทุกโหนดในกราฟ สามารถทำได้โดยการรันอัลกอริทึมในการหา shortest path ซักตัวโดยเริ่มจากจุด <math> v_0 \,</math> เราก็จะได้ระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปยังทุกโหนดในกราฟแล้ว จากนั้นเราจะทำการหากราฟผันกลับ <math> G^R \,</math> ของกราฟที่ให้มา แล้วทำการรันอัลกอริทึมในการหาเส้นทางที่สั้นที่สุดโดยเริ่มจากจุด <math> v_0 \,</math> ซึ่งเส้นทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปหาทุกโหนดที่ได้ในกราฟ <math> G^R \,</math> นี้จะเป็น ระยะทางที่สั้นที่สุดจากทุกโหนดไปยังจุด <math> v_0 \,</math> ในกราฟ <math> G \,</math> นั่นเอง หลังจากนั้นคำตอบก็คือเอาเส้นทางที่สั้นที่สุดจากทุกโหนดไปหาจุด <math> v_0 \,</math> มาต่อกับระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปหาทุกโหนดในกราฟนั่นเอง | การหาระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปยังโหนดทุกโหนดในกราฟ สามารถทำได้โดยการรันอัลกอริทึมในการหา shortest path ซักตัวโดยเริ่มจากจุด <math> v_0 \,</math> เราก็จะได้ระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปยังทุกโหนดในกราฟแล้ว จากนั้นเราจะทำการหากราฟผันกลับ <math> G^R \,</math> ของกราฟที่ให้มา แล้วทำการรันอัลกอริทึมในการหาเส้นทางที่สั้นที่สุดโดยเริ่มจากจุด <math> v_0 \,</math> ซึ่งเส้นทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปหาทุกโหนดที่ได้ในกราฟ <math> G^R \,</math> นี้จะเป็น ระยะทางที่สั้นที่สุดจากทุกโหนดไปยังจุด <math> v_0 \,</math> ในกราฟ <math> G \,</math> นั่นเอง หลังจากนั้นคำตอบก็คือเอาเส้นทางที่สั้นที่สุดจากทุกโหนดไปหาจุด <math> v_0 \,</math> มาต่อกับระยะทางที่สั้นที่สุดจากจุด <math> v_0 \,</math> ไปหาทุกโหนดในกราฟนั่นเอง | ||
− | เวลาการทำงานของอัลกอริทึมข้างต้นจะเป็นเวลาการทำงานของอัลกอริทึมในการหาเส้นทางที่สั้นที่สุด สมมติให้ใช้ | + | เวลาการทำงานของอัลกอริทึมข้างต้นจะเป็นเวลาการทำงานของอัลกอริทึมในการหาเส้นทางที่สั้นที่สุด สมมติให้ใช้ Bellman-Ford algorithm ดังนั้น เวลาส่วนนี้จะเป็น <math> O(|V||E|) \,</math> และ |
จากโจทย์ข้อ 2 เรื่องโจทย์ปัญหาเกี่ยวกับกราฟเราสามารถหากราฟผันกลับ <math> G^R \,</math> ของกราฟ <math> G \,</math> ที่ให้มาได้โดยใช้เวลา <math> O(|V|+|E|) \,</math> ส่วนเวลาในการต่อเส้นทางที่สั้นที่สุดเข้าด้วยกันตอนสุดท้ายใช้เวลาอีก <math> O(|V||E|) \,</math> ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมนี้จึงเป็น <math> O(|V||E|)+O(|V|+|E|)+O(|V||E|)+O(|V||E|)=O(|V||E|) \,</math> | จากโจทย์ข้อ 2 เรื่องโจทย์ปัญหาเกี่ยวกับกราฟเราสามารถหากราฟผันกลับ <math> G^R \,</math> ของกราฟ <math> G \,</math> ที่ให้มาได้โดยใช้เวลา <math> O(|V|+|E|) \,</math> ส่วนเวลาในการต่อเส้นทางที่สั้นที่สุดเข้าด้วยกันตอนสุดท้ายใช้เวลาอีก <math> O(|V||E|) \,</math> ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมนี้จึงเป็น <math> O(|V||E|)+O(|V|+|E|)+O(|V||E|)+O(|V||E|)=O(|V||E|) \,</math> |
รุ่นแก้ไขปัจจุบันเมื่อ 12:02, 4 ตุลาคม 2552
จากโจทย์กราฟที่ให้มาเป็นกราฟแบบมีทิศทาง ที่เป็น strongly connected คือสำหรับโหนดสองโหนด ใด ๆ ในกราฟแล้วจะมีเส้นทางจาก ไปถึง เสมอ ซึ่งโจทย์ข้อนี้ต้องการให้เราหาระยะทางที่สั้นที่สุดสำหรับทุกคู่ของโหนดที่ผ่านจุด ที่ให้มา พิจารณาโหนดสองโหนด ในกราฟ เราจะได้ว่าระยะทางที่สั้นที่สุดจากโหนด ไปยังโหนด โดยผ่านจุด ก็คือระยะทางที่สั้นที่สุดจากโหนด ไปยังจุด และจากจุด ไปยังโหนด นั่นเอง
การหาระยะทางที่สั้นที่สุดจากจุด ไปยังโหนดทุกโหนดในกราฟ สามารถทำได้โดยการรันอัลกอริทึมในการหา shortest path ซักตัวโดยเริ่มจากจุด เราก็จะได้ระยะทางที่สั้นที่สุดจากจุด ไปยังทุกโหนดในกราฟแล้ว จากนั้นเราจะทำการหากราฟผันกลับ ของกราฟที่ให้มา แล้วทำการรันอัลกอริทึมในการหาเส้นทางที่สั้นที่สุดโดยเริ่มจากจุด ซึ่งเส้นทางที่สั้นที่สุดจากจุด ไปหาทุกโหนดที่ได้ในกราฟ นี้จะเป็น ระยะทางที่สั้นที่สุดจากทุกโหนดไปยังจุด ในกราฟ นั่นเอง หลังจากนั้นคำตอบก็คือเอาเส้นทางที่สั้นที่สุดจากทุกโหนดไปหาจุด มาต่อกับระยะทางที่สั้นที่สุดจากจุด ไปหาทุกโหนดในกราฟนั่นเอง
เวลาการทำงานของอัลกอริทึมข้างต้นจะเป็นเวลาการทำงานของอัลกอริทึมในการหาเส้นทางที่สั้นที่สุด สมมติให้ใช้ Bellman-Ford algorithm ดังนั้น เวลาส่วนนี้จะเป็น และ จากโจทย์ข้อ 2 เรื่องโจทย์ปัญหาเกี่ยวกับกราฟเราสามารถหากราฟผันกลับ ของกราฟ ที่ให้มาได้โดยใช้เวลา ส่วนเวลาในการต่อเส้นทางที่สั้นที่สุดเข้าด้วยกันตอนสุดท้ายใช้เวลาอีก ดังนั้นเวลาการทำงานทั้งหมดของอัลกอริทึมนี้จึงเป็น