fbpx
วิกิพีเดีย

ขั้นตอนวิธีของฟลอยด์-วอร์แชล

ขั้นตอนวิธีของฟลอยด์-วอร์แชล (อังกฤษ: Floyd–Warshall algorithm) หรือที่รู้จักในนามว่า ขั้นตอนวิธีของฟลอยด์, ขั้นตอนของรอย-วอร์แชล หรือ ขั้นตอนวิธีของรอย-ฟลอยด์ เป็นขั้นตอนวิธีการวิเคราะห์กราฟเพื่อที่จะหาระยะทางของเส่นทางสั้นสุดในกราฟที่มีน้ำหนักของเส้นเชื่อมเป็นบวก หรือ น้ำหนักของเส้นเชื่อมเป็นลบ ก็ได้แต่ไม่สามารถหาได้ถ้ามีวงจรลบ โดยการทำงานหนึ่งครั้งของขั้นตอนวิธีนี้จะได้คำตอบของระยะทางของเส้นทางสั้นสุดของทุกๆคู่ปมบนกราฟ อย่างไรก็ตามจะไม่สามารถคืนค่ารายละเอียดของเส้นทางสั้นสุดในแต่ละคู่ปมได้ ยกเว้นมีการเพิ่มเติมเข้าไป ขั้นตอนวิธีนี้เป็นตัวอย่างของกำหนดการพลวัตแบบด้านล่างขึ้นด้านบน โดยขั้นตอนวิธีนี้ถูกคิดขึ้นโดย โรเบิร์ต ฟลอยด์ ในปี 1962 อย่างไรก็ตามขั้นตอนวิธีนี้มีส่วนสำคัญเหมือนกับอัลกอริทึมของเบอร์นาร์ด รอยด์ ในปี 1959 และของสตีเฟน วอร์แชล ในปี 1962 ในการค้นหา ความสัมพันธ์แบบถ่ายทอดของกราฟ (อังกฤษ: Transitive closure)

แนวคิด

  • ใช้ได้กับ กราฟที่มีน้าหนักของเส้นเชื่อมทั้งบวกและลบ แต่ไม่สามารถใช้ได้กับ กราฟที่มีวงจรลบ
  • คืนค่า ระยะทางของเส้นทางที่สั้นสุดของทุกๆคู่ปม
  • ใช้กำหนดการพลวัต กำหนดการพลวัต แบบล่างขึ้นบน (อังกฤษ: Bottom-up)
  • path (i,j,0) คือ ไม่มีปมระหว่างทาง จึงมีค่าเท่ากับระยะทางจาก i ไป j


ขั้นตอนวิธี

ขั้นตอนวิธีของฟลอยด์-วอร์แชล ใช้ในการเปรียบเทียบระยะทางเส้นทางทั้งหมดที่เป็นไปได้ของกราฟระหว่างแต่ละคู่ของปม โดยมีอัตราการเติบโตของการทำงานเป็น "Θ (|V|^3)"

พิจารณากราฟ G กับปม V ตั้งแต่ปม 1 ถึง ปม N พิจารณาฟังก์ชัน shortestPath (i,j,k) ที่จะคืนค่าระยะทางของเส้นทางสั้นสุดที่เป็นไปได้จาก i ไป j โดยมีปม 1,2,3,...,k เท่านั้นที่เป็นปมระหว่างทางได้ และ path (i,j,k) สามารถหาได้มาจาก path (i,j,k-1) หรือ path (i,k,k-1) +path (k,j,k-1) โดยดูว่าค่าไหนน้อยกว่ากัน และมีกรณีพื้นฐานคือ path (i,j,0) คือ ระยะทางโดยตรงจาก i ไป j ที่ไม่มีปมระหว่างทางนั่นเอง จึงสามารถเขียนได้เป็น การเวียนเกิด ได้ดังนี้

path (i,j,0) = ระยะทางจาก i ไป j path (i,j,k) = ค่าน้อยสุด (path (i,j,k-1),path (i,k,k-1) +path (k,j,k-1) )


