Розуміння найпростіших шляхів

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

Загальні підходи за цією проблемою, але стикається з торговими точками. Floyd-Warshall, динамічний алгоритм програмування, працює на щільні графіки, але працює в O(V3]]])]] часу і не може обробляти негативні цикли ваги. Алгоритм Dijkstra, коли курсувати з кожного вершини, досягає O(V (E + V log V))] з бінарним шпилем, але він не працює на графіках з негативними вагами. Для sar Johnsonpro

Порівняння поширених алгоритмів

Для оцінки алгоритму Джонсона, він допомагає контрастно найбільш часто використовувати APSP-рішення:

  • Floyd-Warshall – Просте впровадження, використовує матриці відстані 2D, оновлення по потрійних петлях. Працює на негативних краях, але не негативних циклах. Недопомагально для графіків з тисячами вершин через кубічний час.
  • Ремонтований Dijkstra] – Запускає Dijkstra з кожного вершини. Швидко на ширині графіки (O(V E log V)] з використанням Fibonacci клаптяв, але обмежується ненегативними вагами.
  • Bellman-Ford (повторний)] – Руки негативних країв, але працює в O(V2]E)]], що повільніше, ніж альтернативи.
  • ]Algorithm] – Знімки графіка так, щоб всі краї стали негативними, потім застосовувалися повторно Dijkstra. Він врожай O(V E + V2 log V) з бінарним клаптом, що робить його кращим вибором для спаржу графіків з негативними вагами.

Як працює Альгорітм Джонсона

Алгоритм Джонсона розумно трансформує графік, що містить негативні краї в одну з єдиною неіграційної маси краю, зберігаючи структуру найкоротших шляхів. Ця трансформація спирається на потенціальну функцію], отриману з одного ходу Bellman‐Ford. Після того як було перероблено алгоритм Dijkstra може бути використаний з кожного вузла. Алгоритм складається з чотирьох кроків.

Крок 1: Додавання супер джерело Node

Новий вершина додано до графіка, підключеного до кожного існуючого вершини з краєм ваги 0. Цей додатковий вузол не змінює найкоротші відстані шляху тому, що будь-який шлях, який використовує ]] може бути доповнений без вартості.

Крок 2: Обчислення потенціалів потенціалів з Bellman-Ford

Запустіть алгоритм Bellman‐Ford з супер-вихідного джерела ] має нульові ваги для всіх вершин, алгоритм компулює найкоротшу відстань h(v) з ] до кожного вершиниvh(v). Ця відстань слугує потенційною функцією. Якщо негативний цикл виявлений під час цього часу, оригінальні звіти про цикл

Крок 3: Зменшення графіка

] h]], кожен край ] ] з оригінальною вагою w(u, v)]] reweight:

w'(u, v) = w(u, v) + h(u)]

Ця трансформація гарантує, що кожна вага з ревагованих краю не є невідомим. Вистосування відповідає на трикутник нерівності: тому h(v) ≤ h(u) + w(u, v) (від виходу Bellman‐Ford), це випливає, що w'(u, v) ≥ 0. Крім того, замовлення шляхів зберігається: найкоротший шлях між будь-якими двома вершинами в оригінальному графіку залишається найкоротшим кроком в переробленому графіку.

Крок 4: Запуск Алгоритм Дійкстра від кожного Вертексу

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

dist ] (u, v) = distreweight(u, v) – h(u) + h(v)]

Цей фінальний крок забезпечує точність доведених дистанцій для оригінального графіка.

Аналіз рівня та продуктивності

алгоритм Джонсона досягає загальної складності часу O(V E + V2 log V)] при виконанні з бінарною черги пріоритетів. Фундаторний крок працює O(V E)], а далі Dijkstra працює кожен прийом O(E + V)], і [F

Використання фібоначчі клапт може зменшити частину Dijkstra до O(V E + V2 журнал V) амортизований, хоча на практиці бінарні палички простіші і досить швидко. Спринт пам'яті O22]]]] для матриці відстані, але це може бути поліпшено, зберігання результатів незліченно.

Практичні програми

Алгоритм Джонсона працює в доменах, де потрібно мати можливість перенести негативні витрати і всі найбільші відстані на рівні. До прикладів Real‐world відносяться:

  • Network маршрутизація: провайдери інтернет-служб та телекомунікаційних мереж використовують розподілені протоколи маршрутизації, які повинні адаптуватися до розрахунку найдешевшого шляху між двома маршрутизаторами, навіть коли витрати посилання на флуктуат або стають негативними (наприклад, через заставу або політику знижки).
  • Урбан планування перевезень: Mapping and Logistics Company (наприклад, Google Maps, OpenStreetMap маршрутизації двигунів) компраментувати найкоротші шляхи між багатьма парами-дестинаціями для оптимізації автопарку. Негативні ваги можуть моделювати дочірні органи або своєчасні знижки.
  • => Мінімізація вартості ланцюжка: У багатопоточних виробничих мережах, витрати з одного вузла в інший може бути негативними (наприклад, ребати). Алгоритм Джонсона знаходить найбільш вигідні маршрути по всій ланцюжку поставок.
  • Соціальний аналіз мережі: Вимірювання центральності заплітки або міжцентрової центральності вимагає всіх рівних відстаней. Негативні краї можуть представляти «фриендомофомефренд» дисконтні посилання або рекламні зв’язки.
  • Економічні моделі вводу: Моделі Леонтифів і аналіз потоку часто включають негативні коефіцієнти; алгоритм Джонсона комп’ютерно-мережевого впливу трансплантуючих змін через міжключну економіку.

Для подальшого читання на математичних засадах див. ] Детальний запис Вікіпедії та оригінальний папір Дональда Б. Джонсона (1977). Практичне виконання на Python можна знайти на NetworkX's GitHub репозиторію, що включає алгоритм Джонсона як стандартну функцію. Для більш глибокого розуміння техніки зважування CP‐Algorithms забезпечує чіткий покроковий покроковий посібник.

Висновок

Алгоритм Джонсона виділяється як елегантне і практичне рішення для всіхпорушень, найкоротші терміни проблеми шляху, коли присутні негативні ваги краю. Поєднуючи надійну міцність Bellman‐Ford (для виявлення негативних циклів і обчислювальних потенціалів) зі швидкістю Dijkstra (для неупереджених графіків), він досягає відмінної продуктивності на спаржучих мережах. Сама методика ревагантизації - це красиве застосування потенційних функцій - поняття, яка добре розширюється за найкоротші шляхи в області, такі як мінімальний потік і алгоритмічна теорія ігор.

Коли стикаються з реальною проблемою APSP, де графи є спаре і можуть містити негативні краї, алгоритм Джонсона повинен бути першим міркуванням. Його теоретичні гарантії та поширене впровадження в бібліотеках (наприклад, NetworkX], Boost Graph Library ]) зробити його практичним для прийняття.