caminho minimo.ppt [modo de compatibilidade] · resolvido de forma visual. e em um grafo complexo?...

29
10/10/2011 1 TGR –BCC O problema do Caminho mínimo Prof. Ricardo José Pfitscher Cronograma O problema do caminho mínimo Algoritmo de Dijkstra

Upload: duongnhu

Post on 08-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

10/10/2011

1

TGR – BCCO problema do Caminho mínimo

Prof. Ricardo José Pfitscher

Cronograma

• O problema do caminho mínimo

• Algoritmo de Dijkstra

10/10/2011

2

O problema

• Em 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.

• Como encontrar o caminho com menor peso?

• Pesos normalmente representam distâncias, então denominou-se “Caminho mínimo”

O Problema

• Dado o grafo:

– Como encontrar o menor caminho entre duas cidades?

10/10/2011

3

O Problema

• Em um grafo pequeno é uma tarefa simples, pode até ser resolvido de forma visual. E em um grafo complexo?

Algoritmos

• Alguma idéia para resolvermos o problema?

10/10/2011

4

Algoritmo de Dijkstra

• Quem foi Edsger Dijkstra?– Primeiro programador nos países baixos– Primeiro compilador para ALGOL 60– Introduziu o conceito de pilha na tradução de programas recursivos– Em 1972, recebeu o prêmio turing

• Contribuições– Problema do caminho mínimo– Sistema operacional THE– Semáforos (coordenação de múltiplos processadores e programas)– Auto-estabilização, deadlock– Arvores de Extensão mínima

Algoritmo de Dijkstra

• Capaz de encontrar o menor caminho entre dois vértices

• Algoritmo completo

– Se existe um menor caminho o algoritmo encontra

• Ótimo e Eficiente

– Não há caminho menor que o encontrado

• Ressalva:

– Não consegue lidar com caminhos de pesos negativos

10/10/2011

5

Algoritmo de Dijkstra

• Funcionamento:

– Quer se saber a distância entre x e 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 z fora de IN, mantemos a menor distância d[z] entre x e z, usando caminhos onde o único vértice que não esteja em IN seja z

– Armazenamos o vértice adjacente a z neste caminho s[z]

Algoritmo de Dijkstra

• Funcionamento

– Como fazer com que IN cresça? Qual o vértice deve ser adicionado a seguir?

• Escolhemos o vértice fora de IN com menor distância d

• Depois 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.

10/10/2011

6

Algoritmo de Dijkstra

• Funcionamento

– 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.

– E seus vértices podem ser obtidos examinando: y, s[y] e s[s[y]], até que tenhamos voltado a x

Algoritmo de Dijkstra

• 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

– O menor caminho é: final, s[final], s[s[final]]], ...

pi

ippii

i

p

vvs

vvavalorArestvdvdvd

vNI

vvvIN

com ][ marca segundo se

]},[][],[min{][

,...}{...,

},...,,{ 21

+=

=

=

10/10/2011

7

Algoritmo de Dijkstra

pi

ippii

i

p

vvs

vvavalorArestvdvdvd

vNI

vvvIN

com ][ marca segundo se

]},[][],[min{][

,...}{...,

},...,,{ 21

+=

=

=

Algoritmo de Dijkstra

• Exercício: fazer na mão:– Jaragua – Criciuma

– Garuva – Massaranduba

10/10/2011

8

Algoritmo de Dijkstra - Exercícios

A) Menor caminho de A para D

B) Menor caminho de A para D, considerando o número de saltos apenas

Algoritmo de Dijkstra - Exercícios

• C � D

• B � A

10/10/2011

9

Implementação

• Implementar o algoritmo de Dijkstra

• 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• Dica: Utilize Vij para representar um vértice, onde i é linha e j é coluna

Algoritmo de Bellman-Ford

10/10/2011

10

Algoritmo de Bellman-Ford

• Uma alternativa para busca de caminho mínimo

• Vantagem:

– Pode ser utilizado em arestas com peso negativo

• Bem utilizado em grafos orientados

Algoritmo de Bellman-Ford

• Busca de caminho mínimo a partir de uma origem até todos os outros vértices do grafo

– Em dijkstra a busca era de 1 para 1

• Também denominado de Vetor de distância

10/10/2011

11

Algoritmo de Bellman-Ford

• Princípio de Funcionamento:

– Busca 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

• …

• Até 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