คำอธิบาย

  • path (i,j,k) คือ ระยะทางของเส้นทางสั้นสุดจากปม i ไป j โดยมีปมที่อยู่ระหว่างทางได้คือ {1,2,3,...,k}
  • path (i,j,k-1) คือ ระยะทางของเส้นทางสั้นสุดจากปม i ไป j โดยมีปมที่อยู่ระหว่างทางได้คือ {1,2,3,...,k-1}
  • path (i,k,k-1) คือ ระยะทางของเส้นทางสั้นสุดจากปม i ไป kโดยมีปมที่อยู่ระหว่างทางได้คือ {1,2,3,...,k-1}
  • path (k,j,k-1) คือ ระยะทางของเส้นทางสั้นสุดจากปม k ไป j โดยมีปมที่อยู่ระหว่างทางได้คือ {1,2,3,...,k-1}


รหัสเทียม

สะดวกเมื่อคำนวณ กรณีที่ k โดยสามารถเขียนทับข้อมูลที่เคยบันทึกไว้จากการคำนวณของกรณีที่ผ่านมา k-1 หมายความว่าใช้พื้นที่ในการเก็บข้อมูลในหน่วยความจำเพียงแค่สมการกำลังสอง หรือเพียง อาเรย์สองมิติ นั่นเอง

 1 /* สมมุติให้ฟังก์ชัน edgeCost (i,j) คืนค่า น้ำหนักของเส้นเชื่อมจาก i ไป j 2 */ 3 4 จำนวนเต็ม path[][]; 5 /* อาเรย์ 2 มิติ path[i][j] เป็นเส้นทางสั้นที่สุดจากปม i ไป j โดยใช้ ปมเริ่มต้น (1..k−1). 6 ในแต่ละขั้นตอนของ ขั้นตอนวิธี โดยแต่ละ path[i][j] มีค่าเริ่มต้นคือ edgeCost (i,j). 7 */ 8 9 /* ขั้นตอนวิธีของฟลอยด์-วอร์แชล */ 10 ขั้นตอน ฟลอยด์-วอร์แชล () 11 ตั้งแต่ k := 1 ถึง n 12 ตั้งแต่ i := 1 ถึง n 13  ตั้งแต่ j := 1 ถึง n 14  path[i][j] = ค่าน้อยที่สุด ( path[i][j], path[i][k]+path[k][j] ) ; 


พฤติกรรมเมื่อเจอวงจรติดลบ

วงจรติดลบ คือ วงจรที่มีผลรวมของระยะทางของเส้นเชื่อมเป็นค่าลบ ระยะทางสั้นสุดไม่สามารถกำหนดได้เนื่องจาก เส้นทางสามารถติดลบไปเรื่อยๆ ก็จะน้อยลงเรื่อยไม่มีที่สิ้นสุด สำหรับ ขั้นตอนวิธีของฟลอยด์-วอร์แชล นั้นจะสังเกตวงจรลบได้จาก path[i][j] เมื่อ i มีค่าเท่ากับ j โดยถ้า path[i][j]<0 เมื่อ i มีค่าเท่ากับ j แสดงว่ามีวงจรลบ จะไม่สามารถหาคำตอบได้

  • เริ่มต้น ความยาวของเส้นทาง (i,i) เป็น 0
  • เส้นทาง {(i,k), (k,i)} สามารถเปลี่ยนไปเรื่อยๆ
  • หลังจากทำขั้นตอนวิธีนี้แล้ว (i,i) จะเป็นลบ ถ้ามี เส้นทางความยาวติดลบมาจาก i
  • ถ้ามีความยาวจาก i กลับมา i เป็นลบ จะได้ว่า ระยะทางสั้นสุดที่ได้ผ่านปมระหว่างทางมามีค่าน้อยกว่า 0 จะเรียกว่าวงจรลบ
 1 /* สมมุติให้ฟังก์ชัน edgeCost (i,j) คืนค่า น้ำหนักของเส้นเชื่อมจาก i ไป j 2 */ 3 4 จำนวนเต็ม path[][]; 5 /* อาเรย์ 2 มิติ path[i][j] เป็นเส้นทางสั้นที่สุดจากปม i ไป j โดยใช้ ปมเริ่มต้น (1..k−1). 6 ในแต่ละขั้นตอนของ ขั้นตอนวิธี โดยแต่ละ path[i][j] มีค่าเริ่มต้นคือ edgeCost (i,j). 7 */ 8 9 /* ขั้นตอนวิธีของฟลอยด์-วอร์แชล */ 10 ขั้นตอน ฟลอยด์-วอร์แชล () 11 ตั้งแต่ k := 1 ถึง n 12 ตั้งแต่ i := 1 ถึง n 13  ตั้งแต่ j := 1 ถึง n 14  path[i][j] = ค่าน้อยที่สุด ( path[i][j], path[i][k]+path[k][j] ) ; 15 ตั้งแต่ i := 1 ถึง 16 ถ้า path[i][i] < 0 เมื่อนั้น 17 มีวงจรติดลบอยู่ 


