fbpx
วิกิพีเดีย

ขั้นตอนวิธีของเบลแมน-ฟอร์ด

ขั้นตอนวิธีของเบลแมน-ฟอร์ด (อังกฤษ: Bellman-Ford Algorithm) เป็นขั้นตอนวิธีที่ใช้ในการแก้ปัญหาวิถีสั้นสุดแบบแหล่งต้นทางเดียวสำหรับเส้นเชื่อมที่มีน้ำหนักใดๆ นอกจากนี้ขั้นตอนวิธียังสามารถตรวจพบวัฏจักรที่มีน้ำหนักรวมของเส้นเชื่อมเป็นลบ หรือที่เรียกว่าวัฏจักรเชิงลบ (อังกฤษ: Negative cycle) ซึ่งทำให้ปัญหาวิถีสั้นสุดไม่นิยาม ขั้นตอนวิธีนี้ถูกคิดค้นโดยนักพัฒนาชื่อริชาร์ด เบลแมน (Richard Bellman) และเลสเตอร์ ฟอร์ด จูเนียร์ (Lester Ford Jr)

ขั้นตอนวิธีของเบลแมน-ฟอร์ด
ประเภทปัญหาวิถีสั้นสุดแบบแหล่งต้นทางเดียว
โครงสร้างข้อมูลกราฟ
ประสิทธิภาพเมื่อเกิดกรณีแย่ที่สุด
ปริมาณความต้องการพื้นที่เมื่อเกิดกรณีแย่ที่สุด

แนวคิด

ขั้นตอนวิธีของเบลแมน-ฟอร์ดนั้นมีแนวคิดดังนี้

  • ใช้ได้กับกราฟที่มีน้ำหนักของเส้นเชื่อมทั้งบวกและลบ แต่ไม่สามารถใช้ได้กับกราฟที่มีวงจรเชิงลบ
  • กรณีที่ในกราฟนั้นมีวงจรเชิงลบจะแจ้งให้ผู้ใช้ทราบ
  • ใช้กำหนดการพลวัต
  • วิถีสั้นสุดจาก s ไป t ต้องไม่ผ่านปมซ้ำ และมีเส้นเชื่อมในวิถีอย่างมาก |v|-1 เส้น เมื่อ v แทนเส้นเชื่อมทั้งหมดในกราฟนั้น

ขั้นตอนวิธี

ขั้นตอนวิธีของเบลแมน-ฟอร์ดนั้นอยู่ในโครงสร้างพื้นฐานที่คล้ายกับขั้นตอนวิธีของไดค์สตรา โดยมีอัตราการเติบโตของการทำงานเป็น "O(|V||E|)" เมื่อ |V| และ |E| คือจำนวนปมและเส้นเชื่อมของกราฟนั้นๆ ตามลำดับ

เริ่มต้นพิจารณาจากแนวคิดพื้นฐานง่ายๆว่าเส้นทางที่สั้นที่สุดที่ไปยังปมทั้งหมดนั้นเป็นอนันต์ จากนั้นทำสัญลักษณ์ว่าได้ความยาวของเส้นทางเป็นศูนย์ ดังภาพ

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

การผ่อนเส้นเชื่อมของกราฟ หมายถึง การตรวจสอบเพื่อดูว่าเส้นทางที่ไปยังปมนั้นไม่สามารถสั้นลงได้(เมื่อดูจากน้ำหนักของแต่ละเส้นเชื่อม) จากตัวอย่างกราฟข้างต้น เริ่มแรกเมื่อตรวจสอบที่เส้นทางจากปมที่ 1 ไปยังปมที่ 2 พบว่ามีน้ำหนักเส้นเชื่อมคือ 6 ซึ่งเป็นความยาวของเส้นทางที่สั้นที่สุดจากปมที่ 1 ไปยังปมที่ 2 ที่มีค่าน้อยกว่าอนันต์ ดังนั้นจึงแทนค่าอนันต์ในปมที่ 2 ด้วย 6 และเมื่อพิจารณาเส้นทางจากปมที่ 1 ไปยังปมที่ 4 พบว่ามีน้ำหนักเส้นเชื่อมคือ 7 ซึ่งเป็นความยาวของเส้นทางที่สั้นที่สุดจากปมที่ 1 ไปยังปมที่ 4 ที่มีค่าน้อยกว่าอนันต์ ดังนั้นจึงแทนค่าอนันต์ในปมที่ 4 ด้วย 7

