A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Celso C. Ribeiro Caroline T. Rocha

Apresentações semelhantes


Apresentação em tema: "Celso C. Ribeiro Caroline T. Rocha"— Transcrição da apresentação:

1 Celso C. Ribeiro Caroline T. Rocha
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha

2 PARTE 6: Caminhamento em Grafos
Algoritmos em Grafos

3 Caminhamento em Grafos
Dados: G = (V,E) V = {1, 2, ..., n} conjunto de nós E = { (u1,v1), ..., (um,vm)} conjunto de arestas Representação por listas de adjacências 1 2 3 4 5 5 3 1 2 4 Algoritmos em Grafos

4 Caminhamento em Grafos
Caminhar/percorrer um grafo: visitar todos os nós e arestas BUSCA EM PROFUNDIDADE Enquanto for possível, aprofundar-se no grafo. Quando não for mais possível, recuar. 8 9 1 5 4 2 6 3 7 10 2 3 10 1 10º 9 4 6 7 5 8 Algoritmos em Grafos

5 Caminhamento em Grafos
1 4 6 5 7 8 3 2 10 9 8 9 1 5 4 2 6 3 7 10 2 3 10 1 10º 9 4 6 7 5 8 Algoritmos em Grafos

6 Caminhamento em Grafos
A ordem em que os nós e arestas são visitados depende: do nó inicial da ordem em que os nós e as arestas aparecem na estrutura de dados Algoritmos em Grafos

7 Caminhamento em Grafos
Algoritmo recursivo para busca a partir de um nó Procedimento PROF(nó v) visitado(v)  sim Para cada nó w adjacente a v faça Se visitado(w) = não então PROF(w) fim-para Fim Algoritmos em Grafos

8 Caminhamento em Grafos
Exemplo: 1 D A E B C F G H A A B C D E F G H X X 2 7 B C X X D E F G 3 X 5 6 8 X X H 4 X não visitado visitado Algoritmos em Grafos

9 Caminhamento em Grafos
Exemplo: A B E F D H C G 1 D A E B C F G H A 2 7 B C D E F G 3 5 6 8 H 4 Árvore de busca em profundidade (pilha) Algoritmos em Grafos

10 Caminhamento em Grafos
Algoritmo de busca em profundidade Procedimento BUSCA-PROF Para i = 1,...,n faça visitado(i)  não fim-para Se visitado(i) = não então PROF(i) Fim Algoritmos em Grafos

11 Caminhamento em Grafos
Exemplo: 7 1 11 8 2 3 1 7 5 6 4 11 9 14 12 10 13 1 2 11 6 8 7 8 2 3 10 14 9 4 9 12 6 3 10 5 5 13 4 13 12 14 Algoritmos em Grafos

12 Caminhamento em Grafos
Aplicações de busca em profundidade, grafo G=(V,E): G é acíclico? G é conexo? G é bipartido? G é planar? Quais são as componentes conexas de G? Quais são as componentes biconexas de G? Quais são os pontos de articulação de G? Algoritmos em Grafos

13 Caminhamento em Grafos
Algoritmo para encontrar as componentes conexas Procedimento COMPONENTES-CONEXAS Para i = 1,...,n faça visitado(i)  0 fim-para componente  0 Se visitado(i) = 0 então componente  componente + 1 PROF(i, componente) fim-se Fim Algoritmos em Grafos

14 Caminhamento em Grafos
Algoritmo para encontrar as componentes conexas Procedimento PROF(v, marca) visitado(v)  marca Para cada nó w adjacente a v faça Se visitado(w) = 0 então PROF(w, marca) fim-se fim-para Fim Algoritmos em Grafos

15 Caminhamento em Grafos
Exemplo: Problema do mosaico 4 5 3 8 2 7 1 6 Novas configurações (mosaicos) são obtidas através do movimento de um elemento para a posição vazia. Quantos e quais mosaicos intermediários existem entre dois mosaicos específicos? 4 5 3 8 2 7 1 6 1 2 3 4 5 7 6 8 Algoritmos em Grafos

16 Caminhamento em Grafos
4 6 2 7 5 1 3 8 4 5 6 7 2 1 3 8 4 5 6 2 7 1 3 8 4 5 6 2 7 3 1 8 4 5 6 2 7 1 3 8 4 5 6 2 7 1 8 3 4 5 6 2 1 7 3 8 1 2 3 4 5 6 8 7 ? Algoritmos em Grafos

17 Caminhamento em Grafos
1 7 ■ 5 Busca em profundidade 2 NÓ INICIAL 18 ■ 7 5 1 ■ 4 7 5 ■ 3 19 28 ■ 6 4 ■ 1 4 2 ■ 3 1 4 ■ 4 8 20 24 29 ■ 8 3 6 ■ 4 ■ 8 3 ■ 6 5 ■ 2 3 2 3 ■ 5 9 12 15 21 25 30 8 ■ 3 2 ■ 3 6 4 ■ 1 ■ 5 8 ■ 3 6 ■ 5 ■ 8 4 NÓ ALVO 6 7 10 11 13 14 16 17 22 23 26 27 31 8 3 ■ 2 ■ 4 ■ 2 3 2 3 ■ 2 8 ■ 1 7 ■ ■ 1 5 1 5 ■ 8 3 ■ 2 ■ 4 7 ■ 4 6 5 ■ 8 ■ 4 ■ 6 5 Algoritmos em Grafos

