2ª Reunião do Grupo de
Estudos
Relator: Danilo M Lage
Contestador: João Eduardo Maeda
Edsger Wybe Dijkstra
11 Maio 1930
6 Agosto 2002
Roterdã, Holanda
Nuenen, Holanda
• Cientista da Computação
• Contribuições:
– Algoritmos
– Linguagem de Programação
• ALGOL 60
– Sistema Operacional
• THE
– Processamento Distribuído
Algoritmo de Dijkstra
• Resolução do caminho de menor comprimento
• Descrição dos Problemas:
– 1º Problema:
• Construir a árvore de menor comprimento total entre todos
os nós de um grafo.
– 2º Problema:
• Encontrar o caminho de menor comprimento total entre dois
determinados nós de um grafo.
Resolução
1º Problema
• Considere 5 conjuntos:
– 3 conjuntos de Ramos:
I
II
III
Ramos em ordem de visitação
Ramos em potencial de pertencerem ao I
Ramos ainda não visitados ou rejeitados
– 2 conjuntos de Nós:
A
B
Conjunto de Nós em ordem de visitação
Conjunto de Nós ainda não visitados
Resolução
1º Problema
• Assertiva de Entrada:
– Um nó arbitrário pertencente ao grafo
– Movê-lo de B para A
– Adiciona seus ramos de conexão a II
• 1º Passo:
– Mover o ramo de menor distância de II para I
– Adicionar a A o nó conectado a esse ramo
– Vá para 2º passo
• 2º Passo:
– Considerando os ramos conectados ao nó recém adicionado a A que
liguem a nós pertencentes a B:
• Se o ramo em consideração for maior do que seus correspondentes,
adicione-o a III (descarte-o)
• Caso contrário, adicione-o a II
– Repita o passo 1 se B e II não sejam vazios.
• Resultado:
– O conjunto I possui a árvore requerida
Exemplo
1º Problema
••
1
2
d
6
3
2
c
3
2
–
–
–
–
–
–
Um nó arbitrário pertencente ao grafo
Mover o ramo
Adicionar
os ramos
de menor
a II distância de II
Movê-lo de B para A
para
I 1º Passo se B e II não vazios
Repita
Adiciona
seus ramos de conexão a II
Adicionar a A o nó conectado a esse ramo
A
a
0
b
1
d
2
e
3
c
4
B
a
b
c
d
e
b
a
Assertiva
1º Passo: de Entrada:
2º
1
ee
I
II
III
ab ad be bc
ab ac ad bc be
1 6 2 4 3
ac dc de cb ce cd
6 4 5 7 5 6
Resolução
2º Problema
• Considere 6 conjuntos:
– 3 conjuntos de Ramos:
I
II
III
Ramos em ordem de visitação
Ramos em potencial de pertencerem ao I
Ramos ainda não visitados ou rejeitados
– 3 conjuntos de Nós:
A
B
C
Nós em ordem de visitação
Nós anteriores aos pertencentes a A
Nós ainda não visitados
Resolução
2º Problema
• Assertiva de Entrada:
– Dois nós arbitrários pertencentes ao grafo
– Mover o nó de partida de C para A
• 1º Passo:
– Investigar todos os ramos em III que partam do nó adicionado em A
– Caso o nó de destino não pertença a B, mover o ramo de menor
distância conectando ambos nós para II e o nó de destino para B
– Caso o nó de destino pertença a B e seja de menor distância que seu
correspondente em II, substituí-lo
– Caso a distância do ramo seja maior que seu correspondente, rejeitá-lo
• 2º Passo:
–
–
–
–
Para cada nó em B, investigar seu peso em relação ao nó de partida
Mover o nó com menor distância de B para A
Mover o ramo correspondente a esse nó de II para I
Repetir o passo 1 até que o nó de chegada esteja contido em A
• Resultado:
– O caminho é encontrado seguindo os nós do conjunto A
Exemplo
2º Problema
• Partir de “a” para “e”
1
b
a
2
d
6
3
2
c
3
A
a
b
B
b
1
e
3
C
a
b
2
e
c
d
e
1
ee
I
ab be
II
ab be
1 2
III
ab ac ad bc be
1 6 2 3 2
Artigo Base
• Linguagem matemática, porém, mais próxima da computacional
• Resolução de um gargalo computacional do algoritmo de Dijkstra
• Utilização de árvore de Fibonacci
• Ampla aplicabilidade desse método
Artigo Base
Algoritmo Original
– Mesmo algoritmo já apresentado
– Possui um gargalo!!!
Legenda:
V = conjunto de todos os nós do grafo
S = conjunto dos nós visitados
n = número de nós
s = nó de partida
v = nó vizinho
ui = nó da iteração i
l(.) = peso de um nó (distância acumulada)
Artigo Base
Algoritmo Proposto
Legenda:
l(.) = lista ordenada de pesos dos nós
highiv = posição do maior peso da lista
lowi = posição do menor peso da lista
Artigo Base
Melhoria da Implementação
Artigo Base
Resultados
Experimento 2:
1:
- Nós ligados
-2
1 Ramos
Ramo aleatório
aleatórios
por nó:
i+ji1
i +ji2
ji1
rand[2,3...30]
[2,3...30]
i rand
- Dmax
ji2 =rand
4 [2,3...20]
- Dmax = 6
Legenda:
T = nº associado ao custo
computacional para as
adições e comparações;
Dmax = maior nº de ramos
incidentes em um nó;
n = nº total de nós;
m = nº total de ramos.
PERGUNTAS???
Exemplo
6
5
5
5
3
2
2
6
4
4
3
3
4
5
3
5
3
4
5
4
3
5
5
2
3
4
4 3
3
4
6
3
4
3
3
1
A ciência não estuda ferramentas,
mas o que fazemos e o que descobrimos
com elas.
E. W. Dijkstra
Download

Dijkstra