Алгоритмы поиска путей на графах дорог СПбАУ, 12 мая 2011 Алгоритм Дейкстры 2 Алгоритм Дейкстры 3 Алгоритм Дейкстры Dijkstra(G,s) dist[1..|V|] = {∞, … ,∞} dist[s] = 0 Q = MakePriorityQueue(V, dist) while Q != 0 u = ExtractMin(Q) for all (u,v) E if dist[u] + w(u,v) < dist[v] dist[v] = dist[u] + w(u,v) DecreaseKey(Q,v) 4 Алгоритм Дейкстры Dijkstra(G,s,t) dist[1..|V|] = {∞, … ,∞} is_finished[1..|V|] = {false, …, false} dist[s] = 0 Q = MakePriorityQueue(s, dist[s]) while Q != 0 u = ExtractMin(Q) is_finished[u] = true if u = t return for all (u,v) E and (is_finished[v] = false) if dist[u] + w(u,v) < dist[v] dist[v] = dist[u] + w(u,v) DecreaseKey(Q,v) // or Insert 5 6 Bi-Dijkstra A 5 5 S T 2 2 4 B C 7 Направленный поиск 8 Направленный поиск A* - Дейкстра на графе с длинами На каждом шаге ищем вершину с минимальным значением следующей величины: Для корректность A* необходимо выполнение следующих свойств: 1) Эвристическая функция даёт нижнюю оценку длины пути до цели 2) Эвристика монотонна (выполняется неравенство треугольника) 9 Препроцессинг 10 ALT 11 ALT 12 Reach 13 Reach 14 Reach 15 Спасибо за внимание! 16