Escolar Documentos
Profissional Documentos
Cultura Documentos
PROBLEMA DO CAMINHO
MÍNIMO: DIJKSTRA
1 2 10 5 6 1 2 5 6
7 3 4 8 3 4 8
8 8
Comparando Prim x Kruskal
• Complexidade Computacional de Prim
𝐶 = 𝑂(𝑣 2 )
B= -1 para j = O
B= 1 para j = D
B = 0 para os demais nós
𝑥𝑖𝑗 ∈ 0, 1 ∀𝑖𝑗 ∈ 𝐸
Algoritmos de Caminho Mínimo
• Existem vários
• Genéricos
– Network Simplex
– Out-of-Kilter
• Específicos
– Label Setting
– Dijkstra (Label Correcting)
– Moore etc.
ALGORITMO DE DIJKSTRA
Algoritmo de Dijkstra
• Também conhecido como Label Correcting
• Funciona para redes direcionadas ou não
– Em geral trabalhamos com direções
• Quando o grafo não é direcionado...
12
1 2
1 2
12
Label Correcting
• Lida com redes com ciclos
• Complexidade no pior caso
𝐶 = 𝑂(𝑎 + 𝑣. log 𝑣)
Nó
Antecessor
Label Correcting Distância
Acumulada
• Etiquetas com 3 posições: Necessita
Cálculo?
• Lógica:
a) Marcar o nó Origem com antecessor O (ele mesmo),
distância 0 e necessidade de cálculo.
b) Escolha o nó com necessidade de cálculo com menor
distância acumulada. Esse é o nó atual.
c) Calcule a distância do nó atual para todos os
descendentes, preenchendo a etiqueta dos que
estão com a etiqueta vazia ou quando o caminho
atual for amis curto que o registrado na etiqueta.
Cada nó preenchido ou alterado deve ser marcado
para cálculo.
d) Marque que o nó atual não precisa mais de cálculo.
e) Voltar para b) até que nenhum nó esteja marcado
para cálculo.
Exemplo Label Correcting
12
5 2 5 12
1 2 3 6
7 3 4 8
8
Label Correcting
12 5
5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting
0
0 12 5
Sim 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting
0
0 12 5
Sim 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
15 6
Label Correcting
0
5
0 Sim
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
0
5
0 Sim
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4
O 10 D
4 14
4
7 8 5 12
3
0 15 6
7
Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4 3
10 15
O 4 Sim D
4 14
7 8 5 12
3
0 15 3
6
7 22
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5
- 5 2 16
4 3
10 15
O 4 Sim D
4 14
7 8 5 12
3
0 15 3
6
7 22
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 Sim
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- Sim
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 Sim
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 -
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
Label Correcting
2
0
17
5 -
0 -
0 12 5 4
- 5 2 16 29
4 3 -
10 15
O 4 - D
4 14
7 8 5 12
3
0 15 4
6
7 20
- -
EXERCÍCIOS
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
29 32
2 0 1
31 21
60 51
5 25
6 7
40 51
18
46
3
4
34
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1
0
- - Sim
29 32
2 0 1
31 21
60 51
5 25
- 6 7
- -
40 51
18
46
3
4
- 34
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 1
32 0
- Sim -
29 32
2 0 1
31 21
60 51
5 25 1
- 6 7 21
- Sim
40 51
18
46
3
4
- 34
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
1 1
32 0
- Sim -
29 32
2 0 1
31 21
60 51
7 25 1
5 6 7
- 46 21
Sim -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
Sim - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
Sim -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
Sim - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
3
4
- 34 7
67
Sim
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
Sim 46 21
- -
40 51
18
46
4 3
101 4
Sim 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
Sim 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
- 34 7
67
-
Exercício
1. Aplique o Algoritmo de Dijkstra (1 a 3)
0 1 1
61 32 0
- - -
29 32
2 0 1
31 21
60 51
0
92 7 25 1
5 6 7
- 46 21
- -
40 51
18
46
4 3
101 4
- 34 7
67
-
Exercício (para entrega!)
2. Aplique o Algoritmo de Dijkstra (1 a 9)
1
0
Sim
15 15
2 6 7
4 9
2
1 11 10 9
4 2
8 4 2
10
3 5 8
1 12
CONCLUSÕES
Resumo
• Caminho Mínimo: Modelagem Matemática
• Algoritmo de Dijkstra: rápido!
• Calcular todos os caminhos para uma origem!
• TAREFA: Exercícios Aula 4