ทำตามขั้นตอนนี้ไปเรื่อนๆเป็นจำนวน n - 1 ครั้ง เมื่อ n แทนจำนวนปมทั้งหมดในกราฟที่พิจารณา ดังนั้นในตัวอย่างนี้จะต้องใช้ขั้นตอนดังกล่างนี้ 4 ครั้ง ดังภาพ

รหัสเทียม

ข้อมูลนำเข้า คือ กราฟระบุทิศทางที่เส้นเชื่อมมีน้ำหนักที่มี v ปม

ข้อมูลส่งออก คือ ป้าย D[u] สำหรับปม u ใดๆบนกราฟ โดย D[u] คือระยะทางจากปม v ถึงปม u บนกราฟ ซึ่งกราฟนี้ต้องไม่มีวงจรเชิงลบ

 1 กำหนดให้ D[v] มีค่าเท่ากับ 0 2 ตั้งแต่ แต่ละปม u ไม่เท่ากับปม v ในกราฟ G 3 กำหนดให้ D[u] มีค่าเป็นอนันต์ 4 ตั้งแต่ i := 1 ถึง n-1 5 ตั้งแต่ ทุกเส้นเชื่อมที่ออกจากปม z 6 ถ้า (D[u]+w(u,z))<D[z] 7  จะให้ D[z]เก็บค่า D[u]+w(u,z) //w(u,z) คือการดำเนินการของการผ่อนเส้นเชื่อมกราฟ 8 ถ้าไม่มีเส้นเชื่อมใดเลยที่ถูกผ่อน 9  จะคืนค่าระยะทางจากปม v ถึงปม u ของแต่ละปม u 10 ไม่เช่นนั้น 11 จะคืนกลับมาว่า"กราฟนี้มีวงจรเชิงลบ" 

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

จากรหัสเทียมข้างต้นจะพบว่าการดำเนินการของขั้นตอนวิธีของเบลแมน-ฟอร์ดนั้นจะมีการทำงานอยู่ 2 ส่วนหลัก คือ

  1. วงวนที่มีการวนเพื่อตรวจสอบความตึงของน้ำหนักเส้นเชื่อมในกราฟ ซึ่งจะทำงานเป็นเวลานานเท่าจำนวนเส้นเชื่อมที่มี ดังนั้น จะใช้เวลาในการทำงานส่วนนี้เป็น O(|E|) เมื่อ E คือจำนวนเส้นเชื่อมของกราฟหนึ่งๆ
  2. ส่วนการทำงานที่ต้องผ่านปมทุกปมในกราฟจะใช้เวลาทั้งหมดเป็น O(|V|) เมื่อ V คือจำนวนปมของกราฟหนึ่งๆ

เพราะฉะนั้นจึงสรุปได้ว่าชั้นตอนวิธีของเบลแมน-ฟอร์ดมีอัตราการเติบโตเท่ากับ O(|V||E|)

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

  • วิถีสั้นสุดในกราฟมีทิศทาง
  • โพรโตคอลเลือกเส้นทางแบบตารางระยะทาง (RIP)

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

  • C
  • C++
  • Java
  • PHP
  • Python

ดูเพิ่ม

  • ULearn การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • ภาพเคลื่อนไหว ขั้นตอนวิธีของเบลแมน-ฟอร์ด
  • Bellman-ford Algorithm E-leaning(Introduction to Algorithms)
  • ขั้นตอนวิธีของไดค์สตรา เป็นขั้นตอนวิธีที่ใช้ในการหาระยะทางเส้นทางสั้นสุดของคู่ปมใดๆ สำหรับกราฟที่มีความยาวของเส้นเชื่อมไม่เป็นลบ
  • ขั้นตอนวิธีของจอห์นสัน เป็นขั้นตอนวิธีที่ใช้หาเส้นทางสั้นที่สุดระหว่างทุกคู่จุด ในกราฟระบุทิศทางที่มีเส้นเชื่อมน้อย ขั้นตอนวิธีนี้สามารถใช้น้ำหนักของเส้นเชื่อมเป็นจำนวนลบได้ แต่ต้องไม่มีวงรอบที่น้ำหนักติดลบอยู่ด้วย
  • ขั้นตอนวิธีของฟลอยด์-วอร์แชล เป็นขั้นตอนวิธีการวิเคราะห์กราฟเพื่อที่จะหาระยะทางของเส้นทางสั้นสุดในกราฟที่มีน้ำหนักของเส้นเชื่อมเป็นบวก หรือ น้ำหนักของเส้นเชื่อมเป็นลบ แต่ไม่สามารถหาได้ถ้ามีวงจรลบ

