Алгоритмы поиска путей на графах дорог

advertisement
Алгоритмы поиска путей на
графах дорог
СПбАУ, 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
Download