- •Алгоритмы на графах
- •Обходы графов
- •Поиск в глубину (пг)
- •Алгоритм поиска в глубину в неориентированном связном графе
- •Поиск в ширину (пш)
- •Алгоритм поиска в ширину в неориентированном связном графе
- •Нахождение деревьев и остовов с помощью пг и пш
- •Нахождение дерева покрытия с помощью .
- •Нахождение дерева покрытия с помощью
- •Остов минимального веса (кратчайший остов)
- •Задача об остове минимального веса:
- •Алгоритм Краскала.
- •Алгоритм Прима.
- •Кратчайшие пути
- •Алгоритм Дейкстра
- •Алгоритм Дейкстра поиска кратчайшего пути.
- •Алгоритм Флойда
- •Алгоритм Флойда
Алгоритм Дейкстра поиска кратчайшего пути.
-
Положим и считать эту метку постоянной. Положим , , и считая эти метки временными. Положить .
-
, выходящие из , с временными метками выполнить: если и . Иначе и не менять местами.
-
Пусть - множество вершин с временными метками. Найти вершину такую что:
Считать метку постоянной меткой вершины .
-
. Если , то следовать п.5, где - вес кратчайшего пути. Иначе перейти п.2.
-
, где -кратчайший путь. Конец.
Замечание.
1). Алгоритм Дейкстры применим и к неориентированным графам. Для этого достаточно каждое неориентированное ребро графа, имеющее вес , рассматривать как пару дуг и того же веса.
2). Если п.4. модифицировать так, чтобы алгоритм заканчивал работу только после получения всеми вершинами постоянных меток, то он будет строить кратчайшие пути из в каждую из остальных вершин. Если к тому же вместе с превращением метки вершины в постоянную (п.3 алгоритма закосить дугу а множество , то после окончания работы алгоритма граф будет корневым ориентированным остовным деревом. Это дерево называют деревом кратчайших путей из графа . Для любой вершины единственный - путь в дереве является кратчайшим - путь в графе .
Алгоритм Дейкстры строится в графе кратчайший -путь за время .
Построить дерево кратчайших путей из вершины 1 по алгоритму Дейкстры.
из2:
из3:
-
Алгоритм Флойда
Рассмотрим более общую ситуацию. Будем считать, что в графе допускаются дуги отрицательного веса. Опишем алгоритм нахождения кратчайших путей между всеми парами вершин графа при условии, что в графе нет отрицательных контуров (замкнутых путей отрицательного веса). Если же такой контур в графе есть, то алгоритм сообщает об этом и прекращает работу.
Будем считать, что граф задан матрицей весов дуг ,
-
.
Кроме того, полагаем .
В алгоритме используются матрицы и . Матрица содержит веса кратчайших путей, проходящих только через вершины .
-
В матрице - номер вершины, предшествующий вершине в текущем -пути. Т.о., матрица имеет тот же смысл, что и метка в алгоритме Дейкстра.
Алгоритм Флойда
1). ; ; ,
-
.
2). выполнить: если , то ; . Иначе ; .
3). Если для некоторого , , то конец (в графе имеется отрицательный контур). Иначе перейти к п.4).
4). . Если , то конец ( - матрица весов кратчайших путей, определяемых с помощью матрицы ). С помощью матрицы кратчайший -путь определяется следующим образом:
,
Иначе перейти к п.2).
,
,
,
,
,
Найдем, например, с помощью матрицы кратчайший (2,1)-путь:
. Длина этого пути .
,
,
,
,
,
В графе есть контур отрицательного веса (1,2,3,4), .