Problema do menor Caminho - ppt carregar
PublicouEsther Trindade Alterado mais de 3 anos atrás
Apresentação em tema: "Problema do menor Caminho"— Transcrição da apresentação:
1 Problema do menor Caminho
Como encontrar o menor caminho em um grafo?
2 Imagine que uma transportadora decidiu alavancar as suas entregas e fez uma promoção de 50% em todas as entregas da cidade A até a cidade F. Para que ela não tenha prejuízo ela terá sempre que percorrer o menor caminho entre as cidades. Como fazer isso? C B F A E D
3 PROBLEMA DO MENOR CAMINHO
Obter Caminhos interligando Vértices de um Grafo, cujo comprimento (Custo) seja Mínimo. Implementações: Algoritmo de Dijkstra Aplicação: Redes de Computadores (Percurso entre Roteadores) Tráfego Urbano. Sistemas Rodoviários, Ferroviários e Aéreos, Importante para vários outros problemas
4 Algoritmo de Dijikstra
Problema dos caminhos mais curtos de origem (fonte) única: para um dado vértice, chamado fonte, em um grafo ponderado conectado, encontrar os caminhos mais curtos a todos os outros vértices Algoritmo de Dijkstra: melhor algoritmo conhecido aplicado a grafos com pesos não negativos
5 Encontra os caminhos mais curtos de acordo com a distância a uma dada fonte
Primeiro,encontra o caminho mais curto da fonte ao vértice mais próximo e assim por diante. Em geral, antes da i-ésima iteração iniciar, o algoritmo já encontrou os menores caminhos para os outros i-1 vértices próximos da fonte
6 Estes vértices, a fonte, e as arestas dos caminhos mais curtos formam uma subárvore Ti.
Como todos os pesos das arestas são não negativos, o vértice seguinte mais próximo da fonte pode ser encontrado dentre os vértices adjacentes aos vértices de Ti. Para identificar o i-ésimo vértice mais próximo, o algoritmo calcula, para cada vértice candidato u, a soma da distância ao vértice da árvore v mais próximo e o comprimento dv do caminho mais curto da fonte à v e então seleciona o vértice cuja soma seja a menor.
7 Cada vértice possui duas etiquetas:
Um valor numérico d que indica o comprimento do caminho mais curto da fonte ao vértice encontrado pelo algoritmo até o momento. Quando um vértice for adicionado a árvore, d indica o comprimento do caminho mais curto da fonte até o vértice. A outra etiqueta indica o nome do próximo ao último vértice neste caminho, i.e., o pai do vértice na árvore sendo construída.
8 Com estas etiquetas, encontrar o vértice mais próximo u
Com estas etiquetas, encontrar o vértice mais próximo u* seguinte torna-se uma tarefa simples que consiste em encontrar o vértice candidato com o menor valor de d. Após identificado o vértice u* a ser adicionado a árvore, as seguintes operações devem ser realizadas: Mover o vértice u* do vértice candidato para o conjunto dos vértices da árvore
9 Para cada vértice candidato remanescente u que estiver conectado a u
Para cada vértice candidato remanescente u que estiver conectado a u* por uma aresta de pesos(u*,u) tal que du* + w(u*,u) < dw, atualize as etiquetas de u por u* e du* + w(u*,u) respectivamente. Dijkstra compara comprimento de caminhos
10 Algoritmo de Dijkstra topologia da rede, custos dos enlaces conhecidos por todos os nós realizado através de "difusão do estado dos enlaces" todos os nós têm mesma info. calcula caminhos de menor custo de um nó ("origem") para todos os demais gera tabela de rotas para aquele nó iterativo: depois de k iterações, sabemos menor custo p/ k destinos Notação: c(i,j): custo do enlace do nó i ao nó j. custo é infinito se não forem vizinhos diretos D(V): valor corrente do custo do caminho da origem ao destino V p(V): nó antecessor no caminho da origem ao nó V N: conjunto de nós cujo caminho de menor custo já foi determinado
11 O algoritmo de Dijkstra
1 Inicialização: 2 N = {A} 3 para todos os nós V se V for adjacente ao nó A então D(V) = c(A,V) senão D(V) = infinito 7 8 Repete 9 determina W não contido em N tal que D(W) é o mínimo 10 adiciona W ao conjunto N 11 atualiza D(V) para todo V adjacente ao nó W e ainda não em N: D(V) = min( D(V), D(W) + c(W,V) ) 13 /* novo custo ao nó V ou é o custo velho a V ou o custo do menor caminho ao nó W, mais o custo de W a V */ 15 até que todos nós estejam em N
Passo N inicial A D(B),p(B) 2,A D(C),p(C) 5,A D(D),p(D) 1,A D(E),p(E) infinito D(F),p(F) infinito A E D C B F 2 1 3 5
Passo 1 N inicial A AD D(B),p(B) 2,A D(C),p(C) 5,A 4,D D(D),p(D) 1,A D(E),p(E) infinito 2,D D(F),p(F) infinito A E D C B F 2 1 3 5
Passo 1 2 N inicial A AD ADE D(B),p(B) 2,A D(C),p(C) 5,A 4,D 3,E D(D),p(D) 1,A D(E),p(E) infinito 2,D D(F),p(F) infinito 4,E A E D C B F 2 1 3 5
Passo 1 2 3 N inicial A AD ADE ADEB D(B),p(B) 2,A D(C),p(C) 5,A 4,D 3,E D(D),p(D) 1,A D(E),p(E) infinito 2,D D(F),p(F) infinito 4,E A E D C B F 2 1 3 5
16 Algoritmo de Dijkstra: exemplo
Passo 1 2 3 4 N inicial A AD ADE ADEB ADEBC D(B),p(B) 2,A D(C),p(C) 5,A 4,D 3,E D(D),p(D) 1,A D(E),p(E) infinito 2,D D(F),p(F) infinito 4,E A E D C B F 2 1 3 5
Passo 1 2 3 4 5 N inicial A AD ADE ADEB ADEBC ADEBCF D(B),p(B) 2,A D(C),p(C) 5,A 4,D 3,E D(D),p(D) 1,A D(E),p(E) infinito 2,D D(F),p(F) infinito 4,E A E D C B F 2 1 3 5
18 A eficiencia do algoritmo de Dijkstra depende das estruturas de dados usadas na implementação da fila de prioridade e do grafo Se forem uma matriz de pesos e um arranjo não ordenado respectivamente : O (|V|2) Se forem uma matriz de adjacência e um minheap: O(|E| log |V|)
19 Bibliografia http://pt.wikipedia.org/wiki/Algoritmo_de_Dijkstra
CORMEN,T.H.; LEISERSON, C.E. and RIVEST, R.L. Introduction to Algorithms. Cambridge: MIT Press, 1996.