Teoria dos Grafos Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada antunes@ibilce.unesp.br, socorro@ibilce.unesp.br AULA Caminho mínimo - Algoritmo de Djskstra Preparado a partir do texto: Rangel, Socorro. Teoria do Grafos, Notas de aula, IBILCE, Unesp, 2002-2013.
Caminho Mínimo em Grafos
Introduçao Considere a rede: 2 d 2 c 9 7 s 15 4 a 3 35 16 6 b 21 5 t Teoria dos Grafos 3
Dado dois vértices nesta rede, queremos determinar o menor caminho entre eles. Uma primeira questão é como representar os valores associados às arestas neste grafo. Isto pode ser feito através da matriz de pesos. Seja D um digrafo simples cujas arestas possuem pesos associados, digamos, a cada aresta (v i,v j ) está associado um número real w ij 0 (que pode representar comprimento, distância, valor, etc). Vamos definir w ii = 0 para todo i e w ij = quando não existe uma aresta entre os vértices v i e v j. Assim a matriz de pesos é uma matriz n n definida como W = [w ij ], onde n é o número de vértices. Teoria dos Grafos 4
Exemplo Construir a matriz de pesos para a rede abaixo: 2 d 2 c 9 7 s 15 4 a 3 35 16 6 b 21 5 t Teoria dos Grafos 5
Observação 1. Em geral w ij w ji e w ij +w jk pode ser menor ou igual a w ik. Por exemplo, na rede anterior, w sd +w da = 9+4 15 = w sa. Teoria dos Grafos 6
Observação 2. Em geral w ij w ji e w ij +w jk pode ser menor ou igual a w ik. Por exemplo, na rede anterior, w sd +w da = 9+4 15 = w sa. O algoritmo que nós vamos ver foi proposto por Dijkstra em 1959 e é um dos mais eficientes até hoje. Vamos supor então que queremos encontrar o caminho mínimo entre s e t na rede acima. Teoria dos Grafos 6
Idéia do Algoritmo: Rotular os vértices do digrafo. A partir do vértice inicial s, proceder em direção ao vértice final t (seguindo as arestas orientadas) rotulando os vértices com as suas distâncias ao vértice s, medida até aquele momento. A cada estágio do algoritmo teremos vértices que possuem rótulos temporários e outros rótulos permanentes. O rótulo de um vértice v j é feito permanente quando este rótulo representa a menor distância de s até v j. Começamos associando rótulo permanente igual a zero para o vértice s, e um rótulo temporário igual a para os outros n 1 vértices do grafo. A cada iteração, um novo vértice recebe um rótulo permanente de acordo com as seguintes regras: Teoria dos Grafos 7
1. Cada vértice v j com um rótulo temporário, recebe um novo rótulo temporário dado por: min{rótulo de v j,(rótulo de v i )+w ij } onde v i é o vértice que recebeu rótulo permanente na iteração anterior e w ij é o valor da aresta entre o vértice v i e o vértice v j. 2. Encontre o menor valor entre os rótulos temporários. Este será o rótulo permanente do respectivo vértice. Em caso de empate selecione qualquer um dos candidatos e atribua rótulo permanente ao escolhido. Repetir 1 e 2 até que o vértice destino, t, receba um rótulo permanente. Teoria dos Grafos 8
Exemplo Vamos aplicar a ideia acima à rede abaixo: 2 d 2 c 9 7 s 15 4 a 3 35 16 6 b 21 5 t Teoria dos Grafos 9
Aplicação do algoritmo: Inicializaçao: rot(s) = 0 é permanente, rot(a) = rot(b) = rot(c) = rot(d) = rot(t) = são temporários it = 1 Regra 1 Novo rótulo Novo rot(a) = min{,0+w sa } = min{,15} = 15 Novo rot(b) = min{,0+w sb } = min{, } = Novo rot(c) = min{,0+w sc } = min{, } = Novo rot(d) = min{,0+w sd } = min{,9} = 9 Novo rot(t) = min{,0+w st } = min{, } = Regra 2 Rótulo permanente min{15,,,9, } = 9 rot(d) torna-se permanente Teoria dos Grafos 10
Aplicação do algoritmo cont.: it = 2 Regra 1 Novo rótulo Novo rot(a) = min{15,9+w da } = min{15,9+4} = 13 Novo rot(b) = min{,9+w db } = min{, } = Novo rot(c) = min{,9+w dc } = min{,9+2} = 11 Novo rot(t) = min{,9+w dt } = min{, } = Regra 2 Rótulo permanente min{13,, 11, } = 11 rot(c) torna-se permanente Teoria dos Grafos 11
Aplicação do algoritmo cont.: it = 3 Regra 1 Novo rótulo Novo rot(a) = min{13,11+w ca } = min{13,11+ } = 13 Novo rot(b) = min{,11+w cb } = min{,11+ } = Novo rot(t) = min{,11+w ct } = min{,11+7} = 18 Regra 2 Rótulo permanente min{13,, 18} = 13 rot(a) torna-se permanente Teoria dos Grafos 12
Aplicação do algoritmo cont.: it = 4 Regra 1 Novo rótulo Novo rot(b) = min{,13+w ab } = min{,13+35} = 48 Novo rot(t) = min{18,13+w at } = min{18,13+ } = 18 Regra 2 Rótulo permanente min{48, 18} = 18 rot(t) torna-se permanente Fim Teoria dos Grafos 13
Aplicação do algoritmo cont.: it = 4 Fim Regra 1 Novo rótulo Novo rot(b) = min{,13+w ab } = min{,13+35} = 48 Novo rot(t) = min{18,13+w at } = min{18,13+ } = 18 Regra 2 Rótulo permanente min{48, 18} = 18 rot(t) torna-se permanente Podemos parar pois o vértice destino, t, recebeu rótulo permanente. Assim o menor caminho entre s e t tem comprimento igual a 18. Como recuperar o caminho? A partir do vértice destino t, verificamos o vértice com rótulo permanente usado na obtenção do rótulo de t. No nosso exemplo, o vértice c. Repetimos o processo a partir de c até alcançar o vértice inicial s. Assim temos t, c, d, s. O caminho é obtido invertendo a ordem obtida: s, d, c, t. Teoria dos Grafos 13
Exemplo Rastrear o algoritmo de Dijkstra usando o digrafo com vértices s, a, b, c, d, t cuja matriz de pesos associada é: W = 0 7 4 9 7 7 0 1 6 4 1 0 3 9 3 0 1 3 7 1 0 5 6 3 5 0. Teoria dos Grafos 14
Observações 1. Outros Algoritmos para problemas de Caminho Mínimo em grafos podem ser encontrados por exemplo na página 283 de: [Otimização Combinatória e Programação Linear, M.C. Goldbarg e H.P.L. Luna, Ed. Campus, 2000]. 2. O algoritmo de Dijskstra funciona apenas se w ij 0 para todos i,j. Verifique este fato aplicando o algoritmo à seguinte rede para encontrar o menor caminho entre v 1 e v 3 : v 1 5 1 v 2 v 3 Teoria dos Grafos 15