Алгоритм Беллмана—Форда — алгоритм пошуку найкоротшого шляху в зваженому графі. Знаходить найкоротші шляхи від однієї вершини графу до всіх інших. На відміну від алгоритму Дейкстри, алгоритм Беллмана—Форда допускає ребра з негативною вагою. Запропоновано незалежно Річардом Беллманом і .
Клас | Задача про найкоротший шлях (для зважених орієнтованих графів) |
---|---|
Структура даних | граф |
Найгірша швидкодія | |
Просторова складність у найгіршому випадку |
Історія
Алгоритм носить ім'я двох американських вчених: Річарда Беллмана (Richard Bellman) і (Lester Ford). Форд фактично винайшов цей алгоритм в 1956 році при вивченні іншої математичної задачі, підзадача якої звелася до пошуку найкоротшого шляху в графі, і Форд зробив начерк остаточного вирішення завдання цього алгоритму. Беллман в 1958 р. опублікував статтю, присвячену конкретно завданню знаходження найкоротшого шляху, і в цій статті він чітко сформулював алгоритм у тому вигляді, в якому він відомий нам зараз.
Алгоритм маршрутизації RIP (алгоритм Беллмана — Форда) був вперше розроблений в 1969 році, як основний для мережі ARPANET.
Формулювання задачі
Дано орієнтований або неорієнтований граф з ваговою функцією Вагою шляху назвемо суму ваг ребер, що входять в цей шлях:
Вхідними даними для алгоритму є граф вагова функція та стартова вершина Потрібно знайти найкоротші шляхи від вершини до всіх вершин графу. Алгоритм Беллмана-Форда повертає логічне значення, яке вказує на те, чи міститься в графі цикл з негативною вагою, досяжний з витоку. Якщо такий цикл існує у графі алгоритм повідомляє, що найкоротших шляхів не існує. Якщо ж таких циклів немає, алгоритм видає найкоротші шляхи і їх вагу.
Сам алгоритм Форда-Беллмана представляє з себе кілька фаз. На кожній фазі проглядаються всі ребра графу, і алгоритм намагається справити релаксацію (relax, ослаблення) уздовж кожного ребра ваги . Релаксація вздовж ребра — це спроба поліпшити значення значенням . Фактично це означає, що ми намагаємося поліпшити значення для вершини користуючись ребром і поточним значенням для вершини . Стверджується, що достатньо фази алгоритму, щоб коректно порахувати довжини всіх найкоротших шляхів у графі (цикли негативної ваги відсутні). Для недосяжних вершин відстань залишиться нескінченністю.
Псевдокод
// Ініціалізація для кожної вершини // Основна частина для до для кожного ребра якщо // зберігаємо попередню вершину // Перевірка на наявність циклів з від'ємною вагою для кожного ребра якщо повернути ХИБА повернути ІСТИНА
Оцінка складності
Якщо граф заданий списком ребер: ініціалізація потребує часу, кожен з проходів потребує часу, прохід по усім ребрам для перевірки наявності негативного циклу займає часу. Отже алгоритм працює за часу.
Якщо граф заданий матрицею суміжності, то алгоритм буде виконуватись за часу.
Література
- R. Bellman: On a Routing Problem // Quarterly of Applied Mathematics. 1958. Vol 16, No. 1. C. 87-90, 1958.
- L. R. Ford, Jr., D. R. Fulkerson. Flows in Networks, Princeton University Press, 1962.
Посилання
- Реалізація алгоритму Белмана — Форда на e-maxx.ru [ 7 вересня 2011 у Wayback Machine.]
- Реалізація алгоритму пошуку негативного циклу на e-maxx.ru [ 7 вересня 2011 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Bellmana Forda algoritm poshuku najkorotshogo shlyahu v zvazhenomu grafi Znahodit najkorotshi shlyahi vid odniyeyi vershini grafu do vsih inshih Na vidminu vid algoritmu Dejkstri algoritm Bellmana Forda dopuskaye rebra z negativnoyu vagoyu Zaproponovano nezalezhno Richardom Bellmanom i Algoritm Bellmana FordaKlasZadacha pro najkorotshij shlyah dlya zvazhenih oriyentovanih grafiv Struktura danihgrafNajgirsha shvidkodiyaO V E displaystyle O V E Prostorova skladnist u najgirshomu vipadkuO V displaystyle O V IstoriyaAlgoritm nosit im ya dvoh amerikanskih vchenih Richarda Bellmana Richard Bellman i Lester Ford Ford faktichno vinajshov cej algoritm v 1956 roci pri vivchenni inshoyi matematichnoyi zadachi pidzadacha yakoyi zvelasya do poshuku najkorotshogo shlyahu v grafi i Ford zrobiv nacherk ostatochnogo virishennya zavdannya cogo algoritmu Bellman v 1958 r opublikuvav stattyu prisvyachenu konkretno zavdannyu znahodzhennya najkorotshogo shlyahu i v cij statti vin chitko sformulyuvav algoritm u tomu viglyadi v yakomu vin vidomij nam zaraz Algoritm marshrutizaciyi RIP algoritm Bellmana Forda buv vpershe rozroblenij v 1969 roci yak osnovnij dlya merezhi ARPANET Formulyuvannya zadachiDano oriyentovanij abo neoriyentovanij graf G V E displaystyle G V E z vagovoyu funkciyeyu w E R displaystyle w E to mathbb R Vagoyu w p displaystyle w p shlyahu p v0 v1 vk displaystyle p langle v 0 v 1 dots v k rangle nazvemo sumu vag reber sho vhodyat v cej shlyah w p i 1kw vi 1 vi displaystyle w p sum i 1 k w v i 1 v i Vhidnimi danimi dlya algoritmu ye graf G displaystyle G vagova funkciya w displaystyle w ta startova vershina s displaystyle s Potribno znajti najkorotshi shlyahi vid vershini s displaystyle s do vsih vershin grafu Algoritm Bellmana Forda povertaye logichne znachennya yake vkazuye na te chi mistitsya v grafi cikl z negativnoyu vagoyu dosyazhnij z vitoku Yaksho takij cikl isnuye u grafi G displaystyle G algoritm povidomlyaye sho najkorotshih shlyahiv ne isnuye Yaksho zh takih cikliv nemaye algoritm vidaye najkorotshi shlyahi i yih vagu Sam algoritm Forda Bellmana predstavlyaye z sebe kilka faz Na kozhnij fazi proglyadayutsya vsi rebra grafu i algoritm namagayetsya spraviti relaksaciyu relax oslablennya uzdovzh kozhnogo rebra u v displaystyle u v vagi w u v displaystyle w u v Relaksaciya vzdovzh rebra ce sproba polipshiti znachennya v d displaystyle v d znachennyam v u w u v displaystyle v u w u v Faktichno ce oznachaye sho mi namagayemosya polipshiti znachennya dlya vershini v displaystyle v koristuyuchis rebrom u v displaystyle u v i potochnim znachennyam dlya vershini u displaystyle u Stverdzhuyetsya sho dostatno G V 1 displaystyle G V 1 fazi algoritmu shob korektno porahuvati dovzhini vsih najkorotshih shlyahiv u grafi cikli negativnoyi vagi vidsutni Dlya nedosyazhnih vershin vidstan v d displaystyle v d zalishitsya neskinchennistyu Psevdokod Inicializaciya dlya kozhnoyi vershini v G V displaystyle v in G V v d displaystyle v d infty v p NIL displaystyle v pi NIL s d 0 displaystyle s d 0 Osnovna chastina dlya i 1 displaystyle i 1 do G V 1 displaystyle G V 1 dlya kozhnogo rebra u v G E displaystyle u v in G E yaksho v d gt u d w u v displaystyle v d gt u d w u v v d u d w u v displaystyle v d u d w u v v p u displaystyle v pi u zberigayemo poperednyu vershinu Perevirka na nayavnist cikliv z vid yemnoyu vagoyu dlya kozhnogo rebra u v G E displaystyle u v in G E yaksho v d gt u d w u v displaystyle v d gt u d w u v povernuti HIBA povernuti ISTINAOcinka skladnostiYaksho graf zadanij spiskom reber inicializaciya potrebuye O V displaystyle O V chasu kozhen z V 1 displaystyle V 1 prohodiv potrebuye O E displaystyle O E chasu prohid po usim rebram dlya perevirki nayavnosti negativnogo ciklu zajmaye O E displaystyle O E chasu Otzhe algoritm pracyuye za O VE displaystyle O VE chasu Yaksho graf zadanij matriceyu sumizhnosti to algoritm bude vikonuvatis za O E3 displaystyle O E 3 chasu LiteraturaR Bellman On a Routing Problem Quarterly of Applied Mathematics 1958 Vol 16 No 1 C 87 90 1958 L R Ford Jr D R Fulkerson Flows in Networks Princeton University Press 1962 PosilannyaRealizaciya algoritmu Belmana Forda na e maxx ru 7 veresnya 2011 u Wayback Machine Realizaciya algoritmu poshuku negativnogo ciklu na e maxx ru 7 veresnya 2011 u Wayback Machine