Algoritmo de Bellman-Ford

• Aplicação:

– Amplamente 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á.

10/10/2011

12

Algoritmo de Bellman-Ford

• Roteadores

Algoritmo de Bellman-Ford

• Atualizando as tabelas de roteamento

10/10/2011

13

Algoritmo de Bellman-Ford

• Utilizando o algoritmo

• Considerar o grafo abaixo

Algoritmo de Bellman-Ford

• Elaborando a tabela

Saltos A B C D E F G

1 X INF 2,A 50,A 10,A INF INF

2 X 6,C 51,D 11,E 51,D 3,C 12,E

3 X 6,F 12,D 11,B 4,D 9,B 4,F

4 X 5,G 17,B 11,B 6,G 8,G 5,E

5 X 7,G 17,F 7,E 9,B 7,G 9,B

6 X 10,F 17,F 10,E 11,D 10,B 12,F

10/10/2011

14

Algoritmo de Bellman-Ford

• Com base na tabela, encontrar menor caminho de A para B

• Custo do caminho: 5

• Caminho: A-C-F-G-B

Saltos A B C D E F G

1 X INF 2,A 50,A 10,A INF INF

2 X 6,C 51,D 11,E 51,D 3,C 12,E

3 X 6,F 12,D 11,B 4,D 9,B 4,F

4 X 5,G 17,B 11,B 6,G 8,G 5,E

5 X 7,G 17,F 7,E 9,B 7,G 9,B

6 X 10,F 17,F 10,E 11,D 10,B 12,F

Algoritmo de Bellman-Ford

A-C-F-G-B

Custo � 5

10/10/2011

15

Exercícios

• C�D

• B�A

procedure OutroCaminhoMínimo{A: matriz n X n; x: vértice; var d: vetor de inteiros; var s: vetor de vértices};

{ Algoritmo de Bellman-Ford —A é 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;

Continua....

10/10/2011

16

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] := A[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] + A[p, z]) é mínimot[z]:=d[p] +A[p,z];

if not (p = z) then

s[z] := p;

end;

d := t; {copia t de volta para d}

end; {laço for}end;

AGM – Arvore Geradora Mínima

10/10/2011

17

Problema

• Um dos problemas mais encontrados em relação ao projeto de redes é conectar todos os vértices de forma eficiente (computadores, telefones, etc)

• A AGM 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

Conceito

• A árvore geradora mínima de um grafo não direcionado G=(V,A) é um subgrafo T´=(V’,A’) de G– T é conectado, sem ciclos com V’=V– A cada aresta (i,j) em A é associado um peso C(i,j)

• Grafo Ponderado

• Definição formal:“Uma árvore geradora de um grafo é uma árvore não-enraizada 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”

10/10/2011

18

Exemplo

• Para o grafo abaixo, qual seria a AGM?

A

B C

ED

20 10

5

515

10

20

A

B C

ED

10

5

5

10

Algoritmos para encontrar a AGM

• Veremos dois Algoritmos para encontrar a AGM que tenha peso mínimo:– Algoritmo de PRIM– Algoritmo de KRUSKAL

• Como 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 desmarcados2. Insira o nó atual em L e verifique se aparece duas vezes, se sim,

o grafo tem um ciclo, e o algoritmo termina3. Ache um arco desmarcado saindo do nó corrente

i. Se houver, marque o arco e visite o nó, voltando ao passo 2ii. Se não houver, retire o nó corrente de L e retorne ao nó anterior,

voltando ao passo 3i. Se for o primeiro, o algoritmo termina, e não há ciclos.

10/10/2011

19

Algoritmo de PRIM

IN: conjunto de vértices; //contém inicialmente vértice arbitrárioz: vértice; //vértices a serem testadosd: vetor de inteiros; //menor distância d[z] entre z e qualquer vértice em INS: vetor de vértices; //vértices testados a cada interaçãoinício{

//escolhe vértice inicial arbitrárioIN= {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 cicloIN=z; //IN recebe novo vértice que não está em IN e cuja distância seja mínimaS= {x,z};

}

} //O algoritmo se encerra quando todos os vértices forem incluídos em IN formando uma árvore conexa e acíclica.

Algoritmo de PRIM

• ExemploA

B C

ED

20 10

5

515

10

20

IN: {A}; S={{A,C}}

10/10/2011

20

Algoritmo de PRIM

