Вы находитесь на странице: 1из 14

Алгоритм Дейкстры и

Флойда
ПОДГОТОВИЛА: ЕРМАКОВА ЕКАТЕРИНА
ГРУППА: TI-208
Алгоритм Дейкстры

— алгоритм на графах, изобретённый нидерландским


ученым Э. Дейкстрой в 1959 году. Находит кратчайшее расстояние от
одной из вершин графа до всех остальных. Алгоритм работает только для
графов без рёбер отрицательного веса и широко применяется в
программировании и технологиях.
Алгоритм Дсйкстры позволяет определить не
только длину кратчайшего пути, но и
сам путь. Это достигается с помощью указателя,
который для каждой вершины из кратчайшего
пути указывает предыдущую вершину пути.
Алгоритм Дейкстры

Идея алгоритма следующая, сначала выберем путь до начальной вершины равным


нулю, и заносим эту вершину во множество уже выбранных, расстояние от которых до
оставшихся невыбранных вершин определено. На каждом следующем этапе находим
следующую невыбранную вершину, расстояние до которой наименьшее и соединённую
ребром с какой- нибудь вершиной из множества выбранных (это расстояние будет равно
расстоянию до уже выбранной вершины плюс длина ребра).
1 2 3
1 0 1 1
2 4 0 1
3 2 1 0

1 2` 3 1 2` 3` 1` 2` 3`
d ∞ 0 ∞ d 4 0 1 d 3 0 1
Обозначения

V — множество вершин графа


E — множество ребер графа
w[i,j] — вес (длина) ребра i,j
a — вершина, расстояния от которой ищутся
U — множество посещенных вершин
d[u] — по окончании работы алгоритма равно
длине кратчайшего пути из a до вершины u
p[u] — по окончании работы алгоритма содержит
кратчайший путь из a в u
Псевдокод

Присвоим d[a] ← 0, p[a] ← a


Для всех x€ V отличных от a;
Присвоим d[u] ← ∞
Пока v ∉ U
Пусть v ∉ U — вершина с минимальным d[v]
Для всех u ∉ U таких, что vu∈ E
Если d[u]>d[v]+w[vu], то
Изменим d[u] ← d[v]+w[vu]
Изменим p[u] ← p[v], u
Описание
В простейшей реализации для хранения чисел d[i] можно использовать массив
чисел, а для хранения принадлежности элемента множеству U — массив
булевых переменных.
В начале алгоритма расстояние для начальной вершины полагается равным
нулю, а все остальные расстояния заполняются большим положительным
числом (бо́льшим максимального возможного пути в графе). Массив флагов
заполняется нулями. Затем запускается основной цикл.
На каждом шаге цикла мы ищем вершину с минимальным расстоянием и
флагом равным нулю. Затем мы устанавливаем в ней флаг в 1 и проверяем все
соседние с ней вершины. Если в ней расстояние больше, чем сумма расстояния
до текущей вершины и длины ребра, то уменьшаем его. Цикл завершается когда
флаги всех вершин становятся равны 1, либо когда у всех вершин c флагом 0
d[i] = ∞. Последний случай возможен тогда и только тогда, когда граф G не
связан.
Алгоритм Флойда

—алгоритм для нахождения кратчайших расстояний между всеми вершинами


взвешенного ориентированного графа. Разработан в 1962 году Робертом Флойдом и
Стивеном Уоршеллом , хотя в 1959 году Бернард Рой опубликовал практически такой
же алгоритм, но это осталось незамеченным.
Алгоритм Флойда—Уоршолла
вычисляет минимальное расстояние между всеми
вершинами графа, используя матрицы и
рассматривая по этапам сначала 1-пути, затем 2-
пути и до n-путей включительно
(n — число вершин графа).
Алгоритм Флойда

Идея: Строится специальная матрица D, элементы которой – кратчайшие пути между


всевозможными парами вершин графа G. При определении кратчайшего пути
выбирается минимум из «прямого» расстояния между смежными вершинами v i и vj и
суммарного расстояния при проходе через дополнительную вершину. Затем – более
длинные пути и т.д.
Псевдокод

На каждом шаге алгоритм генерирует матрицу W, w_{ij}=d_{ij}^{n}. Матрица W содержит


длины кратчайших путей между всеми вершинами графа. Перед работой алгоритма матрица
W заполняется длинами рёбер графа (или запредельно большим M, если ребра нет).
for k = 1 to n
for i = 1 to n
for j = 1 to n
W[i][j] = min(W[i][j], W[i][k] + W[k][j])
Сравнение
Алгоритм Дейкстры Алгоритм
Флойда

• Работает медленно;
• Очень быстра я работа;
• Работает с дугами • Прост в реализации;
не отрицательного веса; • Работает с отрицательными
• Сложен в реализации; весами дуг;
• Ищет за один проход • Ищет за один проход сразу
только длины из одной вершины до
все длины кратчайших путей;
остальных;
• Сложность O(n2) • CложностьO(n3)ЛОЖНОСТЬ
O(N2)

Вам также может понравиться