• O que é (informalmente)?
▫ Consiste na minimização do custo de travessia de um grafo entre dois nós (ou vértices)
▫ Custo este dado pela soma dos pesos de cada aresta percorrida
www.nakamura.eti.br/eduardo Análise de Algoritmos 2
• O que é (formalmente)?
▫ Dado um grafo ponderado G=(V,E)
▫ Função de custo w: ER
▫ Dado qualquer elemento v V, encontrar um caminho P de v para cada v' V tal que
▫ seja mínimo
pP
p w( )
• Soluciona o problema do caminho mais curto
▫ Grafo dirigido ou não dirigido com arestas de peso positivo,
▫ Tempo O(V log V + E)
• O algoritmo de Dijkstra assemelha-se ao BFS
www.nakamura.eti.br/eduardo Análise de Algoritmos 4
DIJKSTRA(G,w,s)
1: for each v V do 2: d[v] ;
3: pai[v] NIL;
4: end for 5: d[s] 0;
6: S ;
7: Q V;
8: while Q do
9: u vizinho mais próximo da raiz;
10: S S {u};
11: for each v Adj[u] do
12: if d[v] > d[u] + w(u,v) then 13: d[v] d[u] + w(u,v);
14: pai[v] u;
15: end if 16: end for 17: end while
4
6 5
-8 1
www.nakamura.eti.br/eduardo Análise de Algoritmos 6
6
1 2
4
3
10 5
s
2 9
7
A B
C D
6
1 2
4
3
10 5
s
2 9
7
0
A B
C D
www.nakamura.eti.br/eduardo Análise de Algoritmos 8
6
1 2
4
3
10 5
s
2 9
7
10 5
0
A B
C D
6
1 2
4
3
10 5
s
2 9
7
10 5
0
A B
C D
www.nakamura.eti.br/eduardo Análise de Algoritmos 10
6
1 2
4
3
10 5
s
2 9
7
14 7
8 5
0
A B
C D
6
1 2
4
3
10 5
s
2 9
7
14 7
8 5
0
A B
C D
www.nakamura.eti.br/eduardo Análise de Algoritmos 12
6
1 2
4
3
10 5
s
2 9
7
13 7
8 5
0
A B
C D
6
1 2
4
3
10 5
s
2 9
7
13 7
8 5
0
A B
C D
www.nakamura.eti.br/eduardo Análise de Algoritmos 14
6
1 2
4
3
10 5
s
2 9
7
9 7
8 5
0
A B
C D
6
1 2
4
3
10 5
s
2 9
7
9 7
8 5
0
A B
C D
• Execute o algoritmo de Dijkstra sobre o grafo do exemplo usando como raiz o vértice B, A e D.
• Faça a análise de complexidade do algoritmo de Dijkstra.
• Forneça um exemplo simples de um grafo com apenas 3 ou 4 nós, com aresta(s) negativa(s) para o qual o
algoritmo de Dijkstra gere uma resposta incorreta.
www.nakamura.eti.br/eduardo Análise de Algoritmos 16