18 Caminhamento em Grafos
BUSCA EM AMPLITUDE Enquanto for possível, examinar todos os nós à mesma distância do nó inicial. Quando não for mais possível, aprofundar. 5 6 8 9 1 5 4 2 6 3 7 10 1 2 9 3 10 1 2 9 4 7 6 4 10 7 5 3 8 8 Algoritmos em Grafos

19 Caminhamento em Grafos
D A E B C F G Exemplo: Árvore de busca em profundidade (pilha) Árvore de busca em amplitude (fila) B C A F G D E D E A F G C B Algoritmos em Grafos

20 Caminhamento em Grafos
Algoritmo de busca em amplitude Procedimento BUSCA-AMPL(v) visitado(v)  sim Colocar v em uma fila Enquanto fila não vazia faça w  retirar o elemento da frente da fila Para cada vértice i adjacente a w faça Se visitado(i) = não então visitado(i)  sim Colocar i no final da fila fim-se fim-para fim-enquanto Fim Algoritmos em Grafos

21 Caminhamento em Grafos
Exemplo: A B C D E F G H 1 D A E B C F G H A 2 3 B C D E F G 4 5 6 7 H 8 Fila w = G H F B D E A C não visitado visitado F G H B C A E D E C D B G F D F E C D E Algoritmos em Grafos

22 Caminhamento em Grafos
Exemplo: D A E B C F G H 1 D A E B C F G H A 2 3 B C D E F G 4 5 6 7 H 8 Árvore de busca em amplitude (fila) Algoritmos em Grafos

23 Caminhamento em Grafos
1 2 8 3 1 6 4 7 ■ 5 Busca em amplitude Exemplo do mosaico: 2 NÓ INICIAL 3 4 2 8 3 1 6 4 ■ 7 5 2 8 3 1 ■ 4 7 6 5 2 8 3 1 6 4 7 5 ■ 5 6 7 8 9 2 8 3 ■ 6 4 1 7 5 2 8 3 ■ 1 4 7 6 5 2 ■ 3 1 8 4 7 6 5 2 8 3 1 4 ■ 7 6 5 2 8 3 1 4 ■ 7 6 5 10 11 12 13 14 15 16 17 18 19 ■ 8 3 2 6 4 1 7 5 2 8 3 6 ■ 4 1 7 5 ■ 8 3 2 1 4 7 6 5 2 8 3 7 1 4 ■ 6 5 ■ 2 3 1 8 4 7 6 5 2 3 ■ 1 8 4 7 6 5 2 8 ■ 1 4 3 7 6 5 2 8 3 1 4 5 7 6 ■ 2 8 3 1 ■ 6 7 5 4 2 8 ■ 1 6 3 7 5 4 20 21 22 23 24 25 26 8 ■ 3 2 6 4 1 7 5 2 ■ 3 6 8 4 1 7 5 2 8 3 6 4 ■ 1 7 5 2 8 3 6 7 4 1 ■ 5 8 ■ 3 2 1 4 7 6 5 2 8 3 7 1 4 6 ■ 5 1 2 3 ■ 8 4 7 6 5 2 3 4 1 8 ■ 7 6 5 2 ■ 8 1 4 3 7 6 5 2 8 3 1 4 5 7 ■ 6 2 8 3 ■ 1 6 7 5 4 2 ■ 3 1 8 6 7 5 4 2 8 3 1 5 6 7 ■ 4 2 ■ 8 1 6 3 7 5 4 NÓ ALVO 27 8 3 ■ 2 6 4 1 7 5 8 6 3 2 ■ 4 1 7 5 ■ 2 3 6 8 4 1 7 5 2 3 ■ 6 8 4 1 7 5 2 8 ■ 6 4 3 1 7 5 2 8 3 6 4 5 1 7 ■ 2 8 3 6 7 4 ■ 1 5 2 8 3 6 7 4 1 5 ■ 8 3 ■ 2 1 4 7 6 5 8 1 3 2 ■ 4 7 6 5 2 8 3 7 ■ 4 6 1 5 2 8 3 7 1 4 6 5 ■ 1 2 3 8 ■ 4 7 6 5 1 2 3 7 8 4 ■ 6 5 Algoritmos em Grafos

24 Caminhamento em Grafos
Algoritmo de Dijkstra: Caminho mais curto do nó 1 (inicial) ao nó n (final) Grafo G = (V,E) distâncias cij  0 Passo 0: (1)  0, (i)  +,  i = 2,...,n Passo 1: Obter i  V tal que (i) = minjV (j) Passo 2: Se i = n, então terminar Passo 3: V  V – {i} Passo 4: Atualizações: (j)  min{(j), (i)+cij}, j  +(i) Passo 5: Voltar ao passo 1 Algoritmos em Grafos

