delivering a shortest-paths tree when the graph has some negative-weight edges. The Bellman-
Ford algorithm works in a more-general case than Dijkstra’s algorithm. It solves the shortest-paths
tree problem even when the graph has negative-weight edges. If there is a negative-weight cycle,
the algorithm indicates that no solution exists.
Recall that Dijkstra’s algorithm only relaxes those edges incident to the chosen vertex with
the minimum shortest-path estimate. The failure of Dijkstra’s algorithm for graphs with negativeweight
edges is due to the fact that it does not calculate the domino effect caused by negative edges.
Take a look at Figure 16 once again. In that figure, if we push the negative-edge effect forward, a
correct shortest-paths tree can then be built. This inspires the design of the Bellman-Ford algorithm
which relaxes all edges in each iteration.
Initially, the shortest-path estimates of all vertices other than the source are set to be 1. Then
the algorithm makes n¡1 passes over all the edges of the graph. In each pass, if ±[v] > ±[u]+w(u; v),
then we set the value of ±[v] to be ±[u]+w(u; v), and modify the predecessor of vertex v. A notable
feature of the Bellman-Ford algorithm is that in the kth iteration, the shortest-path estimate for
vertex v, i.e., ±[v], equals the length of the shortest path from the source to v with at most k edges.
If, after n¡1 passes, there exists an edge (u; v) such that ±[v] > ±[u]+w(u; v), then a negative cycle
has been detected. Otherwise, for all vertices other than the source, we build the shortest-paths
tree by adding the edges from their predecessors to them.
Algorithm: Bellman-Ford
Input: A weighted, directed graph G = (V;E;w); a source vertex s.
Output: A shortest-paths spanning tree T rooted at s.
for each vertex v 2 V do
±[v] Ã 1
¼[v] ÃNIL
±[s] Ã 0
for i à 1 to n ¡ 1 do
for each (u; v) 2 E do
if ±[v] > ±[u] + w(u; v) then
±[v] Ã ±[u] + w(u; v)
¼[v] Ã u
for each (u; v) 2 E do
if ±[v] > ±[u] + w(u; v) then
Output “A negative cycle exists.”
Exit
T Ã ;
for v 2 V ¡ s do
T Ã T [ f(¼[v]; v)g
The Bellman-Ford algorithm has the running time of O(mn) since there are O(n) iterations,
and each iteration takes O(m) time. The correctness follows from the fact that in the kth iteration,
the shortest-path estimate for each vertex equals the length of the shortest path from the source
to that vertex with at most k edges. Since a simple path in G contains at most n ¡ 1 edges, the
shortest-path estimates stabilize after n ¡ 1 iterations unless there exists a negative cycle in the
graph.
The following figures show how the execution of the Bellman-Ford works on the graph in
Figure 15. The dark dotted edges record those that do cause some effect in the relaxation. Initially,
ส่งต้นไม้เส้นทางที่สั้นที่สุดเมื่อกราฟมีน้ำหนักลบขอบบาง บริการ-อัลกอริทึมของฟอร์ดที่ทำงานในกรณีทั่วไปมากขึ้นกว่าวิธีของไดค์ มันแก้สั้นที่สุดเส้นทางต้นไม้ปัญหาแม้กราฟมีน้ำหนักลบขอบ ถ้ามีวงจรลบน้ำหนักอัลกอริทึมบ่งชี้ว่า โซลูชันที่ไม่มีอยู่นึกว่า ของไดค์ก็ขอบเหล่านั้นเหตุการณ์การจุดท่านด้วยเท่านั้นประเมินเส้นทางสั้นที่สุดน้อยที่สุด ความล้มเหลวของวิธีของไดค์สำหรับกราฟที่มี negativeweightขอบได้เนื่องจากข้อเท็จจริงที่ว่ามันไม่สามารถคำนวณผลกระทบต่อเนื่องที่เกิดจากค่าลบขอบมาดูรูป 16 ครั้ง ในรูปนั้น ถ้าเราผลักผลลบขอบ การเส้นทางที่สั้นที่สุดต้นไม้สามารถแก้ไข แล้วสร้าง นี้แรงบันดาลใจการออกแบบของอัลกอริทึมบริการฟอร์ดซึ่งก็ทั้งหมดขอบเนื่องเริ่ม ประเมินเส้นทางสั้นที่สุดของจุดยอดทั้งหมดไม่ใช่แหล่งจะตั้งเป็น 1 แล้วอัลกอริทึมทำผ่าน n¡1 ผ่านขอบทั้งหมดของกราฟ ในแต่ละรอบ ถ้า± [v] > [u] ± + w (u, v),แล้วเราตั้งค่า± [v] เป็น [u] ± + w (u, v), และปรับเปลี่ยนรุ่นก่อนของจุดยอด v ความโดดเด่นลักษณะการทำงานของอัลกอริทึมบริการฟอร์ดเป็นที่ kth เกิดซ้ำ การประเมินเส้นทางสั้นที่สุดสำหรับจุดยอด v เช่น ± [v], เท่ากับความยาวของเส้นทางที่สั้นที่สุดจากแหล่งไป v กับขอบ k ที่มากที่สุดถ้า หลังจาก n¡1 ผ่าน มีขอบ (u, v) เช่น±ที่ [v] > [u] ± + w (u, v), จากนั้นวงจรลบพบ มิฉะนั้น สำหรับจุดยอดทั้งหมดไม่ใช่แหล่งที่มา เราสร้างสั้นเส้นทางแผนภูมิ โดยการเพิ่มขอบจากบรรดาลูกหลานเหล่านั้นอัลกอริทึม: บริการฟอร์ดป้อนข้อมูล: น้ำหนัก กำกับกราฟ G = (V E; w); จุด s เป็นแหล่งผลลัพธ์: แบบสั้นเส้นทางซึ่งประกอบไปด้วยต้นไม้รากที่ s Tสำหรับแต่ละจุดยอด v 2 V ทำ± [v] อยู่ 1¼ [v] ÃNIL± [s] อยู่ 0ผมใช้ 1 n ¡ 1 ทำสำหรับแต่ละ (u, v) ทำ 2 Eถ้า± [v] > [u] ± + w (u, v) แล้ว± [v] ใช้± [u] + w (u, v)¼ [v] ใช้ uสำหรับแต่ละ (u, v) ทำ 2 Eถ้า± [v] > [u] ± + w (u, v) แล้วแสดงผล "รอบลบแล้ว"จบการทำงานใช้ Tสำหรับ v 2 V ¡ s ทำใช้ T T [f (¼ [v] v) gอัลกอริทึมบริการฟอร์ดได้เวลาทำงานของ O(mn) เนื่องจากมีการวนซ้ำ O(n)และการเกิดซ้ำแต่ละเวลา O(m) ความถูกต้องดังต่อไปนี้จากการที่เกิดซ้ำ kthประเมินเส้นทางสั้นที่สุดสำหรับแต่ละจุดยอดเท่ากับความยาวของเส้นทางสั้นที่สุดจากแหล่งกับจุดยอดที่มีมากที่สุด k ขอบ เนื่องจากประกอบด้วยเส้นทางง่ายใน G ที่มากที่สุด n ¡ 1 ขอบ การประเมินเส้นทางสั้นที่สุดอยู่ดีหลังจาก n ¡ 1 ซ้ำยกเว้นมีวงจรลบในการกราฟตัวเลขต่อไปนี้แสดงวิธีการดำเนินการของฟอร์ดบริการงานบนกราฟในรูปที่ 15 มืดจุดขอบคอร์ดที่ไม่ก่อให้เกิดผลบางอย่างในการพักผ่อน เริ่มต้น
การแปล กรุณารอสักครู่..

ซึ่งเป็นเส้นทางสั้นที่สุด ต้นไม้ เมื่อกราฟมีขอบบางน้ำหนักเชิงลบ พนักงาน - ขั้นตอนวิธี
ฟอร์ดทำงานในคดีทั่วไปมากกว่าขั้นตอนวิธีของไดค์สตรา . มันแก้ปัญหาเส้นทางสั้นที่สุด
ต้นไม้แม้เมื่อกราฟมีน้ำหนักเชิงลบขอบ หากมีวงจรน้ำหนักลบ
ขั้นตอนวิธีแสดงว่าไม่มีวิธีแก้มีอยู่
จำได้ว่าขั้นตอนวิธีของไดค์สตราเพียงผ่อนคลายขอบที่เกิดขึ้นให้เลือกเส้นทางที่สั้นที่สุดยอดกับ
ขั้นต่ำประมาณ ความล้มเหลวของขั้นตอนวิธีของไดค์สตราสำหรับกราฟที่มีขอบ negativeweight
เนื่องจากข้อเท็จจริงที่ว่ามันไม่คำนวณผลกระทบโดมิโนจากขอบลบ .
มาดูรูปที่ 16 อีกครั้ง ในรูป ถ้าเราผลักดันผลขอบลบไปข้างหน้า ,
แก้ไขเส้นทางสั้นที่สุดต้นไม้ก็สามารถสร้าง นี้เป็นแรงบันดาลใจในการออกแบบของพนักงานฟอร์ดขั้นตอนวิธี
ซึ่งใช้ขอบในแต่ละ iteration .
ตอนแรก สั้นประมาณเส้นทางทุกจุดอื่นที่ไม่ใช่แหล่งถูกตั้งค่าเป็น 1 แล้ววิธีทำให้
n ¡ 1 ผ่านไปเหนือขอบของกราฟ ในการผ่านแต่ละ ถ้า± [ V ] > ± [ u ] w ( u ; V )
แล้วเราตั้งค่าของ± [ V ] เป็น± [ u ] w ( u ; V )และปรับเปลี่ยนบรรพบุรุษของจุดยอด V . คุณลักษณะเด่นของพนักงานฟอร์ด
ขั้นตอนวิธีใน kth ซ้ำ , เส้นทางที่สั้นที่สุดประมาณ
จุดยอด V , I , ± [ V ] เท่ากับความยาวของเส้นทางที่สั้นที่สุดจากแหล่งในที่ที่สุดขอบ K .
ถ้าหลังจาก N ¡ 1 ผ่าน , มีขอบ ( U ; V ) เช่นที่± [ V ] > ± [ u ] w ( U ; v ) แล้วรอบลบ
ถูกตรวจพบ มิฉะนั้นสำหรับทุกจุดอื่นที่ไม่ใช่แหล่งที่เราสร้างเส้นทางสั้นที่สุด
ต้นไม้โดยการเพิ่มขอบจากรุ่นก่อนของพวกเขาเพื่อพวกเขา
อัลกอริทึม : พนักงานฟอร์ด
ใส่ : ถ่วงน้ำหนัก กำกับกราฟ G = ( V ; E ; w ) ; แหล่ง VERTEX S .
ผลผลิต : เส้นทางสั้นที่สุดต้นไม้ทอดข้าม T รากใน s
สำหรับแต่ละจุดยอด V 2 V ทำ
± [ V ] Ã 1
¼ [ V ] Ãนิล
± [ S ] Ã 0
สำหรับผมÃ 1 n ¡ 1
( U ; v ) ละ 2 และทำ
ถ้า± [ V ] > ± [ u ] W ( U ;
v ) แล้ว± [ V ] ñ [ u ] w ( u ; V )
¼ [ V ] Ã u
( U ; v ) ละ 2 และทำ
ถ้า± [ V ] > ± [ u ] w ( U ; v )
" ออกรอบลบที่มีอยู่ "
T ออก Ã V 2 V ;
สำหรับ¡ทำÃ
T T [ f ( ¼ [ V ] ; V ) g
พนักงานฟอร์ดขั้นตอนวิธีมีวิ่งเวลา O ( MN ) เนื่องจากมี O ( n ) และการใช้แต่ละรอบ
, o ( M ) เวลา ความถูกต้องดังนี้ จากความจริงที่ว่าใน kth ซ้ำ
,เส้นทางที่สั้นที่สุดสำหรับแต่ละจุดยอดประมาณเท่ากับความยาวของเส้นทางที่สั้นที่สุดจากแหล่ง
ที่ยอดกับที่ขอบ k มากที่สุด เนื่องจากเส้นทางที่ง่ายที่สุดในกรัมประกอบด้วย N ¡ 1 ขอบ
เส้นทางสั้นที่สุด ประเมินเสถียรภาพ N ¡ 1 ซ้ำหลังจากเว้นแต่มีอยู่วงจรเชิงลบใน
กราฟ ตัวเลขต่อไปนี้แสดงวิธีการปฏิบัติของพนักงานฟอร์ดทำงานบนกราฟใน
รูปที่ 15ขอบมืดจุดบันทึกผู้ที่ก่อให้เกิดผลในการผ่อนคลาย ในตอนแรก
การแปล กรุณารอสักครู่..
