The Floyd–Warshall algorithm compares all possible paths through the graph between each pair of vertices. It is able to do this with Θ(|V |3) comparisons in a graph. This is remarkable considering that there may be up to Ω(|V |2) edges in the graph, and every combination of edges is tested. It does so by incrementally improving an estimate on the shortest path between two vertices, until the estimate is optimal.
Consider a graph G with vertices V numbered 1 through N. Further consider a function shortestPath(i, j, k) that returns the shortest possible path from i to j using vertices only from the set {1,2,...,k} as intermediate points along the way. Now, given this function, our goal is to find the shortest path from each i to each j using only vertices 1 to k + 1.
For each of these pairs of vertices, the true shortest path could be either (1) a path that only uses vertices in the set {1, ..., k} or (2) a path that goes from i to k + 1 and then from k + 1 to j. We know that the best path from i to j that only uses vertices 1 through k is defined by shortestPath(i, j, k), and it is clear that if there were a better path from i to k + 1 to j, then the length of this path would be the concatenation of the shortest path from i to k + 1 (using vertices in {1, ..., k}) and the shortest path from k + 1 to j (also using vertices in {1, ..., k}).
อัลกอริทึมฟลอยด์ – Warshall เปรียบเทียบเส้นทางไปได้ทั้งหมดโดยใช้กราฟระหว่างแต่ละคู่ของจุดยอด สามารถทำเช่นนี้กับΘ (|เปรียบเทียบ| 3 V) ในกราฟ นี้น่าสังเกตพิจารณาว่า อาจมีถึงΩ (|ขอบ| 2 V) ในกราฟ และมีทดสอบทุก ๆ ชุดของขอบ มันไม่ได้ โดยการปรับปรุงแบบเพิ่มหน่วยการประเมินบนเส้นทางสั้นที่สุดระหว่างจุดยอด 2 จนกว่าการประเมินจะดีที่สุดพิจารณากราฟ G มีจุดยอด V หมายเลข 1 ถึง N. ต่อไป พิจารณาฟังก์ชัน shortestPath (ฉัน j, k) ที่กลับเส้นทางสั้นที่สุดได้จากฉันไปเจใช้จุดยอดเท่านั้นจากชุด { 1, 2,..., k } เป็นจุดระหว่างกลางตามวิธีการ ตอนนี้ ให้ฟังก์ชันนี้ เป้าหมายของเราที่จะหาเส้นทางสั้นที่สุดจากแต่ละ i ไป j แต่ละใช้เฉพาะจุดยอด 1 กับ k + 1แต่ละเหล่านี้คู่ของจุดยอด เส้นทางสั้นที่สุดจริงอาจจะอย่างใดอย่างหนึ่ง (1) เส้นทางที่ใช้จุดยอดในชุดเท่านั้น { 1,..., k } หรือ (2) เส้นทางที่ไป จากฉันกับ k + 1 และ จาก 1 j + k เรารู้เส้นทางดีที่สุดจากฉันไปเจที่ใช้จุดยอด 1 ผ่าน k เท่านั้น ถูกกำหนด โดย shortestPath (ฉัน j, k), และเป็นที่ชัดเจนว่า ถ้ามีเส้นทางดีขึ้นจากฉันกับ k + 1 เจ แล้วความยาวของเส้นทางนี้จะเรียงต่อกันของเส้นทางที่สั้นที่สุดจากฉันไป k + 1 (ใช้จุดยอดใน { 1,..., k }) และเส้นทางที่สั้นที่สุดจาก k + 1 ไปเจ (ใช้จุดยอดใน { 1,..., k })
การแปล กรุณารอสักครู่..
อัลกอริทึมฟลอยด์-Warshall เปรียบเทียบเส้นทางที่เป็นไปได้ทั้งหมดที่ผ่านการกราฟระหว่างคู่ของแต่ละจุด มันสามารถที่จะทำเช่นนี้กับΘ (| V | 3) การเปรียบเทียบในกราฟ นี้เป็นที่น่าทึ่งพิจารณาว่าอาจจะมีถึงΩ (| V | 2) ขอบในกราฟและการรวมกันของขอบทุกคนจะผ่านการทดสอบ มันไม่ได้โดยเพิ่มขึ้นการปรับปรุงประมาณการเกี่ยวกับเส้นทางที่สั้นที่สุดระหว่างสองจุดจนประมาณการที่เหมาะสม. พิจารณากราฟ G กับจุด V หมายเลข 1 ผ่าน N. เพิ่มเติมพิจารณา shortestPath ฟังก์ชั่น (i, J, K) ที่ส่งกลับที่สั้นที่สุด เส้นทางที่เป็นไปได้จาก i เจโดยใช้จุดจากชุด {1,2, ... , k} เป็นจุดกลางไปพร้อมกัน ตอนนี้ให้ฟังก์ชั่นนี้เป้าหมายของเราคือการหาเส้นทางที่สั้นที่สุดจากแต่ละฉันให้แต่ละ J ใช้เฉพาะจุดที่ 1 ถึง k + 1. สำหรับแต่ละคู่เหล่านี้ของจุดเส้นทางที่สั้นที่สุดที่แท้จริงอาจจะเป็นอย่างใดอย่างหนึ่ง (1) เส้นทางที่ เพียงใช้จุดในชุด {1, ... , k} หรือ (2) เส้นทางที่จะไปจากฉันกับ k + 1 แล้วจาก K + 1 ถึงเจ เรารู้ว่าเส้นทางที่ดีที่สุดจาก i เจที่ใช้เฉพาะจุดที่ 1 ถึง k ถูกกำหนดโดย shortestPath (i, J, K) และมันเป็นที่ชัดเจนว่าถ้ามีเส้นทางที่ดีกว่าจาก i กับ k + 1 ถึงเจแล้ว ความยาวของเส้นทางนี้จะเป็นกำหนดการเส้นทางที่สั้นที่สุดจาก i กับ k + 1 (โดยใช้จุดใน {1, ... , k}) และเส้นทางที่สั้นที่สุดจาก K + 1 ถึง J (ยังใช้จุดใน {1 ... , k})
การแปล กรุณารอสักครู่..
ขั้นตอนวิธีฟลอยด์– warshall เปรียบเทียบเส้นทางที่เป็นไปได้ทั้งหมดผ่านกราฟระหว่างแต่ละคู่ของจุดยอด . มันสามารถที่จะทำเช่นนี้กับΘ ( | V | 3 ) การเปรียบเทียบกราฟ นี้เป็นที่โดดเด่นพิจารณาว่าอาจจะถึงΩ ( | V | 2 ) ขอบในกราฟ และทุกชุดของขอบจะทดสอบ มันไม่ได้โดยแบบเพิ่มหน่วยปรับปรุงการประเมินบนเส้นทางที่สั้นที่สุดระหว่างสองจุด ,จนประมาณที่ดีที่สุด
พิจารณากราฟ G ที่มีจุดยอด v หมายเลข 1 ผ่านได้ เพิ่มเติมพิจารณาฟังก์ชัน shortestpath ( I , J , K ) ที่ส่งกลับให้เร็วที่สุด ผมกับ เจ โดยใช้เส้นทางจากจุดเดียวจากเซต { 1 , 2 , . . . , k } คะแนนเป็นระดับกลางพร้อมกัน ตอนนี้ได้รับหน้าที่นี้ เป้าหมายของเราคือการหาเส้นทางที่สั้นที่สุดจากแต่ละชั้นแต่ละเจ ใช้เฉพาะจุด 1 K
1 .สำหรับแต่ละเหล่านี้คู่ของจุดยอด , จริงเส้นทางสั้นที่สุด อาจเป็นได้ทั้ง ( 1 ) เส้นทางที่ใช้จุดในเซต { 1 , . . . , k } หรือ ( 2 ) ทางที่ไปจากผม K 1 และจาก K 1 เจ เราทราบว่าเส้นทางที่ดีที่สุดจากฉันกับ เจ ที่ใช้เพียงจุดที่ 1 ผ่าน k ถูกกำหนดโดย shortestpath ( I , J , K ) , และเป็นที่ชัดเจนว่า หากมีเส้นทางที่ดีจากผม K 1 เจแล้วความยาวของเส้นทางนี้จะเป็นเส้นทางที่สั้นที่สุดจากที่เรียงต่อกันผม K 1 ( ใช้จุดใน { 1 , . . . , k } ) และเส้นทางที่สั้นที่สุดจาก K 1 J ( ยังใช้จุดใน { 1 , . . . , k } )
การแปล กรุณารอสักครู่..