Civil &: строительная инженерия
Использование алгоритма Джонсона для решения самых коротких проблем на всех парах
Table of Contents
Понимание проблемы кратчайших путей всех пар
Проблема кратчайшего пути (APSP) всех пар ищет наименьшее расстояние между каждой парой вершин в взвешенном графе. Это фундаментальная проблема в теории графов с прямыми последствиями для проектирования сети, оптимизации потока трафика, анализа социальных сетей и логистики. В отличие от проблем с кратчайшим путем с одним источником, решение APSP требует вычислительных расстояний от каждой вершины до всех других, которые масштабируются квадратически с количеством узлов.
Общие подходы решают эту проблему, но сталкиваются с компромиссами. Floyd-Warshall, алгоритм динамического программирования, работает на плотных графах, но работает во времени O(V3 и не может обрабатывать отрицательные циклы веса. Алгоритм Дийкстры, при запуске с каждой вершины, достигает O(V (E + V log V)) с бинарной кучей, но он не работает на графиках с отрицательными весами ребра. Для разреженных графов алгоритм Джонсона преодолевает этот разрыв, комбинируя лучшие из обоих методов при обработке отрицательных весов — при условии отсутствия отрицательных циклов.
Сравнение общих алгоритмов
Чтобы оценить алгоритм Джонсона, он помогает противопоставить наиболее часто используемые решения APSP:
- FLT:0]Floyd-Warshall — проста в реализации, использует матрицу 2D-расстояний, обновляется через тройные петли. Работает на отрицательных краях, но не на отрицательных циклах. Непрактично для графиков с тысячами вершин из-за кубического времени.
- Повторяющаяся дийкстра — Пробегает дийкстра от каждой вершины. Быстрый на разреженных графах O(V E log V) с использованием кучи Фибоначчи, но ограниченный неотрицательными весами.
- Bellman-Ford (повторяется) — обрабатывает отрицательные края, но работает в O(V2E], что медленнее, чем обе альтернативы.
- Алгоритм Джонсона — перевесит граф так, чтобы все края стали неотрицательными, затем применяет повторную дийкстру.O(V E + V2 log V] с двоичной кучей, что делает его предпочтительным выбором для разреженных графов с отрицательными весами.
Как работает алгоритм Джонсона
Алгоритм Джонсона ловко преобразует граф, содержащий отрицательные края, в граф, имеющий только неотрицательные краевые веса, сохраняя структуру кратчайших путей. Это преобразование опирается на потенциальную функцию , полученную из одного прогона Беллмана-Форда. После перевеса алгоритм Дейкстры можно безопасно использовать из каждого узла. Алгоритм состоит из четырех шагов.
Шаг 1: Добавление супер-источника
К графу добавляется новая вершина , соединенная с каждой существующей вершиной с краем веса 0. Этот дополнительный узел не изменяет кратчайшие расстояния пути, потому что любой путь, который использует s , может быть добавлен без затрат.
Шаг 2: Вычисление потенциальных функций с помощью Bellman-Ford
Запуск алгоритма Беллмана-Форда из суперисточника . Поскольку имеет края нулевого веса для всех вершин, алгоритм вычисляет наименьшее расстояние h(v) от ]] до каждой вершины v. Это расстояние служит потенциальной функцией. Если во время этого прогона обнаруживается отрицательный цикл, исходный граф содержит отрицательный цикл, и алгоритм Джонсона сообщает, что не существует действительного набора кратчайших путей.
Шаг 3: Перевес графа
Используя потенциалы h(v), каждый край (u, v) с исходным весом w(u, v) перевесят на:
w'(u, v) = w(u, v) + h(u) — h(v)
Это преобразование гарантирует, что каждый вес ребра с перевесом неотрицателен. Доказательство опирается на неравенство треугольника: потому что h(v) ≤ h(u) + w(u, v) (из вывода Беллмана-Форда) следует, что w'(u, v) ≥ 0. Более того, сохраняется упорядочение путей: кратчайший путь между любыми двумя вершинами в исходном графе остается кратчайшим путем в перевесном графе.
Шаг 4: Запуск алгоритма Дейкстры из каждого вертекса
С перевесным графом, содержащим только неотрицательные края, алгоритм Дийкстры запускается один раз от каждой вершины. Каждый прогон вычисляет самые короткие расстояния до всех других вершин. Полученные расстояния затем преобразуются обратно в исходные веса края с использованием формулы:
distoriginal(u, v) = distreweighted(u, v) — h(u) + h(v)
Этот последний шаг гарантирует, что указанные расстояния являются точными для исходного графика.
Сложность и анализ эффективности
Алгоритм Джонсона достигает общей сложности времени O2 log V при реализации с очередью приоритета бинарной груды.O[[V E], а последующая V Dijkstra запускает каждый дубль O на разреженных графах.E ≈ V2, сложность приближается O3, что делает Floyd-Warshall более простой альтернативой. Однако для разреженных графов (например, дорожных сетей или социальных графов) алгоритм Джонсона гораздо более эффективным.
Использование кучи Фибоначчи может уменьшить часть Дийкстры до O(V E + V2 log V] амортизированной, хотя на практике двоичные кучи проще и часто достаточно быстры. След памяти O(]2 для матрицы расстояния, но это может быть улучшено путем хранения результатов неявно.
Практические применения
Алгоритм Джонсона используется в областях, где края графов могут нести отрицательные затраты, и требуются все пары кратчайших расстояний.
- Сетевая маршрутизация: Интернет-провайдеры и телекоммуникационные сети используют распределенные протоколы маршрутизации, которые должны адаптивно вычислять самый дешевый путь между любыми двумя маршрутизаторами, даже когда стоимость связи колеблется или становится отрицательной (например, из-за перегрузки или скидок на политику).
- Городское планирование перевозок: Компании, занимающиеся картографированием и логистикой (например, Google Maps, двигатели маршрутизации OpenStreetMap) вычисляют кратчайшие пути между многими парами мест назначения для оптимизации парка.
- Минимизация затрат на цепочку поставок: В многоступенчатых производственных сетях затраты от одного узла к другому могут быть отрицательными (например, скидки). Алгоритм Джонсона находит наиболее выгодные маршруты по всей цепочке поставок.
- Анализ социальных сетей: Измерение близости централизации или между ними централизации требует всепарных расстояний. Отрицательные края могут представлять собой дисконтные ссылки «друг-друг» или состязательные отношения.
- Экономические модели ввода-вывода:] Модели Леонтьева и анализ потоков часто включают отрицательные коэффициенты; алгоритм Джонсона вычисляет чистый эффект распространения изменений через взаимосвязанную экономику.
Для дальнейшего чтения по математическим основам см. подробную запись Wikipedia и оригинальную статью Дональда Б. Джонсона (1977). Практическую реализацию в Python можно найти в репозитории GitHub NetworkX, который включает алгоритм Джонсона в качестве стандартной функции. Для более глубокого понимания техники перевеса CP-алгоритмы обеспечивают четкое пошаговое руководство .
Заключение
Алгоритм Джонсона выделяется как элегантное и практическое решение проблемы кратчайших путей всех пар, когда присутствуют отрицательные веса края. Объединив надежность Bellman-Ford (для обнаружения отрицательных циклов и вычислительных потенциалов) со скоростью Dijkstra (для неотрицательных графов), он достигает отличной производительности в разреженных сетях. Сама техника перевеса - прекрасное применение потенциальных функций - концепция, которая выходит далеко за рамки кратчайших путей в такие области, как минимальный расход и алгоритмическая теория игр.
Когда перед нами стоит реальная проблема APSP, где графики редки и могут содержать отрицательные края, алгоритм Джонсона должен быть первым соображением. Его теоретические гарантии и широкое внедрение в библиотеках (например, ]NetworkX , Boost Graph Library) делают его практичным для принятия.