ciência da computação grafos - paginas.unisul.brpaginas.unisul.br/max.pereira/grafos aula...

20
Ciência da Computação GRAFOS Aula 06 Algoritmo de Caminho Mínimo: Dijkstra Max Pereira

Upload: nguyenliem

Post on 25-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Ciência da Computação

GRAFOS

Aula 06 Algoritmo de Caminho Mínimo:

Dijkstra

Max Pereira

Page 2: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Publicado em 1959, o algoritmo resolve o problema do caminho mínimo em grafos orientados ou não, sob uma restrição: não pode haver arestas com pesos negativos. A partir de um vértice inicial (origem) o algoritmo calcula o custo mínimo deste vértice para todos os demais vértices.

Page 3: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Edsger W. Dijkstra (11-05-1930 / 06-08-2002)

Page 4: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Edsger W. Dijkstra (11-05-1930 / 06-08-2002)

“What is the shortest way to travel from Rotterdam to Groningen? It is the algorithm for the shortest path which I designed in about 20 minutes. One morning I was shopping with my young fiancée, and tired, we sat down on the café terrace to drink a cup of coffee and I was just thinking about whether I could do this, and I then designed the algorithm for the shortest path.”

Frana, Phil (August 2010). "An Interview with Edsger W. Dijkstra". Communications of the ACM. 53 (8): 41–47

Page 5: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Aplicação do algoritmo

Começamos com o vértice u. Os três vértices adjacentes a u são v, w e x. Atribui-se os custos (distâncias) para os vértices e como predecessor o vértice u. Acrescenta-se cada vértice a fila (PQ).

Na sequência examinamos os vértices adjacentes a x (vértice com a menor distância). Para cada vértice adjacente verifica-se se a distância a esse vértice através do x é menor do que a distância anterior.

Page 6: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Aplicação do algoritmo

No próximo passo verifica-se os vértices adjacentes ao vértice v. Nesse caso, não há mudanças.

Passamos para o vértice y. Aqui verifica-se que é mais “barato” chegar ao vértice w e z através de y. Assim, o ajuste das distâncias é realizado.

Page 7: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Aplicação do algoritmo

Checamos agora o vértice w. Não há mudanças.

Finalmente vamos para o vértice z. Aqui também não há mudanças. Dessa forma, a fila (PQ) é esvaziada e o algoritmo encerra.

Page 8: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Page 9: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

1) Definir o nó de origem, neste caso s, e incluir este nó em PERM.

Atribuir zero a sua distância (dist[s]) porque o custo de ir de s a s é

obviamente 0. Todos os outros nós i tem suas distâncias (dist[i])

inicializadas com um valor bastante grande ("infinito").

Page 10: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

2) A partir de s consulta-se os vértices adjacentes a ele, que no grafo

G são u e x. Para todos os vértices adjacentes, que chamaremos z,

calcula-se: Se dist[z] > dist[s] + peso(s, z)

dist[z] = dist[s] + peso(s, z)

path[z] = s

Page 11: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

3) Dentre todos os vértices não pertencentes a PERM escolhe-se

aquele com a menor distância. Neste caso é o vértice x, pois dist[x]

= 5.

Page 12: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

4) Então, inclui-se x em PERM e a partir de x consulta-se os vértices

adjacentes a ele que não estão em PERM, que no grafo G são u, v e y.

Para todos os vértices adjacentes, que chamaremos z, calcula-se:

Se dist[z] > dist[x] + peso(x, z)

dist[z] = dist[x] + peso(x, z)

path[z] = x

Page 13: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

5) Dentre todos os vértices não pertencentes a PERM escolhe-se

aquele com a menor distância. Neste caso é o vértice y, pois dist[y] =

7.

Page 14: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

6) Inclui-se então y em PERM e a partir de y consulta-se os vértices

adjacentes a ele que não estão em PERM, que no grafo G é apenas o

vértice v. Se dist[v] > dist[y] + peso(y, v)

dist[v] = dist[y] + peso(y, v)

path[v] = y

Page 15: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

7) Dentre todos os vértices não pertencentes a PERM escolhe-se

aquele com a menor distância. Neste caso é o vértice u, pois

dist[u] = 8.

Page 16: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

8) Inclui-se então u em PERM e a partir de u consulta-se os vértices

adjacentes a ele que não estão em PERM, que no grafo G é apenas o

vértice v. Se dist[v] > dist[u] + peso(u, v)

dist[v] = dist[u] + peso(u, v)

path[v] = u

Page 17: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

9) Dentre todos os vértices não pertencentes a PERM escolhe-se

aquele com a menor distância. Neste caso é o único vértice restante

v e dist[v] = 9.

Page 18: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

10) Por fim faz-se v pertencer a PERM. Neste ponto, todos os vértices

já estão em PERM e a busca é finalizada.

Page 19: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Algoritmo de Dijkstra

Ciência da Computação - GRAFOS

Aplicações

Google MapsIP routing

Page 20: Ciência da Computação GRAFOS - paginas.unisul.brpaginas.unisul.br/max.pereira/Grafos Aula 06.pdf · A partir de um vértice inicial (origem) o algoritmo calcula o custo ... Ciência

Trabalho 2

Ciência da Computação - GRAFOS

Implementar o algoritmo de Dijkstra:

Entrada: Tipo de grafo: não-orientado ou orientado Valorado - somente arestas Conjunto V Conjunto E Vértice inicial (origem)

Saída: As distâncias e os caminhos entre o vértice de origem e os demais

vértices