การสร้างเส้นทาง

ขั้นตอนวิธีของฟลอยด์-วอร์แชลนั้นโดยปกติแล้วจะหาแค่ระยะทางของเส้นทางที่สั้นที่สุดของแต่ละคู่ปม แต่สามารถปรับเปลี่ยนเพิ่มเติมส่วนของการจำเส้นทางที่ผ่านระหว่างทางได้ด้วยโดยการ เพิ่ม next[i][j] ที่เอาไว้จำค่า ปมที่ผ่านระหว่างทางที่ทำให้มีค่าระยะทางเส้นทางสั้นสุดของคู่ปมมากที่สุด โดย next[i][j] จะได้รับการเปลี่ยนค่าไปเรื่อยๆ ถ้าเกิด ปมที่ผ่านระหว่างทางของแต่ละคู่ปมต้นทางปลายทางที่สนใจอยู่ ทำให้เกิดระยะทางสั้นสุดระหว่างคู่ปมนั้น

 1 ขั้นตอน ฟลอยด์-วอร์แชลกับการสร้างเส้นทาง () 2 ตั้งแต่ k := 1 ถึง n 3 ตั้งแต่ i := 1 ถึง n 4 ตั้งแต่ j := 1 ถึง n 5  ถ้า path[i][k] + path[k][j] < path[i][j] เมื่อนั้น 6  path[i][j] := path[i][k]+path[k][j]; 7  next[i][j] := k; 8 9 ขั้นตอน GetPath (i,j) 10 ถ้า path[i][j] เท่ากับอนันต์ เมื่อนั้น 11 คืนค่า "ไม่มีเส้นทาง"; 12 จำนวนเต็ม ค่ากลาง := next[i][j]; 13 ถ้า ค่ากลางเท่ากับ null เมื่อนั้น 14 คืนค่า "" /* มีเส้นเชื่อมจาก i ไป j ที่ไม่มีปมอยู่ระหว่างเส้นเชื่อมนั้น */ 15 มิฉะนั้น 16 คืนค่า GetPath (i,ค่าเริ่มต้น) + ค่ากลาง + GetPath (ค่าเริ่มต้น,j) ; 


การวิเคราะห์อัตราการเติบโต

เพื่อที่จะหา shortest path ของคู่ปมจำนวน n^2 คู่ปม จาก path (i,j,k-1) ต้องการ 2n^2 คำสั่ง เนื่องจากเราเริ่มจาก path (i,j,0) = edgeCost (i,j) และคำนวณ path (i,j,1) , path (i,j,2), ..., path (i,j,n) ดังนั้นเราจึงได้คำสั่งรวมเท่ากับ n · 2n^2 = 2n^3 จึงสรุปได้ว่ามีอัตราการเติบโตเป็น Θ (n^3).


การนำไปใช้งาน

ขั้นตอนวิธีของฟลอยด์-วอร์แชลนั้นสามารถนำไปแก้ปัญหาปัญหาต่างๆได้ดังนี้

  • วิถีสั้นสุดในกราฟมีทิศทาง
  • ความสัมพันธ์แบบถ่ายทอด (Transitive closure) ของ กราฟมีทิศทาง
  • การกำหนดเส้นทางที่เหมาะสมที่สุด
  • การผกผันของเมทริกซ์จริง
  • ตรวจสอบว่า กราฟไม่มีทิศทาง เป็นกราฟสองส่วนหรือไม่
  • การคำนวณหาเส้นทางของเครือข่าย
  • คำนวณหาเส้นทางที่มีปริมาณข้อมูลใดๆ ที่จะผ่านเข้า/ออกช่องทางสัญญาณหนึ่งๆได้ในระยะเวลาที่กำหนดมากที่สุด ในเครือข่าย

บันทึก

จากขั้นตอนวิธีของฟลอยด์-วอร์แชล จะเห็นได้ว่ามีประโยชน์มากในการนำมาหาเส้นทางสั้นสุดของทุกคู่ปม เนื่องจากประสิทธิภาพโดยรวมนั้น เป็น Θ (|V|^3) ซึ่งถ้าเทียบกับ ขั้นตอนวิธีของไดค์สตรา O (V* (|E|+|V|log|V|) ) และของ ขั้นตอนวิธีของเบลแมน-ฟอร์ด O (V* (|V||E|)) ในกรณีแย่สุด E ประมาณได้ V^2 นั้น จะเห็นได้ว่ามีประสิทธิภาพที่ดีกว่า


