Я маю рацію щодо відмінностей між алгоритмами Флойда-Варшалла, Дейкстри та Беллмана-Форда?


16

Я вивчав три, і я викладаю свої висновки з них нижче. Чи міг би хтось сказати мені, чи достатньо точно я їх зрозумів чи ні? Дякую.

  1. Дейкстри алгоритм використовується тільки тоді , коли у вас є одне джерело , і ви хочете знати , найменший шлях від одного вузла до іншого, але не може в таких випадках , як це .

  2. Алгоритм Floyd-Warshall використовується тоді, коли будь-який з усіх вузлів може бути джерелом, тому ви хочете за найкоротшу відстань досягти будь-якого вузла призначення з будь-якого вузла джерела. Це не вдається лише тоді, коли є негативні цикли.

  3. Bellman-Ford використовується як Dijkstra, коли існує лише одне джерело. Це може обробляти негативні ваги, і його робота така ж, як у Floyd-Warshall, за винятком одного джерела, правда? (Це я, в найменшій мірі, впевнений.)


Ласкаво просимо! Я відредагував зайві частини коду; люди можуть самостійно перейти до Вікіпедії або перевірити алгоритми у своїх улюблених підручниках. Зауважте, що ваше запитання дивно задавати, тому що відповідь "так" не може містити більше нічого.
Рафаель

Відповіді:


23

Алгоритм Dijkstra використовується лише тоді, коли у вас є одне джерело і ви хочете знати найменший шлях від одного вузла до іншого, але не вдається [у графіках з негативними ребрами]

ссprevious[v]v

Поведінка алгоритму Дейкстри в графах з негативними ребрами залежить від точного варіанта, що обговорюється. Деякі варіанти алгоритму, як, наприклад, у Вікіпедії, завжди запускаються швидко, але не правильно обчислюють найкоротші шляхи, коли є негативні ребра. Інші варіанти, як той, що є в цих конспектах лекцій, завжди правильно обчислюють найкоротші шляхи (якщо не існує негативного циклу, який можна отримати від джерела), але, в гіршому випадку, для негативних ребер може знадобитися експоненційний час.

Алгоритм Флойда-Варшалла використовується, коли будь-який з усіх вузлів може бути джерелом, тому ви хочете за найкоротшу відстань досягти будь-якого вузла призначення з будь-якого вузла джерела. Це не вдається лише за наявності негативних циклів.

Це правильно. Floyd-Warshall - один із прикладів алгоритму найкоротшого шляху з усіма парами , тобто він обчислює найкоротші шляхи між кожною парою вузлів. Інший приклад - "для кожного вузла v, запустіть Dijkstra з v як вихідний вузол". Є кілька інших.

Bellman-Ford використовується як Dijkstra, коли існує лише одне джерело. Це може впоратися з негативними вагами, і його робота така ж, як у Флойда-Варшалла, за винятком одного джерела, правда?

Bellman-Ford - це ще один приклад алгоритму з найкоротшим кодом з найменшими джерелами , як Dijkstra. Bellman-Ford і Floyd-Warshall схожі - наприклад, вони обидва алгоритми динамічного програмування - але Floyd-Warshall не той самий алгоритм, як "для кожного вузла v, запустіть Беллмана-Форда з v як вихідний вузол". Зокрема, працює Флойд-ВаршаллО(V3)О(V2Е)О(VЕ)

Для отримання детальної інформації ознайомтеся з улюбленим підручником алгоритмів. (У вас є улюблений підручник з алгоритмами, чи не так?)


Ви б не хотіли поділитися своїми улюбленими підручниками алгоритмів?
Абдул


@Abdul приманка. - Підручник, використовуваний в MIT / Stanford, є T. Cormen та ін. Вступ до алгоритмів. Підручник, використаний у Корнелла, - Дж. Кляйнберг та ін. Алгоритм дизайну. cs.sjtu.edu.cn/~jiangli/teaching/CS222/files/materials / ...
AffluentOwl

2

Усі три алгоритми висвітлюються у слайдах лекцій професора Яегюна Парка (Стенфордський університет). Ось посилання Найкоротші алгоритми шляху


Це не відповідає на питання про відмінності і не є самостійним, просто посилання без резюме не вважається хорошою відповіддю. Крім того, це здається зайвим, оскільки не охоплює більше, ніж існуючі відповіді.
Зло

1

Сторінка Вікіпедії щодо проблеми найкоротшого шляху описує дві різні проблеми: SSSP та APSP.

Найкоротший шлях з єдиним джерелом (SSSP):

  • Алгоритм Дейкстри: вирішує задачу з найкоротшим шляхом з одним джерелом.
    • Обмеження: лише негативні краї, з якими він не може працювати.
    • Невагомі графіки: Dijkstra - це те саме, що BFS.
  • Алгоритм Беллмана – Форда: вирішує проблему з одним джерелом, якщо ваги краю можуть бути негативними. Це вдосконалення для Dijkstra, де він також може впоратися з негативними вагами.

Усі пари, найкоротший шлях (APSP):

  • Алгоритм Флойда – Варшалла: вирішує всі пари найкоротшими шляхами. Обробляє як позитивні, так і негативні краї.
    • Обмеження: Не вдається обробити негативні цикли.

Отже, Флойд-Варшалл не є тим самим, що і BFS, хоча основна методологія є однаковою, динамічне програмування.


1

Можливо, це має бути коментарем, а не відповіддю, але це відмінність між цими алгоритмами, які інші відповіді не згадують.

Люди схильні називати алгоритм Флойда Флойдом-Варшаллом , але алгоритми Флойда і Варшалла не однакові.

О(1)О(н2)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.