อ้างอิง

  • การออกแบบและวิเคราะห์อัลกอริทึม สมชาย ประสิทธิ์จูตระกูล
  • Algorithm Design นัทที นิภานันท์
  • Bellman-Ford_algorithm
  • Computer Programming WebBlog
  • Introduction to Algorithms
  • Algorithm Design

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

  • การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • ULearn การออกแบบอัลกอริทึม (สมชาย ประสิทธิ์จูตระกูล)
  • Algo Wiki

นตอนว, ของเบลแมน, ฟอร, งก, ามภาษา, ในบทความน, ไว, ให, านและผ, วมแก, ไขบทความศ, กษาเพ, มเต, มโดยสะดวก, เน, องจากว, เด, ยภาษาไทยย, งไม, บทความด, งกล, าว, กระน, ควรร, บสร, างเป, นบทความโดยเร, วท, ดบทความน, ได, บแจ, งให, ปร, บปร, งหลายข, กร, ณาช, วยปร, บปร, งบทควา. lingkkhamphasa inbthkhwamni miiwihphuxanaelaphurwmaekikhbthkhwamsuksaephimetimodysadwk enuxngcakwikiphiediyphasaithyyngimmibthkhwamdngklaw krann khwrribsrangepnbthkhwamodyerwthisudbthkhwamniidrbaecngihprbprunghlaykhx krunachwyprbprungbthkhwam hruxxphipraypyhathihnaxphipray bthkhwamnitxngkaraehlngxangxingephimephuxphisucnkhxethccringkhntxnwithikhxngeblaemn fxrd xngkvs Bellman Ford Algorithm epnkhntxnwithithiichinkaraekpyhawithisnsudaebbaehlngtnthangediywsahrbesnechuxmthiminahnkid nxkcaknikhntxnwithiyngsamarthtrwcphbwtckrthiminahnkrwmkhxngesnechuxmepnlb hruxthieriykwawtckrechinglb xngkvs Negative cycle sungthaihpyhawithisnsudimniyam khntxnwithinithukkhidkhnodynkphthnachuxrichard eblaemn Richard Bellman aelaelsetxr fxrd cueniyr Lester Ford Jr khntxnwithikhxngeblaemn fxrdpraephthpyhawithisnsudaebbaehlngtnthangediywokhrngsrangkhxmulkrafprasiththiphaphemuxekidkrniaeythisudO V E displaystyle O V E primankhwamtxngkarphunthiemuxekidkrniaeythisudO V displaystyle O V dkhk enuxha 1 aenwkhid 2 khntxnwithi 3 rhsethiym 4 karwiekhraahxtrakaretibot 5 karnaipichngan 6 twxyangrhsinphasatang 7 duephim 8 xangxing 9 aehlngkhxmulxunaenwkhid aekikhkhntxnwithikhxngeblaemn fxrdnnmiaenwkhiddngni ichidkbkrafthiminahnkkhxngesnechuxmthngbwkaelalb aetimsamarthichidkbkrafthimiwngcrechinglb krnithiinkrafnnmiwngcrechinglbcaaecngihphuichthrab ichkahndkarphlwt withisnsudcak s ip t txngimphanpmsa aelamiesnechuxminwithixyangmak v 1 esn emux v aethnesnechuxmthnghmdinkrafnnkhntxnwithi aekikhkhntxnwithikhxngeblaemn fxrdnnxyuinokhrngsrangphunthanthikhlaykbkhntxnwithikhxngidkhstra odymixtrakaretibotkhxngkarthanganepn O V E emux V aela E khuxcanwnpmaelaesnechuxmkhxngkrafnn tamladberimtnphicarnacakaenwkhidphunthanngaywaesnthangthisnthisudthiipyngpmthnghmdnnepnxnnt caknnthasylksnwaidkhwamyawkhxngesnthangepnsuny dngphaph caknnphyayamediniptamesnthanginthukesnechuxmkhxngkrafrabuthisthang thaphbwaemuxiptamesnechuxmnnaelwtungkihphyayamthicaphxnmn karphxnesnechuxmkhxngkraf hmaythung kartrwcsxbephuxduwaesnthangthiipyngpmnnimsamarthsnlngid emuxducaknahnkkhxngaetlaesnechuxm caktwxyangkrafkhangtn erimaerkemuxtrwcsxbthiesnthangcakpmthi 1 ipyngpmthi 2 phbwaminahnkesnechuxmkhux 6 sungepnkhwamyawkhxngesnthangthisnthisudcakpmthi 1 ipyngpmthi 2 thimikhanxykwaxnnt dngnncungaethnkhaxnntinpmthi 2 dwy 6 aelaemuxphicarnaesnthangcakpmthi 1 ipyngpmthi 4 phbwaminahnkesnechuxmkhux 7 sungepnkhwamyawkhxngesnthangthisnthisudcakpmthi 1 ipyngpmthi 4 thimikhanxykwaxnnt dngnncungaethnkhaxnntinpmthi 4 dwy 7thatamkhntxnniiperuxnepncanwn n 1 khrng emux n aethncanwnpmthnghmdinkrafthiphicarna dngnnintwxyangnicatxngichkhntxndngklangni 4 khrng dngphaph rhsethiym aekikhkhxmulnaekha khux krafrabuthisthangthiesnechuxmminahnkthimi v pmkhxmulsngxxk khux pay D u sahrbpm u idbnkraf ody D u khuxrayathangcakpm v thungpm u bnkraf sungkrafnitxngimmiwngcrechinglb 1 kahndih D v mikhaethakb 0 2 tngaet aetlapm u imethakbpm v inkraf G 3 kahndih D u mikhaepnxnnt 4 tngaet i 1 thung n 1 5 tngaet thukesnechuxmthixxkcakpm z 6 tha D u w u z lt D z 7 caih D z ekbkha D u w u z w u z khuxkardaeninkarkhxngkarphxnesnechuxmkraf 8 thaimmiesnechuxmidelythithukphxn 9 cakhunkharayathangcakpm v thungpm u khxngaetlapm u 10 imechnnn 11 cakhunklbmawa krafnimiwngcrechinglb karwiekhraahxtrakaretibot aekikhcakrhsethiymkhangtncaphbwakardaeninkarkhxngkhntxnwithikhxngeblaemn fxrdnncamikarthanganxyu 2 swnhlk khux wngwnthimikarwnephuxtrwcsxbkhwamtungkhxngnahnkesnechuxminkraf sungcathanganepnewlananethacanwnesnechuxmthimi dngnn caichewlainkarthanganswnniepn O E emux E khuxcanwnesnechuxmkhxngkrafhnung swnkarthanganthitxngphanpmthukpminkrafcaichewlathnghmdepn O V emux V khuxcanwnpmkhxngkrafhnungephraachanncungsrupidwachntxnwithikhxngeblaemn fxrdmixtrakaretibotethakb O V E karnaipichngan aekikhwithisnsudinkrafmithisthang ophrotkhxleluxkesnthangaebbtarangrayathang RIP twxyangrhsinphasatang aekikhC C Java PHP Pythonduephim aekikhULearn karxxkaebbxlkxrithum smchay prasiththicutrakul phaphekhluxnihw khntxnwithikhxngeblaemn fxrd Bellman ford Algorithm E leaning Introduction to Algorithms khntxnwithikhxngidkhstra epnkhntxnwithithiichinkarharayathangesnthangsnsudkhxngkhupmid sahrbkrafthimikhwamyawkhxngesnechuxmimepnlb khntxnwithikhxngcxhnsn epnkhntxnwithithiichhaesnthangsnthisudrahwangthukkhucud inkrafrabuthisthangthimiesnechuxmnxy khntxnwithinisamarthichnahnkkhxngesnechuxmepncanwnlbid aettxngimmiwngrxbthinahnktidlbxyudwy khntxnwithikhxngflxyd wxraechl epnkhntxnwithikarwiekhraahkrafephuxthicaharayathangkhxngesnthangsnsudinkrafthiminahnkkhxngesnechuxmepnbwk hrux nahnkkhxngesnechuxmepnlb aetimsamarthhaidthamiwngcrlbxangxing aekikhkarxxkaebbaelawiekhraahxlkxrithum smchay prasiththicutrakul Algorithm Design nththi niphannth Bellman Ford algorithm Computer Programming WebBlog Introduction to Algorithms Algorithm Designaehlngkhxmulxun aekikhkarxxkaebbxlkxrithum smchay prasiththicutrakul ULearn karxxkaebbxlkxrithum smchay prasiththicutrakul Algo Wikiekhathungcak https th wikipedia org w index php title khntxnwithikhxngeblaemn fxrd amp oldid 5700490, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

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