ตัวอย่างรหัสในภาษาต่างๆ

  • Java
  • C
  • C++
  • Perl
  • PHP

การเขียนโปรแกรม

การเขียนโปรแกรม สามารถทำได้หลายภาษามากมาย en:programming language.

  • สำหรับ C++, อยู่ใน boost::graph library
  • สำหรับ C#, ที่ QuickGraph
  • สำหรับ en:Clojure, ที่ paste.lisp.org
  • สำหรับ Java, อยู่ใน Apache commons graph library, หรือที่ Algowiki
  • สำหรับ MATLAB, อยู่ใน Matlab_bgl package
  • สำหรับ Perl, อยู่ใน Graph module
  • สำหรับ PHP, บน page and en:PL/pgSQL, บน page at Microshell
  • สำหรับ Python, อยู่ใน en:NetworkX library
  • สำหรับ R, ใน e1017
  • สำหรับ Ruby, ใน script


 
D[k] และ n[k] เมื่อ กราฟถูกคำนวณด้วยขั้นตอนวิธีนี้

ดูเพิ่ม

  • Lec 19 | MIT 6.046J / 18.410J Introduction to Algorithms All pairs Shortest path clip
  • Lecture MIT shortest path
  • Java implementation at Algo wiki
  • ULearn การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • ภาพเคลื่อนไหว ขั้นตอนวิธีของฟลอยด์-วอร์แชล
  • Robert Sedgewick
  • อัลกอริทึม : 06-11 (2/3)
  • ขั้นตอนวิธีของไดค์สตรา เป็นขั้นตอนวิธีที่ใช้ในการหาระยะทางเส้นทางสั้นสุดของคู่ปมใดๆ สำหรับกราฟที่มีความยาวของเส้นเชื่อมไม่เป็นลบ
  • ขั้นตอนวิธีของจอห์นสัน เป็นขั้นตอนวิธีที่ใช้หาเส้นทางสั้นที่สุดระหว่างทุกคู่จุด ในกราฟระบุทิศทางที่มีเส้นเชื่อมน้อย ขั้นตอนวิธีนี้สามารถใช้น้ำหนักของเส้นเชื่อมเป็นจำนวนลบได้ แต่ต้องไม่มีวงรอบที่น้ำหนักติดลบอยู่ด้วย


อ้างอิง

  • การออกแบบและวิเคราะห์อัลกอริทึม สมชาย ประสิทธิ์จูตระกูล
  • Floyd–Warshall_algorithm
  • FloydWarshal Computer Science at Biola
  • Floyd-warshall


แหล่งข้อมูลอื่น

  • Algorithm Design, first semester, 2010 (นัทที นิภานันท์)
  • การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • ULearn การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • Analyze Floyd's algorithm in an online Javascript IDE
  • Interactive animation of the Floyd–Warshall algorithm
  • The Floyd–Warshall algorithm in C#, as part of QuickGraph
  • Visualization of Floyd's algorithm

