Carregar apresentação
A apresentação está carregando. Por favor, espere
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. 7º 6º 8 9 1 5 4 2 6 3 7 10 1º 2 8º 3 10 1 10º 9 4 3º 6 2º 4º 7 5 9º 8 5º Algoritmos em Grafos
5
Caminhamento em Grafos
1 4 6 5 7 8 3 2 10 9 7º 6º 8 9 1 5 4 2 6 3 7 10 1º 2 8º 3 10 1 10º 9 4 3º 6 2º 4º 7 5 9º 8 5º 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) = minjV (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) = minjN{ (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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.