Алгоритм Зейделя

Алгоритм Зайделя — это алгоритм, разработанный Раймундом Зайделем в 1992 году для задачи поиска кратчайшего пути для всех пар неориентированных, невзвешенных, связных графов. [1] Он решает задачу за ожидаемое время для графа с вершинами, где — показатель степени сложности умножения матриц . Если искать только расстояния между каждой парой вершин, то в худшем случае можно достичь той же границы времени. Несмотря на то, что алгоритм разработан для связных графов, его можно применять индивидуально к каждому связному компоненту графа с тем же общим временем выполнения. Существует исключение из ожидаемого времени выполнения, указанного выше для вычисления путей: если ожидаемое время выполнения становится . О ( В ω бревно В ) {\displaystyle O(V^{\omega }\log V)} В {\displaystyle V} ω < 2.373 {\displaystyle \омега <2,373} О ( н ω ) {\displaystyle O(n^{\omega})} н × н {\displaystyle n\times n} ω = 2 {\displaystyle \омега =2} О ( В 2 бревно 2 В ) {\displaystyle O(V^{2}\log ^{2}V)}

Подробности реализации

Ядром алгоритма является процедура, которая вычисляет длину кратчайших путей между любой парой вершин. В худшем случае это можно сделать за время. После вычисления длин пути можно реконструировать с помощью алгоритма Лас-Вегаса, ожидаемое время выполнения которого составляет для и для . О ( В ω бревно В ) {\displaystyle O(V^{\omega }\log V)} О ( В ω бревно В ) {\displaystyle O(V^{\omega }\log V)} ω > 2 {\displaystyle \омега >2} О ( В 2 бревно 2 В ) {\displaystyle O(V^{2}\log ^{2}V)} ω = 2 {\displaystyle \омега =2}

Вычисление длин кратчайших путей

В коде Python ниже предполагается, что входной граф задан как матрица смежности с нулями на диагонали. Он определяет функцию APD, которая возвращает матрицу с записями, такими что — длина кратчайшего пути между вершинами и . Используемый класс матрицы может быть любой реализацией класса матрицы, поддерживающей операторы умножения, возведения в степень и индексации (например, numpy.matrix). н × н {\displaystyle n\times n} 0 {\displaystyle 0} 1 {\displaystyle 1} А {\displaystyle А} Д я , дж {\displaystyle D_{i,j}} Д я , дж {\displaystyle D_{i,j}} я {\displaystyle я} дж {\displaystyle j}

def  apd ( A ,  n :  int ): """Вычислить длины кратчайших путей.""" if all ( A [ i ][ j ] for i in range ( n ) for j in range ( n ) if i != j ): return A Z = A ** 2 B = matrix ( [ [ 1 if i != j and ( A [ i ][ j ] == 1 or Z [ i ][ j ] > 0 ) else 0 for j in range ( n )] for i in range ( n ) ] ) T = apd ( B , n ) X = T * A degree = [ sum ( A [ i ][ j ] for j in range ( n )) for i in range ( n )] D = matrix ( [ [ 2 * T [ i ][ j ] if X [ i ][ j ] >= T [ i ][ j ] * degree [ j ] else 2 * T [ i ][ j ] - 1 для j в диапазоне ( n ) ] для i в диапазоне ( n ) ] ) вернуть D                                                                                                      

Базовый случай проверяет, описывает ли входная матрица смежности полный граф, в этом случае все кратчайшие пути имеют длину . 1 {\displaystyle 1}

Графики с весами из конечных вселенных

Существуют также алгоритмы для неориентированных и ориентированных графов с весами из конечной вселенной . Самый известный алгоритм для направленного случая — in time Цвика в 1998 году. [2] Этот алгоритм использует умножение прямоугольных матриц вместо умножения квадратных матриц. Лучшие верхние границы можно получить, если использовать лучший доступный алгоритм умножения прямоугольных матриц вместо достижения прямоугольного умножения с помощью нескольких умножений квадратных матриц. Самый известный алгоритм для неориентированного случая — in time Шошана и Цвика в 1999 году. [3] Первоначальная реализация этого алгоритма была ошибочной и была исправлена ​​Эйринакисом, Уильямсоном и Субрамани в 2016 году. [4] { 1 , , М , + } {\displaystyle \{1,\ldots ,M,+\infty \}} О ~ ( М 1 / ( 4 ω ) В 2 + 1 / ( 4 ω ) ) {\displaystyle {\tilde {O}}(M^{1/(4-\omega)}V^{2+1/(4-\omega)})} О ~ ( М В ω ) {\displaystyle {\tilde {O}}(MV^{\omega })}

Примечания

  1. ^ Seidel, R. (1995). «О задаче поиска кратчайшего пути для всех пар вершин в невзвешенных неориентированных графах». Журнал компьютерных и системных наук . 51 (3): 400– 403. doi : 10.1006/jcss.1995.1078 .
  2. ^ Цвик, У. (1 ноября 1998 г.). «Все пары кратчайших путей во взвешенных ориентированных графах — точные и почти точные алгоритмы». Труды 39-го ежегодного симпозиума по основам компьютерной науки (Кат. № 98CB36280) . стр.  310–319 . doi :10.1109/SFCS.1998.743464. ISBN 0-8186-9172-7. S2CID  10096418 – через IEEE Xplore.
  3. ^ Шошан, А.; Цвик, У. (15 февраля 1999 г.). «Все пары кратчайших путей в неориентированных графах с целыми весами». 40-й ежегодный симпозиум по основам компьютерной науки (Кат. № 99CB37039) . стр.  605–614 . doi :10.1109/SFFCS.1999.814635. ISBN 0-7695-0409-4. S2CID  2377466 – через IEEE Xplore.
  4. ^ Эйринакис, Павлос; Уильямсон, Мэтью; Субрамани, К. (28 марта 2016 г.). «Об алгоритме Шошана-Цвика для задачи поиска кратчайшего пути для всех пар вершин». arXiv : 1603.08627 [cs.DS].
Retrieved from "https://en.wikipedia.org/w/index.php?title=Seidel%27s_algorithm&oldid=1250833918"