Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция Алгоритмы на графах.doc
Скачиваний:
102
Добавлен:
20.06.2014
Размер:
1.78 Mб
Скачать

Алгоритм Дейкстра поиска кратчайшего пути.

  1. Положим и считать эту метку постоянной. Положим , , и считая эти метки временными. Положить .

  2. , выходящие из , с временными метками выполнить: если и . Иначе и не менять местами.

  3. Пусть - множество вершин с временными метками. Найти вершину такую что:

Считать метку постоянной меткой вершины .

  1. . Если , то следовать п.5, где - вес кратчайшего пути. Иначе перейти п.2.

  2. , где -кратчайший путь. Конец.

Замечание.

1). Алгоритм Дейкстры применим и к неориентированным графам. Для этого достаточно каждое неориентированное ребро графа, имеющее вес , рассматривать как пару дуг и того же веса.

2). Если п.4. модифицировать так, чтобы алгоритм заканчивал работу только после получения всеми вершинами постоянных меток, то он будет строить кратчайшие пути из в каждую из остальных вершин. Если к тому же вместе с превращением метки вершины в постоянную (п.3 алгоритма закосить дугу а множество , то после окончания работы алгоритма граф будет корневым ориентированным остовным деревом. Это дерево называют деревом кратчайших путей из графа . Для любой вершины единственный - путь в дереве является кратчайшим - путь в графе .

Алгоритм Дейкстры строится в графе кратчайший -путь за время .

Построить дерево кратчайших путей из вершины 1 по алгоритму Дейкстры.

из2:

из3:

      1. Алгоритм Флойда

Рассмотрим более общую ситуацию. Будем считать, что в графе допускаются дуги отрицательного веса. Опишем алгоритм нахождения кратчайших путей между всеми парами вершин графа при условии, что в графе нет отрицательных контуров (замкнутых путей отрицательного веса). Если же такой контур в графе есть, то алгоритм сообщает об этом и прекращает работу.

Будем считать, что граф задан матрицей весов дуг ,

  1. .

Кроме того, полагаем .

В алгоритме используются матрицы и . Матрица содержит веса кратчайших путей, проходящих только через вершины .

  1. В матрице - номер вершины, предшествующий вершине в текущем -пути. Т.о., матрица имеет тот же смысл, что и метка в алгоритме Дейкстра.

Алгоритм Флойда

1). ; ; ,

  1. .

2). выполнить: если , то ; . Иначе ; .

3). Если для некоторого , , то конец (в графе имеется отрицательный контур). Иначе перейти к п.4).

4). . Если , то конец ( - матрица весов кратчайших путей, определяемых с помощью матрицы ). С помощью матрицы кратчайший -путь определяется следующим образом:

,

Иначе перейти к п.2).

,

,

,

,

,

Найдем, например, с помощью матрицы кратчайший (2,1)-путь:

. Длина этого пути .

,

,

,

,

,

В графе есть контур отрицательного веса (1,2,3,4), .