TGR O problema do aminho mínimo Prof. Ricardo José Pfitscher ronograma O problema do caminho mínimo lgoritmo de ijkstra 1
O problema m um grafo simples, ponderado e conexo, com pesos positivos. Vimos com a matriz de alcançabilidade que existe um caminho entre quaisquer vértices x e y. Podem haver vários caminhos. omo encontrar o caminho com menor peso? Pesos normalmente representam distâncias, então denominou-se aminho mínimo O Problema ado o grafo: omo encontrar o menor caminho entre duas cidades? 2
O Problema m um grafo pequeno é uma tarefa simples, pode até ser resolvido de forma visual. em um grafo complexo? lgoritmos lguma idéia para resolvermos o problema? 3
lgoritmo de ijkstra Quem foi dsger ijkstra? Primeiro programador nos países baixos Primeiro compilador para LGOL 60 Introduziu o conceito de pilha na tradução de programas recursivos m 1972, recebeu o prêmio turing ontribuições Problema do caminho mínimo Sistema operacional TH Semáforos (coordenação de múltiplos processadores e programas) uto-estabilização, deadlock rvores de xtensão mínima lgoritmo de ijkstra apaz de encontrar o menor caminho entre dois vértices lgoritmo completo Se existe um menor caminho o algoritmo encontra Ótimo e ficiente Não há caminho menor que o encontrado Ressalva: Não consegue lidar com caminhos de pesos negativos 4
lgoritmo de ijkstra Funcionamento: Quer se saber a distância entre xe y Utiliza-se um conjunto IN, que contém inicialmente x IN contém os vértices para os quais já foram determinados os menores caminhos a partir de x Para cada vértice zfora de IN, mantemos a menor distância d[z]entre xe z, usando caminhos onde o único vértice que não esteja em IN seja z rmazenamos o vértice adjacente a z neste caminho s[z] lgoritmo de ijkstra Funcionamento omo fazer com que IN cresça? Qual o vértice deve ser adicionado a seguir? scolhemos o vértice fora de IN com menor distância d epois de escolhido, chamaremos ele de p, em IN Recalcular d para todos os vértices restantes fora de IN, pois pode haver um caminho menor a partir de x passando por p do que aqueles antes de termos p Se houver caminho mais curto, devemos atualizar s[z] de forma a indicar que p é o vértice adjacente a z pelo novo caminho mais curto.
Funcionamento lgoritmo de ijkstra Quando y for incluído em IN, este para de receber novos elementos. O Valor corrente de d[y]é a distância do menor caminho. seus vértices podem ser obtidos examinando: y, s[y] e s[s[y]], até que tenhamos voltado a x lgoritmo de ijkstra Fácil?? Simplificando: Para cada vértice fora de IN, a distancia d[v] é comparada com a distancia até ele percorrida pelo menor caminho já encontrado IN = v, v,..., v } IN = {..., v,...} i { 1 2 i se segundo marca s[ v ] com v p d[ v ] = min{ d[ v ], d[ v ] + valorresta[ v, v ]} i O menor caminho é: final, s[final], s[s[final]]],... i p p p i 6
lgoritmo de ijkstra IN = IN = {..., v,...} i { 1 2 v, v,..., v } i se segundo marca s[ v ] com v p d[ v ] = min{ d[ v ], d[ v ] + valorresta[ v, v ]} i i p p p i lgoritmo de ijkstra xercício: fazer na mão: Jaragua riciuma Garuva Massaranduba 7
lgoritmo de ijkstra - xercícios ) Menor caminho de para ) Menor caminho de para, considerando o número de saltos apenas lgoritmo de ijkstra - xercícios 8
Implementação Implementar o algoritmo de ijkstra O usuário deve entrar com: Tamanho da Matriz Matriz de adjacências Origem e destino O programa deve apontar: Qual o menor caminho para o destino Qual o custo deste menor caminho Restrição: Não usar listas ica: Utilize Vij para representar um vértice, onde i é linha e j é coluna lgoritmo de ellman-ford 9
lgoritmo de ellman-ford Uma alternativa para busca de caminho mínimo Vantagem: Pode ser utilizado em arestas com peso negativo em utilizado em grafos orientados lgoritmo de ellman-ford usca de caminho mínimo a partir de uma origem até todos os outros vértices do grafo m dijkstra a busca era de 1 para 1 Também denominado de Vetor de distância
lgoritmo de ellman-ford Princípio de Funcionamento: usca pelo número de saltos Procura todas as distâncias para os destinos com 1 salto Procura todas as distâncias para os destinos com 2 saltos té o máximo de n-1 saltos, onde n é o número de vértices Se existe um caminho não pode ser maior que n-1 lgoritmo de ellman-ford plicação: mplamente utilizado em roteadores Os roteadores mantém uma tabela atualizada com a menor distância conhecida até um destino, e qual caminho deve ser utilizado para se chegar lá. 11
lgoritmo de ellman-ford Roteadores lgoritmo de ellman-ford tualizando as tabelas de roteamento 12
lgoritmo de ellman-ford Utilizando o algoritmo onsiderar o grafo abaixo lgoritmo de ellman-ford laborando a tabela Saltos F G 1 X INF 2, 0,, INF INF 2 X 6, 1, 11, 1, 3, 12, 3 X 6,F 12, 11, 4, 9, 4,F 4 X,G 17, 11, 6,G 8,G, X 7,G 17,F 7, 9, 7,G 9, 6 X,F 17,F, 11,, 12,F 13
lgoritmo de ellman-ford om base na tabela, encontrar menor caminho de para Saltos F G 1 X INF 2, 0,, INF INF 2 X 6, 1, 11, 1, 3, 12, 3 X 6,F 12, 11, 4, 9, 4,F 4 X,G 17, 11, 6,G 8,G, X 7,G 17,F 7, 9, 7,G 9, usto do caminho: aminho: --F-G- 6 X,F 17,F, 11,, 12,F lgoritmo de ellman-ford --F-G- usto 14
xercícios procedure OutroaminhoMínimo{: matriz n X n; x: vértice; var d: vetor de inteiros; var s: vetor de vértices}; { lgoritmo de ellman-ford é uma matriz de adjacências modificada para um grafo simples, ponderado e conexo; x é um vértice no grafo; quando o procedimento termina, os vértices no caminho mínimo de x a y são y, s[y], s[s[y]],..., x; a distância deste caminho é d[y].} var z,p: vértice; {vértices temporários} t: vetor de inteiros; ontinua... 1
begin {inicia os vetores d e s estabelece os caminhos mínimos de comprimento 1 a partir de x } d[x]:=0; for todos os vértices z diferentes de x do begin d[z] := [x, z]; s[z]:=x; end; {encontra os caminhos mínimos de comprimentos 2, 3, etc.} for i: = 2 to n 1 do begin t := d; {copia o vetor d corrente em t} {altera t a fim de guardar os menores caminhos de comprimento i} for todos os vértices z diferentes de x do begin {encontra o caminho mínimo com uma aresta a mais} p : = vértice em G para o qual (d[p] + [p, z]) é mínimo t[z]:=d[p] +[p,z]; if not (p = z) then s[z] := p; end; d := t; {copia t de volta para d} end; {laço for} end; GM rvore Geradora Mínima 16
Problema Um dos problemas mais encontrados em relação ao projeto de redes é conectar todos os vértices de forma eficiente (computadores, telefones, etc) GM fornece uma solução econômica, que precise de pouco cabo, pouca tubulação, ou pouca quantidade de qualquer que seja o meio de conexão onceito árvore geradora mínima de um grafo não direcionado G=(V,) é um subgrafot =(V, ) de G T é conectado, sem ciclos com V =V cada aresta (i,j) em é associado um peso (i,j) Grafo Ponderado efinição formal: Uma árvore geradora de um grafo é uma árvore nãoenraizada cujo o conjunto de vértices coincide com o conjunto de vértices do grafo e cujas arestas são algumas das arestas do grafo 17
xemplo Para o grafo abaixo, qual seria a GM? 20 20 1 lgoritmos para encontrar a GM Veremos dois lgoritmos para encontrar a GM que tenha peso mínimo: lgoritmo de PRIM lgoritmo de KRUSKL omo detectar os ciclos? Para todos os nós do grafo executar (L é uma lista de nós): 1. L=[ ], todos os nós do grafo são desmarcados 2. Insira o nó atual em Le verifique se aparece duas vezes, se sim, o grafo tem um ciclo, e o algoritmo termina 3. che um arco desmarcado saindo do nó corrente i. Se houver, marque o arco e visite o nó, voltando ao passo 2 ii. Se não houver, retire o nó corrente de L e retorne ao nó anterior, voltando ao passo 3 i. Se for o primeiro, o algoritmo termina, e não há ciclos. 18
lgoritmo de PRIM IN: conjunto de vértices; //contém inicialmente vértice arbitrário z: vértice; //vértices a serem testados d: vetor de inteiros; //menor distância d[z] entre z e qualquer vértice em IN S: vetor de vértices; //vértices testados a cada interação início{ //escolhe vértice inicial arbitrário IN= {x} for todos os vértices z que não pertençam a IN { //avalia menor distância d[z] entre z e qualquer vértice em IN // Se não formar ciclo IN=z; //IN recebe novo vértice que não está em IN e cuja distância seja mínima S= {x,z}; } } //O algoritmo se encerra quando todos os vértices forem incluídos em IN formando uma árvore conexa e acíclica. lgoritmo de PRIM xemplo 20 20 1 IN: {}; S={{,}} 19
lgoritmo de PRIM xemplo 20 20 1 IN: {,}; S={{,},{,}} lgoritmo de PRIM xemplo 20 20 1 IN: {,,}; S={{,},{,},{,}} 20
lgoritmo de PRIM xemplo 20 20 1 IN: {,,,}; S={{,},{,},{,},{,}} lgoritmo de PRIM xemplo 20 20 1 IN: {,,,,}; S={{,},{,},{,},{,}} 21
lgoritmo de KRUSKL Inclui arestas na ordem de suas distâncias crescentes, sempre que elas puderem pertencer ao grafo mpates são resolvidos arbitrariamente; Restrição: Uma aresta não será incluída se sua inclusão resultar em um ciclo O algoritmo termina quando todos os grafos tiverem sido incorporados em uma estrutura conexa lgoritmo de KRUSKL Outro GM (: matriz nxn, T:coleção de arestas){ //lgoritmo de Kruskal para obtenção de uma GM //T inicialmente está vazia; ao fim, T=GM inicio { ordena as arestas de G de forma crescente; do{ if(próxima aresta na ordem não cria um ciclo) inclui a aresta em T; }while(t é conexo e contém todos os vértices de G) } 22
lgoritmo de KRUSKL xemplo 20 Ordem das arestas: (,) = (,) = (,) = (,) = (,) = 1 (,) = 20 (,) = 20 20 1 lgoritmo de KRUSKL xemplo Ordem das arestas: (,) = (,) = (,) = (,) = (,) = 1 (,) = 20 (,) = 20 GM: {},{},{},{},{} 23
lgoritmo de KRUSKL xemplo esempilha (,) Ordem das arestas: (,) = (,) = (,) = (,) = (,) = 1 (,) = 20 (,) = 20 GM: {},{},{},{},{} lgoritmo de KRUSKL xemplo Ordem das arestas: (,) = (,) = (,) = (,) = 1 (,) = 20 (,) = 20 esempilha (,) esempilha (,) GM: {},{,},{},{} 24
lgoritmo de KRUSKL xemplo Ordem das arestas: (,) = (,) = (,) = 1 (,) = 20 (,) = 20 esempilha (,) esempilha (,) esempilha (,) GM: {},{,},{,},{} lgoritmo de KRUSKL xemplo Ordem das arestas: (,) = (,) = 1 (,) = 20 (,) = 20 esempilha (,) esempilha (,) esempilha (,) esempilha (,) GM: {,},{,},{,},{} 2
lgoritmo de KRUSKL xemplo Ordem das arestas: (,) = 1 (,) = 20 (,) = 20 esempilha (,) esempilha (,) esempilha (,) esempilha (,) Obs: aso tivéssemos um ciclo, não iria desempilhar GM: {,},{,},{,},{,} PSO = 30 onclusões Utilização da árvore geradora mínima: Otimização de redes Telecomunicações onstrução de estradas Problema de escalonamento de tarefas 26
xercício: Rede óptica entre Tabas Os caciques da região de Tutuaçu pretendem integrar suas tribos à chamada aldeia global. primeira providência foi a distribuição de telefones celulares a todos os pajés. gora, planejam montar uma rede de fibra ótica interligando todas as tabas. sta empreitada requer que sejam abertas novas picadas na mata, passando por reservas de flora e fauna. onscientes da necessidade de preservar o máximo possível o meio ambiente, os caciques encomendaram um estudo do impacto ambiental do projeto. xercício: Rede óptica entre Tabas onsiderações: Os caciques conseguiram as informações do impacto ambiental causado pela construção dos ramos lguns ramos não foram considerados no estudo pois sua construção é impossível 6 13 6 12 1 27
xercício: Rede óptica entre Tabas Problema: omo determinar quais ramos devem ser construídos, possibilitando a comunicação entre todas as tabas e causando menor impacto ambiental Solução, gerar a GM: Utilize os dois algoritmos 6 13 6 12 1 xercício: Rede óptica entre Tabas Solução: plicando os conceitos, e os algoritmos devemos chegar no grafo abaixo Indicando quais ramos devem ser construídos 6 6 12 28
ibliografia GRSTING, Judith L. Fundamentos Matemáticos para a iência da omputação. Rio de Janeiro. 3ª d. omplementar: Outras aulas disponíveis na web 29