• ExemploA

B C

ED

20 10

5

515

10

20

IN: {A,C}; S={{A,C},{C,B}}

Algoritmo de PRIM

• ExemploA

B C

ED

20 10

5

515

10

20

IN: {A,C,B}; S={{A,C},{C,B},{B,E}}

10/10/2011

21

Algoritmo de PRIM

• ExemploA

B C

ED

20 10

5

5 15

10

20

IN: {A,C,B,E}; S={{A,C},{C,B},{B,E},{E,D}}

Algoritmo de PRIM

• ExemploA

B C

ED

20 10

5

5 15

10

20

IN: {A,C,B,E,D}; S={{A,C},{C,B},{B,E},{E,D}}

10/10/2011

22

Algoritmo de KRUSKAL

• Inclui arestas na ordem de suas distâncias crescentes, sempre que elas puderem pertencer ao grafo

• Empates 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

Algoritmo de KRUSKAL

Outro AGM (A: matriz nxn, T:coleção de arestas){//Algoritmo de Kruskal para obtenção de uma AGM//T inicialmente está vazia; ao fim, T=AGMinicio {

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)

}

10/10/2011

23

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

20 10

5

515

10

20

Ordem das arestas:

(B,C) = 5

(B,E) = 5

(A,C) = 10

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(B,C) = 5

(B,E) = 5

(A,C) = 10

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A},{B},{C},{D},{E}

10/10/2011

24

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(B,C) = 5

(B,E) = 5

(A,C) = 10

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A},{B},{C},{D},{E}

Desempilha (B,C)

5

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(B,E) = 5

(A,C) = 10

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A},{B,C},{D},{E}

Desempilha (B,C)

Desempilha (B,E)

5

5

10/10/2011

25

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(A,C) = 10

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A},{B,C},{B,E},{D}

Desempilha (B,C)

Desempilha (B,E)

Desempilha (A,C)

5

5

10

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(D,E) = 10

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A,C},{B,C},{B,E},{D}

Desempilha (B,C)

Desempilha (B,E)

Desempilha (A,C)

Desempilha (D,E)

5

5

10

10

10/10/2011

26

Algoritmo de KRUSKAL

• Exemplo

A

B C

ED

Ordem das arestas:

(C,E) = 15

(A,B) = 20

(B,D) = 20

AGM: {A,C},{B,C},{B,E},{D,E}

Desempilha (B,C)

Desempilha (B,E)

Desempilha (A,C)

Desempilha (D,E)

5

5

10

10

PESO = 30

Obs: Caso

tivéssemos um

ciclo, não iria

desempilhar

Conclusões

• Utilização da árvore geradora mínima:

– Otimização de redes

– Telecomunicações

– Construção de estradas

– Problema de escalonamento de tarefas

10/10/2011

27

Exercício: Rede óptica entre Tabas

Os caciques da região de Tutuaçu pretendemintegrar suas tribos à chamada “aldeia global”. Aprimeira providência foi a distribuição de telefonescelulares a todos os pajés. Agora, planejam montaruma rede de fibra ótica interligando todas as tabas.Esta empreitada requer que sejam abertas novaspicadas na mata, passando por reservas de flora efauna. Conscientes da necessidade de preservar omáximo possível o meio ambiente, os caciquesencomendaram um estudo do impacto ambientaldo projeto.

Exercício: Rede óptica entre Tabas

• Considerações:– Os caciques conseguiram as informações do impacto

ambiental causado pela construção dos ramos

– Alguns ramos não foram considerados no estudo poissua construção é impossível

136

12

6

15

5

D

C B

A

E

10/10/2011

28

Exercício: Rede óptica entre Tabas

• Problema:– Como determinar quais ramos devem ser construídos,

possibilitando a comunicação entre todas as tabas e causando menor impacto ambiental

• Solução, gerar a AGM: Utilize os dois algoritmos

136

12

6

15

5

D

C B

A

E

Exercício: Rede óptica entre Tabas

• Solução:– Aplicando os conceitos, e os algoritmos devemos

chegar no grafo abaixo– Indicando quais ramos devem ser construídos

6

12

6 5

D

C B

A

E

10/10/2011

29

Bibliografia

• GERSTING, Judith L. Fundamentos Matemáticos para a Ciência da Computação. Rio de Janeiro. 3ª Ed.

• Complementar:

– Outras aulas disponíveis na web