25 Caminhamento em Grafos
Suponha-se que exista um oráculo que, para cada nó, estima o comprimento h* do caminho mais curto deste nó até o nó final. *(i) 1 i n i h*(i) Valor do caminho mais curto de 1 a i Valor do caminho mais curto de i a n Qual é a interpretação de *(i) + h*(i) ? Caminho mais curto de 1 a n passando pelo nó i Algoritmos em Grafos

26 Caminhamento em Grafos
 = 2  =  5 3 1 2 5 3 6 4 8 7  = 4  =   = 0 5 2  = 5  =  5  = 3  =   = 3  =  h*(j)  = 5  =   = 1  =  4 3 Caminho mais curto de 1 a 8: aplicando Dijkstra 5 (1  3  4  8) O que acontece se no passo 1 escolhermos (i) = minjN{ (j) + h*(j) } ? Algoritmos em Grafos

27 Caminhamento em Grafos
 = 2  =  7 7 1 2 5 3 6 4 8 7  = 4  =  1  = 0 5 8 5  = 5  =  5  = 3  =   = 3  =  (j) + h*(j)  = 5  =   = 1  =  5 8 Oráculo: h*(1) = 5 h*(2) = 5 h*(3) = 4 h*(4) = 2 h*(5) = 5 h*(6) = 3 h*(7) = 3 h*(8) = 0 Se a soma (j) + h*(j) é utilizada, apenas os nós do caminho mais curto são examinados. Algoritmos em Grafos

28 Caminhamento em Grafos
 = 2  =  3 7 1 2 5 3 6 4 8 7  = 4  =  1  = 0 5 7 4  = 5  =  4  = 3  =   = 3  =  (j) + h(j)  = 5  =   = 1  =  4 7 O que acontecerá se usarmos h(j)  h*(j) ? Se a soma (j) + h(j) é utilizada, o número de nós aumenta à medida que h(j) decresce de h*(j) até 0. h(1) = 4 h(2) = 1 h(3) = 3 h(4) = 1 h(5) = 4 h(6) = 3 h(7) = 2 h(8) = 0 Em especial, a que corresponde o caso h(j) = 0 j ? Algoritmos em Grafos

29 Caminhamento em Grafos
3 7 1 2 5 3 6 4 8 7  = 2  =   = 4  =  1  = 0 7 7 8  = 7  =   = 3  =   = 3  =   = 5  =   = 1  =  5 8 Finalmente, o que poderá acontecer se usarmos h(j) > h*(j) ? A utilização de h(j) > h*(j) pode levar à perda do caminho mais curto. h(1) = 0 h(2) = 1 h(3) = 4 h(4) = 5 h(5) = 4 h(6) = 3 h(7) = 3 h(8) = 0 Algoritmos em Grafos

30 Caminhamento em Grafos
Algoritmo A* A cada etapa, selecionar o nó com menor valor de *(j) + h*(j) Na prática, usar h(j) (estimativa) e não h*(j). h(i)  h*(i) h(n) = 0 (alvo) solução ótima, caminho mais curto cij = 1 h(i)  0 busca em amplitude h  h* menor número de nós Algoritmos em Grafos

31 Caminhamento em Grafos
Exemplo: Problema do mosaico 4 5 3 8 2 7 1 6 1 2 3 4 5 7 6 8 Que heurísticas podem ser usadas para estimar a distância (número de movimentos) para chegar no alvo? h1  número de peças fora de posição h2  distância da peça mais afastada h3  soma das distâncias de todas as peças Algoritmos em Grafos

32 Caminhamento em Grafos
1 7 ■ 5 h1= número de peças fora de posição 0+4 NÓ INICIAL 2 ■ 7 5 1 ■ 4 7 5 ■ 1+5 1+3 1+5 3 4 ■ 1 4 2 ■ 3 1 4 ■ 2+3 2+3 2+4 5 ■ 8 3 ■ 6 5 ■ 2 3 2 3 ■ 3+3 3+4 3+2 3+4 6 ■ 8 4 4+1 7 8 ■ 4 ■ 6 5 NÓ ALVO 5+0 5+2 Algoritmos em Grafos

33 Caminhamento em Grafos
1 7 ■ 5 h3= soma das distâncias 0+5 NÓ INICIAL 2 ■ 7 5 1 ■ 4 7 5 ■ 1+6 1+4 1+6 3 ■ 1 4 2 ■ 3 1 4 ■ 2+5 2+3 2+5 4 ■ 2 3 2 3 ■ 3+2 3+3 5 ■ 8 4 4+1 6 8 ■ 4 ■ 6 5 NÓ ALVO 5+0 5+2 Algoritmos em Grafos


Carregar ppt "Celso C. Ribeiro Caroline T. Rocha"

Apresentações semelhantes


Anúncios Google