Professional Documents
Culture Documents
2
0
2 1
5
3 1 3
5
1
Algoritmo de Dijkstra
Encontra o caminho mnimo de origem nica
Caractersticas
Funciona para grafos ponderados
Apenas para arestas com peso positivo
Algoritmo de Dijkstra
Relembrando o algoritmo...
Algoritmo de Dijkstra
Estruturas necessrias
Algoritmo de Dijkstra
Algoritmo de Dijkstra
Vrtice inicial
Funo de peso
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{1, 2, 3, 4, 5, 6}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{1, 2, 3, 4, 5, 6}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1}
0
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
NULL
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
NULL
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
NULL
NULL
NULL
NULL
12
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{2, 3, 4, 5, 6} {1} 1
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{3, 4, 5, 6} {1} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
12
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
1
9
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
NULL
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
NULL
NULL
NULL
11
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
NULL
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
NULL
NULL
15
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{3, 4, 5, 6} {1, 2} 2
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{4, 5, 6} {1, 2} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
15
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
2
13
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{4, 5, 6} {1, 2, 3} 3
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{5, 6} {1, 2, 3} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
NULL
32
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{5, 6} {1, 2, 3, 4} 4
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{6} {1, 2, 3, 4} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
32
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
4
28
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{6} {1, 2, 3, 4, 5} 5
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{} {1, 2, 3, 4, 5} 6
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{} {1, 2, 3, 4, 5, 6} 6
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{} {1, 2, 3, 4, 5, 6} 6
Simulao
8 1 12 3 4 5
2
1
4 7 5
21 6 15
NULL
1
8
2
9
2
11
3
13
5
28
{} {1, 2, 3, 4, 5, 6} FIM! 6
Implementao
Estruturas de dados considerada
Lista de adjacncia com pesos nos ns
v0 v1 v2 v3 v3 v3 v0 v0 v2
NULL NULL
v3 v1
NULL
v2
NULL
H?! heap!?
Caractersticas dos heaps (rvores especiais):
Se B filho de A, ento valor(B) > valor(A) Implementaes de fila de prioridade
Heap Binrio
Implementaes de min-heap ou max-heap
Implementado pela STL priority_queue do C++ Complexidade:
Insero
O(log n)
Remoo do mnimo
O(log n)
Heap de Fibonacci
Composto por vrias rvores enraizadas Cada n x possui como apontadores:
p[x] para seu pai child[x] para qualquer um de seus filhos left[x] e right[x] para seus irmo
Fila circular duplamente encadeada No ns raiz, left[x] e right[x] apontam para os ns razes vizinhos.
O(log n)
Implementao: Complexidade
Estruturas de Dados Consideradas
Heap Binrio INSERO REMOVE-MIN O(log n) O(log n) Vetor Esttico O(1) O(n) Heap de Fibonacci O(1) O(log n)
Tipo de grafos
Grafo Genrico Heap Binrio Vetor Esttico Heap de Fibonacci O((v + e) log v) O(v) O(e + v log v) Grafo Denso e v(v-1)/2 = O(v) O(v log v) O(v) O(v + v log v) = O(v) Grafo Esparso e v-1 = O(v) O(v log v) O(v) O(v + v log v) = O(v log v)
Implementao
Linguagem
C++
Bateria de Testes
Grafos
Denso Esparso Completo
Nmero de vrtices variando entre 50 e 5000 (de 50 em 50 com um total de 300 amostras)
Testes
Esparso (5,4 Mb)
Testes
Esparso (5,4 Mb)
Testes
Esparso (5,4 Mb)
Testes
Esparso (5,4 Mb)
~9Gb de Grafos!!
Concluso