Алгоритм 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Е)
Для отримання детальної інформації ознайомтеся з улюбленим підручником алгоритмів. (У вас є улюблений підручник з алгоритмами, чи не так?)