นตอนว, ของฟลอยด, วอร, แชล, งก, ามภาษา, ในบทความน, ไว, ให, านและผ, วมแก, ไขบทความศ, กษาเพ, มเต, มโดยสะดวก, เน, องจากว, เด, ยภาษาไทยย, งไม, บทความด, งกล, าว, กระน, ควรร, บสร, างเป, นบทความโดยเร, วท, ดบทความน, ได, บแจ, งให, ปร, บปร, งหลายข, กร, ณาช, วยปร, บปร, งบ. lingkkhamphasa inbthkhwamni miiwihphuxanaelaphurwmaekikhbthkhwamsuksaephimetimodysadwk enuxngcakwikiphiediyphasaithyyngimmibthkhwamdngklaw krann khwrribsrangepnbthkhwamodyerwthisudbthkhwamniidrbaecngihprbprunghlaykhx krunachwyprbprungbthkhwam hruxxphipraypyhathihnaxphipray bthkhwamnitxngkaraehlngxangxingephimephuxphisucnkhxethccringkhntxnwithikhxngflxyd wxraechl xngkvs Floyd Warshall algorithm hruxthiruckinnamwa khntxnwithikhxngflxyd khntxnkhxngrxy wxraechl hrux khntxnwithikhxngrxy flxyd epnkhntxnwithikarwiekhraahkrafephuxthicaharayathangkhxngesnthangsnsudinkrafthiminahnkkhxngesnechuxmepnbwk hrux nahnkkhxngesnechuxmepnlb kidaetimsamarthhaidthamiwngcrlb odykarthanganhnungkhrngkhxngkhntxnwithinicaidkhatxbkhxngrayathangkhxngesnthangsnsudkhxngthukkhupmbnkraf xyangirktamcaimsamarthkhunkharaylaexiydkhxngesnthangsnsudinaetlakhupmid ykewnmikarephimetimekhaip khntxnwithiniepntwxyangkhxngkahndkarphlwtaebbdanlangkhundanbn odykhntxnwithinithukkhidkhunody orebirt flxyd inpi 1962 xyangirktamkhntxnwithinimiswnsakhyehmuxnkbxlkxrithumkhxngebxrnard rxyd inpi 1959 aelakhxngstiefn wxraechl inpi 1962 inkarkhnha khwamsmphnthaebbthaythxdkhxngkraf xngkvs Transitive closure enuxha 1 aenwkhid 2 khntxnwithi 2 1 khaxthibay 3 rhsethiym 4 phvtikrrmemuxecxwngcrtidlb 5 karsrangesnthang 6 karwiekhraahxtrakaretibot 7 karnaipichngan 8 bnthuk 9 twxyangrhsinphasatang 10 karekhiynopraekrm 11 duephim 12 xangxing 13 aehlngkhxmulxunaenwkhid aekikhichidkb krafthiminahnkkhxngesnechuxmthngbwkaelalb aetimsamarthichidkb krafthimiwngcrlb khunkha rayathangkhxngesnthangthisnsudkhxngthukkhupm ichkahndkarphlwt kahndkarphlwt aebblangkhunbn xngkvs Bottom up path i j 0 khux immipmrahwangthang cungmikhaethakbrayathangcak i ip jkhntxnwithi aekikhkhntxnwithikhxngflxyd wxraechl ichinkarepriybethiybrayathangesnthangthnghmdthiepnipidkhxngkrafrahwangaetlakhukhxngpm odymixtrakaretibotkhxngkarthanganepn 8 V 3 phicarnakraf G kbpm V tngaetpm 1 thung pm N phicarnafngkchn shortestPath i j k thicakhunkharayathangkhxngesnthangsnsudthiepnipidcak i ip j odymipm 1 2 3 k ethannthiepnpmrahwangthangid aela path i j k samarthhaidmacak path i j k 1 hrux path i k k 1 path k j k 1 odyduwakhaihnnxykwakn aelamikrniphunthankhux path i j 0 khux rayathangodytrngcak i ip j thiimmipmrahwangthangnnexng cungsamarthekhiynidepn karewiynekid iddngnipath i j 0 rayathangcak i ip j path i j k khanxysud path i j k 1 path i k k 1 path k j k 1 khaxthibay aekikh path i j k khux rayathangkhxngesnthangsnsudcakpm i ip j odymipmthixyurahwangthangidkhux 1 2 3 k path i j k 1 khux rayathangkhxngesnthangsnsudcakpm i ip j odymipmthixyurahwangthangidkhux 1 2 3 k 1 path i k k 1 khux rayathangkhxngesnthangsnsudcakpm i ip kodymipmthixyurahwangthangidkhux 1 2 3 k 1 path k j k 1 khux rayathangkhxngesnthangsnsudcakpm k ip j odymipmthixyurahwangthangidkhux 1 2 3 k 1 rhsethiym aekikhsadwkemuxkhanwn krnithi k odysamarthekhiynthbkhxmulthiekhybnthukiwcakkarkhanwnkhxngkrnithiphanma k 1 hmaykhwamwaichphunthiinkarekbkhxmulinhnwykhwamcaephiyngaekhsmkarkalngsxng hruxephiyng xaerysxngmiti nnexng 1 smmutiihfngkchn edgeCost i j khunkha nahnkkhxngesnechuxmcak i ip j 2 3 4 canwnetm path 5 xaery 2 miti path i j epnesnthangsnthisudcakpm i ip j odyich pmerimtn 1 k 1 6 inaetlakhntxnkhxng khntxnwithi odyaetla path i j mikhaerimtnkhux edgeCost i j 7 8 9 khntxnwithikhxngflxyd wxraechl 10 khntxn flxyd wxraechl 11 tngaet k 1 thung n 12 tngaet i 1 thung n 13 tngaet j 1 thung n 14 path i j khanxythisud path i j path i k path k j phvtikrrmemuxecxwngcrtidlb aekikhwngcrtidlb khux wngcrthimiphlrwmkhxngrayathangkhxngesnechuxmepnkhalb rayathangsnsudimsamarthkahndidenuxngcak esnthangsamarthtidlbiperuxy kcanxylngeruxyimmithisinsud sahrb khntxnwithikhxngflxyd wxraechl nncasngektwngcrlbidcak path i j emux i mikhaethakb j odytha path i j lt 0 emux i mikhaethakb j aesdngwamiwngcrlb caimsamarthhakhatxbid erimtn khwamyawkhxngesnthang i i epn 0 esnthang i k k i samarthepliyniperuxy hlngcakthakhntxnwithiniaelw i i caepnlb thami esnthangkhwamyawtidlbmacak i thamikhwamyawcak i klbma i epnlb caidwa rayathangsnsudthiidphanpmrahwangthangmamikhanxykwa 0 caeriykwawngcrlb1 smmutiihfngkchn edgeCost i j khunkha nahnkkhxngesnechuxmcak i ip j 2 3 4 canwnetm path 5 xaery 2 miti path i j epnesnthangsnthisudcakpm i ip j odyich pmerimtn 1 k 1 6 inaetlakhntxnkhxng khntxnwithi odyaetla path i j mikhaerimtnkhux edgeCost i j 7 8 9 khntxnwithikhxngflxyd wxraechl 10 khntxn flxyd wxraechl 11 tngaet k 1 thung n 12 tngaet i 1 thung n 13 tngaet j 1 thung n 14 path i j khanxythisud path i j path i k path k j 15 tngaet i 1 thung 16 tha path i i lt 0 emuxnn 17 miwngcrtidlbxyukarsrangesnthang aekikhkhntxnwithikhxngflxyd wxraechlnnodypktiaelwcahaaekhrayathangkhxngesnthangthisnthisudkhxngaetlakhupm aetsamarthprbepliynephimetimswnkhxngkarcaesnthangthiphanrahwangthangiddwyodykar ephim next i j thiexaiwcakha pmthiphanrahwangthangthithaihmikharayathangesnthangsnsudkhxngkhupmmakthisud ody next i j caidrbkarepliynkhaiperuxy thaekid pmthiphanrahwangthangkhxngaetlakhupmtnthangplaythangthisnicxyu thaihekidrayathangsnsudrahwangkhupmnn 1 khntxn flxyd wxraechlkbkarsrangesnthang 2 tngaet k 1 thung n 3 tngaet i 1 thung n 4 tngaet j 1 thung n 5 tha path i k path k j lt path i j emuxnn 6 path i j path i k path k j 7 next i j k 8 9 khntxn GetPath i j 10 tha path i j ethakbxnnt emuxnn 11 khunkha immiesnthang 12 canwnetm khaklang next i j 13 tha khaklangethakb null emuxnn 14 khunkha miesnechuxmcak i ip j thiimmipmxyurahwangesnechuxmnn 15 michann 16 khunkha GetPath i khaerimtn khaklang GetPath khaerimtn j karwiekhraahxtrakaretibot aekikhephuxthicaha shortest path khxngkhupmcanwn n 2 khupm cak path i j k 1 txngkar 2n 2 khasng enuxngcakeraerimcak path i j 0 edgeCost i j aelakhanwn path i j 1 path i j 2 path i j n dngnneracungidkhasngrwmethakb n 2n 2 2n 3 cungsrupidwamixtrakaretibotepn 8 n 3 karnaipichngan aekikhkhntxnwithikhxngflxyd wxraechlnnsamarthnaipaekpyhapyhatangiddngni withisnsudinkrafmithisthang khwamsmphnthaebbthaythxd Transitive closure khxng krafmithisthang karkahndesnthangthiehmaasmthisud karphkphnkhxngemthrikscring trwcsxbwa krafimmithisthang epnkrafsxngswnhruxim karkhanwnhaesnthangkhxngekhruxkhay khanwnhaesnthangthimiprimankhxmulid thicaphanekha xxkchxngthangsyyanhnungidinrayaewlathikahndmakthisud inekhruxkhaybnthuk aekikhcakkhntxnwithikhxngflxyd wxraechl caehnidwamipraoychnmakinkarnamahaesnthangsnsudkhxngthukkhupm enuxngcakprasiththiphaphodyrwmnn epn 8 V 3 sungthaethiybkb khntxnwithikhxngidkhstra O V E V log V aelakhxng khntxnwithikhxngeblaemn fxrd O V V E inkrniaeysud E pramanid V 2 nn caehnidwamiprasiththiphaphthidikwatwxyangrhsinphasatang aekikhJava C C Perl PHPkarekhiynopraekrm aekikhkarekhiynopraekrm samarththaidhlayphasamakmay en programming language sahrb C xyuin boost graph library sahrb C thi QuickGraph sahrb en Clojure thi paste lisp org sahrb Java xyuin Apache commons graph library hruxthi Algowiki sahrb MATLAB xyuin Matlab bgl package sahrb Perl xyuin Graph module sahrb PHP bn page and en PL pgSQL bn page at Microshell sahrb Python xyuin en NetworkX library sahrb R in e1017 sahrb Ruby in script D 0 0 3 8 4 0 1 7 4 0 2 5 0 6 0 P 0 NIL 1 1 NIL 1 NIL NIL NIL 2 2 NIL 3 NIL NIL NIL 4 NIL 4 NIL NIL NIL NIL NIL 5 NIL D 1 0 3 8 4 0 1 7 4 0 2 5 5 0 2 6 0 P 1 NIL 1 1 NIL 1 NIL NIL NIL 2 2 NIL 3 NIL NIL NIL 4 1 4 NIL 1 NIL NIL NIL 5 NIL D 2 0 3 8 4 4 0 1 7 4 0 5 11 2 5 5 0 2 6 0 P 2 NIL 1 1 2 1 NIL NIL NIL 2 2 NIL 3 NIL 2 2 4 1 4 NIL 1 NIL NIL NIL 5 NIL D 3 0 3 8 4 4 0 1 7 4 0 5 11 2 1 5 0 2 6 0 P 3 NIL 1 1 2 1 NIL NIL NIL 2 2 NIL 3 NIL 2 2 4 3 4 NIL 1 NIL NIL NIL 5 NIL D 4 0 3 1 4 4 3 0 4 1 1 7 4 0 5 3 2 1 5 0 2 8 5 1 6 0 P 4 NIL 1 4 2 1 4 NIL 4 2 1 4 3 NIL 2 1 4 3 4 NIL 1 4 3 4 5 NIL D 5 0 1 3 2 4 3 0 4 1 1 7 4 0 5 3 2 1 5 0 2 8 5 1 6 0 P 5 NIL 3 4 5 1 4 NIL 4 2 1 4 3 NIL 2 1 4 3 4 NIL 1 4 3 4 5 NIL displaystyle begin aligned amp D 0 begin pmatrix 0 amp 3 amp 8 amp infty amp 4 infty amp 0 amp infty amp 1 amp 7 infty amp 4 amp 0 amp infty amp infty 2 amp infty amp 5 amp 0 amp infty infty amp infty amp infty amp 6 amp 0 end pmatrix quad amp Pi 0 begin pmatrix text NIL amp 1 amp 1 amp text NIL amp 1 text NIL amp text NIL amp text NIL amp 2 amp 2 text NIL amp 3 amp text NIL amp text NIL amp text NIL 4 amp text NIL amp 4 amp text NIL amp text NIL text NIL amp text NIL amp text NIL amp 5 amp text NIL end pmatrix amp D 1 begin pmatrix 0 amp 3 amp 8 amp infty amp 4 infty amp 0 amp infty amp 1 amp 7 infty amp 4 amp 0 amp infty amp infty 2 amp 5 amp 5 amp 0 amp 2 infty amp infty amp infty amp 6 amp 0 end pmatrix amp Pi 1 begin pmatrix text NIL amp 1 amp 1 amp text NIL amp 1 text NIL amp text NIL amp text NIL amp 2 amp 2 text NIL amp 3 amp text NIL amp text NIL amp text NIL 4 amp 1 amp 4 amp text NIL amp 1 text NIL amp text NIL amp text NIL amp 5 amp text NIL end pmatrix amp D 2 begin pmatrix 0 amp 3 amp 8 amp 4 amp 4 infty amp 0 amp infty amp 1 amp 7 infty amp 4 amp 0 amp 5 amp 11 2 amp 5 amp 5 amp 0 amp 2 infty amp infty amp infty amp 6 amp 0 end pmatrix amp Pi 2 begin pmatrix text NIL amp 1 amp 1 amp 2 amp 1 text NIL amp text NIL amp text NIL amp 2 amp 2 text NIL amp 3 amp text NIL amp 2 amp 2 4 amp 1 amp 4 amp text NIL amp 1 text NIL amp text NIL amp text NIL amp 5 amp text NIL end pmatrix amp D 3 begin pmatrix 0 amp 3 amp 8 amp 4 amp 4 infty amp 0 amp infty amp 1 amp 7 infty amp 4 amp 0 amp 5 amp 11 2 amp 1 amp 5 amp 0 amp 2 infty amp infty amp infty amp 6 amp 0 end pmatrix amp Pi 3 begin pmatrix text NIL amp 1 amp 1 amp 2 amp 1 text NIL amp text NIL amp text NIL amp 2 amp 2 text NIL amp 3 amp text NIL amp 2 amp 2 4 amp 3 amp 4 amp text NIL amp 1 text NIL amp text NIL amp text NIL amp 5 amp text NIL end pmatrix amp D 4 begin pmatrix 0 amp 3 amp 1 amp 4 amp 4 3 amp 0 amp 4 amp 1 amp 1 7 amp 4 amp 0 amp 5 amp 3 2 amp 1 amp 5 amp 0 amp 2 8 amp 5 amp 1 amp 6 amp 0 end pmatrix amp Pi 4 begin pmatrix text NIL amp 1 amp 4 amp 2 amp 1 4 amp text NIL amp 4 amp 2 amp 1 4 amp 3 amp text NIL amp 2 amp 1 4 amp 3 amp 4 amp text NIL amp 1 4 amp 3 amp 4 amp 5 amp text NIL end pmatrix amp D 5 begin pmatrix 0 amp 1 amp 3 amp 2 amp 4 3 amp 0 amp 4 amp 1 amp 1 7 amp 4 amp 0 amp 5 amp 3 2 amp 1 amp 5 amp 0 amp 2 8 amp 5 amp 1 amp 6 amp 0 end pmatrix amp Pi 5 begin pmatrix text NIL amp 3 amp 4 amp 5 amp 1 4 amp text NIL amp 4 amp 2 amp 1 4 amp 3 amp text NIL amp 2 amp 1 4 amp 3 amp 4 amp text NIL amp 1 4 amp 3 amp 4 amp 5 amp text NIL end pmatrix end aligned D k aela n k emux krafthukkhanwndwykhntxnwithiniduephim aekikhLec 19 MIT 6 046J 18 410J Introduction to Algorithms All pairs Shortest path clip Lecture MIT shortest path Java implementation at Algo wiki ULearn karxxkaebbxlkxrithum smchay prasiththicutrakul phaphekhluxnihw khntxnwithikhxngflxyd wxraechl Robert Sedgewick xlkxrithum 06 11 2 3 khntxnwithikhxngidkhstra epnkhntxnwithithiichinkarharayathangesnthangsnsudkhxngkhupmid sahrbkrafthimikhwamyawkhxngesnechuxmimepnlb khntxnwithikhxngcxhnsn epnkhntxnwithithiichhaesnthangsnthisudrahwangthukkhucud inkrafrabuthisthangthimiesnechuxmnxy khntxnwithinisamarthichnahnkkhxngesnechuxmepncanwnlbid aettxngimmiwngrxbthinahnktidlbxyudwyxangxing aekikhkarxxkaebbaelawiekhraahxlkxrithum smchay prasiththicutrakul Floyd Warshall algorithm FloydWarshal Computer Science at Biola Floyd warshallaehlngkhxmulxun aekikhAlgorithm Design first semester 2010 nththi niphannth karxxkaebbxlkxrithum smchay prasiththicutrakul ULearn karxxkaebbxlkxrithum smchay prasiththicutrakul Analyze Floyd s algorithm in an online Javascript IDE Interactive animation of the Floyd Warshall algorithm The Floyd Warshall algorithm in C as part of QuickGraph Visualization of Floyd s algorithmekhathungcak https th wikipedia org w index php title khntxnwithikhxngflxyd wxraechl amp oldid 4703380, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม