Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Grafos - Busca Basica, Notas de estudo de Informática

Caminhos; Arvores de Busca; Busca em largura; Busca em profundidade By: Paulo Cesar Rodacki

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 15/09/2010

aramati-paz-5
aramati-paz-5 🇧🇷

5

(1)

14 documentos

1 / 26

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Teoria dos Grafos
Unidade 3:
Busca em Grafos
Prof. Dr. Paulo César Rodacki Gomes
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a

Pré-visualização parcial do texto

Baixe Grafos - Busca Basica e outras Notas de estudo em PDF para Informática, somente na Docsity!

Teoria dos Grafos

Unidade 3:

Busca em Grafos

Prof. Dr. Paulo César Rodacki Gomes

[email protected]

Blibliografia

Joan M. Aldous, Robin J. Wilson. Graphs and

Applications : as introductory approach.

Springer. 2001

Thomas Cormen et al. Algoritmos : teoria e

prática. Ed. Campus. 2004.

Busca

Pesquisar um grafo: visitar seus vértices

passando sistematicamente por suas arestas

Busca em largura

Busca em profundidade

A busca forma caminhos nos grafos

Definições

Passeio: um passeio é uma sequencia de

vértices e arestas de tal forma que o

vértico final de uma aresta é igual ao

vértice inicial da próxima aresta no passeio

O comprimento (ou distância) de um

passeio é igual ao somatório de vezes que

cada aresta é percorrida

Busca em largura

explora o grafo a partir de um vértice

inicial arbitrário

vai se alastrando uniformemente pelo grafo

o conjunto de caminhos do vértice inicial a

cada um dos demais vértices gera uma

árvore de busca em largura

Árvore de Busca

Vetor de roteamento

3.1. BUSCA EM LARGURA 37 s a b c d e s a b c d e Figura 3.1: Exemplo de ´arvore de busca em largura apenas um vetor de referˆencias para v´ertices. A este vetor, damos o nome de vetor de roteamento, e o denotamos pelo s´ımbolo Π(G). Assim, a ´arvore de busca em largura da figura 3.1 corresponde aos seguintes valores no vetor de roteamento: π(s) = nil, π(a) = s, π(b) = a, π(c) = s, π(d) = a e π(e) = a. d e a b c d e Figura 3.1: Exemplo de ´arvore de busca em largura etor de referˆencias para v´ertices. A este vetor, damos o nome de teamento , e o denotamos pelo s´ımbolo Π(G). Assim, a ´arvore de rgura da figura 3.1 corresponde aos seguintes valores no vetor de : π(s) = nil, π(a) = s, π(b) = a, π(c) = s, π(d) = a e π(e) = a. o de busca em largura remos o pseudo-c´odigo do algoritmo de busca em largura BFS (do

Algoritmo: BFS(G, s) para cada v ∈ V fa¸ca cor(v) ← BRAN CO; π(v) ← nil; d(v) ← ∞; d(s) ← 0; cor(s) ← CIN ZA; Q ← ∅; IN SERE(Q, s); enquanto Q ￿= ∅ fa¸ca u ← REM OV E(Q); para cada v ∈ Adj(u) fa¸ca se cor(v) = BRAN CO ent˜ao IN SERE(Q, v); cor(v) ← CIN ZA; π(v) ← u; d(v) ← d(u) + 1; cor(u) ← P RET O; r s t u v w x y ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 (e) (g) (i) Q r s t 2 x 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u 1 0 r s 2 3

22.2 Breadth-first search 533 r s t u v w x y ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 ∞ ∞ ∞ 1 ∞ ∞ w 1 (b) Q r 1 t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 t u v w x y 1 0 ∞ ∞ (d) Q (e) (f) (g) (h) r s r s r s t 2 x 2 2 2 1 2 t 2 x 2 v 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 2 1 2 v 2 u 3 3 y 3 t u 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u 1 0 3 Q r s 2 1 2 3 y 2 3 22.2 Breadth-first search r s t u v w x y ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 (e) (g) r s t 2 x 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 22.2 Breadth-first search 533 r s t u v w x y ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 ∞ ∞ ∞ 1 ∞ ∞ w 1 (b) Q r 1 t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 t u v w x y 1 0 ∞ ∞ (d) Q (e) (f) r s r s r s t 2 x 2 2 2 1 2 t 2 x 2 v 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 2 1 2 v 2 u 3 3 y 3 22.2 Breadth-first search r s t u v w x y ∞ 0 ∞ ∞ ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 (e) r s t 2 x 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3

Algoritmo: BFS(G, s) para cada v ∈ V fa¸ca cor(v) ← BRAN CO; π(v) ← nil; d(v) ← ∞; d(s) ← 0; cor(s) ← CIN ZA; Q ← ∅; IN SERE(Q, s); enquanto Q ￿= ∅ fa¸ca u ← REM OV E(Q); para cada v ∈ Adj(u) fa¸ca se cor(v) = BRAN CO ent˜ao IN SERE(Q, v); cor(v) ← CIN ZA; π(v) ← u; d(v) ← d(u) + 1; cor(u) ← P RET O; v w x y1 2 ∞ 1 v w x y ∞ (e) (f) (g) (h) (i) Q 2 2 2 1 2 2 2 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 2 1 2 v 2 u 3 3 y 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u v w x y 1 0 3 Q r s 2 1 2 3 y 2 3 t u v w x y 1 0 r s 2 1 2 3 2 3Figure 22.3 The operation of BFS on an undirected graph. Tree edges are shown shaded as they are produced by BFS. Within each vertex u is shown d [ u ]. The queue Q is shown at the beginning of each iteration of the while loop of lines 10–18. Vertex distances are shown next to vertices in the queue.

Figure 22.3 illustrates the progress of BFS on a sample graph.

The procedure BFS works as follows. Lines 1–4 paint every vertex white, set

d [ u ] to be infinity for each vertex u , and set the parent of every vertex to be NIL.

v w x y1 2 ∞ 1 (e) (g) (i) Q 2 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u v w x y 1 0 r s 2 1 2 3 2 3Figure 22.3 The operation of BFS on an are produced by BFS. Within each vertex u of each iteration of the while loop of lines 1 queue.

Figure 22.3 illustrates the progress o

The procedure BFS works as fol

v w x y ∞ ∞ ∞ ∞ s 0 (a) Q v w x y ∞ 1 ∞ ∞ w 1 (b) Q r 1 t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 t u v w x y 1 0 ∞ ∞ (d) Q (e) (f) (g) (h) (i) Q r s r s t 2 x 2 2 2 1 2 t 2 x 2 v 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 2 1 2 v 2 u 3 3 y 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u v w x y 1 0 3 Q r s 2 1 2 3 y 2 3 t u v w x y 1 0 r s 2 1 2 3 2 3Figure 22.3 The operation of BFS on an undirected graph. Tree edges are shown shaded as they v w x y ∞ ∞ ∞ ∞ s 0 (a) Q t u v w x y 1 0 2 ∞ ∞ 1 2 ∞ (c) Q r 1 (e) (g) (i) Q r s t 2 x 2 t u v w x y 1 0Q r s 2 2 1 2 x 2 v 2 u 3 3 t u v w x y 1 0 3 Q r s 2 1 2 u 3 3 y 2 3 t u v w x y 1 0 r s 2 1 2 3 2 3

Imprimir caminho

Algoritmo: ImprimeCaminho(G, s, v) se v==s ent˜ao imprime(s); sen˜ao se π(v) == nil ent˜ao imprime(“n˜ao existe caminho de s para v”); sen˜ao ImprimeCaminho(G, s, π(v)); imprime(v); Algoritmo 3.4: Imprime caminho

Busca em profundidade

volta gradativamente aos passos anteriores at´e que consiga encontrar uma nova op¸c˜ao de caminho. Este procedimento de voltar atr´as ´e comumente conhecido como bracktracking. Assim como na busca em largura, a busca em profundidade tamb´em gera uma ´arvore de busca, por´em ela n˜ao tem mais a propriedade de gerar os caminhos m´ınimos. Os elementos do pseudo-c´odigo s˜ao os seguintes:

  • cor(v): cor do v´ertice v, que pode assumir um dos seguintes valores {BRAN CO, CIN ZA, P RET O}. O valor BRANCO significa que a busca ainda n˜ao atingiu este v´ertice. O valor CINZA, indica que a busca j´a atin- giu o v´ertice v, mas ele ainda possui vizinhos (v´ertices adjacentes) ainda n˜ao visitados. O valor PRETO indica que a visita¸c˜ao deste v´ertice est´a encerrada, isto ´e, tanto ele como todos os seus vizinhos j´a foram visitados pela busca;
  • π(v): referˆencia ao v´ertice predecessor do v´ertice v na busca, representa seu pai n´a ´arvore de busca em profundidade;
  • tempo: rel´ogio l´ogico, valor inteiro que varia de 0 a 2 n;
  • d(v): tempo de descoberta ou abertura do v´ertice v, representa o valor do tempo l´ogico quando o v´ertice ´e visitado pela primeira vez;
  • f (v): tempo de fechamento do v´ertice v, representa o valor do tempo l´ogico quando a visita¸c˜ao no v´ertice ´e encerrada, isto ´e, quando sua cor fica preta.
3.2. BUSCA EM PROFUNDIDADE 19

de busca. O la¸co principal da fun¸c˜ao DFS(G) perrorre todos os v´ertices do grafo G, e chama DFS-VISIT(u) sempre que o v´ertice corrente for BRANCO (n˜ao vi- sitado). A recursividade da fun¸c˜ao carateriza um empilhamento dos v´ertices a serem visitados, com isso a ordem de visita¸c˜ao ´e feita em profundidade, sempre visitando o primeiro v´ertice adjacente n˜ao visitado do v´ertice atual. Algoritmo: DFS-VISIT(u) cor(u) ← CIN ZA; tempo ← tempo + 1; d(u) ← tempo; para cada v ∈ Adj(u) fa¸ca se cor(v) = BRAN CO ent˜ao π(v) ← u; DF S − V ISIT (v); cor(u) ← P RET O; tempo ← tempo + 1; f (u) ← tempo; Algoritmo 3.3 – Fun¸c˜ao DFS-Visit(u) Algoritmo: DFS(G) para cada v ∈ V fa¸ca cor(v) ← BRAN CO; π(v) ← nil; tempo ← 0; para cada v´ertice u ∈ V fa¸ca se cor(u) = BRAN CO ent˜ao DF S − V ISIT (u); Algoritmo 3.2 – Algoritmo de busca em profundidade DFS(G) O pr´oximo algoritmo mostra o pseudo-c´odigo da fun¸c˜ao DFS-VISIT(u). Trata-se de uma fun¸c˜ao recursiva que efetivamente implementa o procedimento u v w x y z 1/ 1/ 2/ 1/ 2/ 4/ 3/ B 1/ 2/ 3/ B 4/ 1/ B 4/5 3/ 2/ F B 4/5 3/ 2/ F 1/ u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w u v w (i) (j) (e) (f) (a) (b) u v w x y z 1/ 1/ 2/ 1/ 2/ 4/ 3/ B 1/ 2/ 3/ B 4/ 1/ B 4/5 3/ 2/ F B 4/5 3/ 2/ F 1/ u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w u v w (i) (j) (e) (f) (a) (b) raph Algorithms 1/ 2/ 1/ 2/ 3/

B 4/

B 4/5 3/

B 4/5 3/

u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z Algorithms 1/ 2/ 1/ 2/ 3/

B 4/

B 4/5 3/

B 4/5 3/

u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z 542 Chapter 22 Elementary Graph Alg

u v w
x y z

B

B

u v w
x y z
u v w
x y z
u v w
x y z
(e) (f)
(a) (b)

542 Chapter 22 Elementary Graph Algorith u v w x y z

B

B 4/ u v w x y z u v w x y z u v w x y z (e) (f) (a) (b)

3.2. BUSCA EM PROFUNDIDADE 19

de busca. O la¸co principal da fun¸c˜ao DFS(G) perrorre todos os v´ertices do grafo G, e chama DFS-VISIT(u) sempre que o v´ertice corrente for BRANCO (n˜ao vi- sitado). A recursividade da fun¸c˜ao carateriza um empilhamento dos v´ertices a serem visitados, com isso a ordem de visita¸c˜ao ´e feita em profundidade, sempre visitando o primeiro v´ertice adjacente n˜ao visitado do v´ertice atual. Algoritmo: DFS-VISIT(u) cor(u) ← CIN ZA; tempo ← tempo + 1; d(u) ← tempo; para cada v ∈ Adj(u) fa¸ca se cor(v) = BRAN CO ent˜ao π(v) ← u; DF S − V ISIT (v); cor(u) ← P RET O; tempo ← tempo + 1; f (u) ← tempo; Algoritmo 3.3 – Fun¸c˜ao DFS-Visit(u) Algoritmo: DFS(G) para cada v ∈ V fa¸ca cor(v) ← BRAN CO; π(v) ← nil; tempo ← 0; para cada v´ertice u ∈ V fa¸ca se cor(u) = BRAN CO ent˜ao DF S − V ISIT (u); Algoritmo 3.2 – Algoritmo de busca em profundidade DFS(G) O pr´oximo algoritmo mostra o pseudo-c´odigo da fun¸c˜ao DFS-VISIT(u). Trata-se de uma fun¸c˜ao recursiva que efetivamente implementa o procedimento

B 4/

B 4/5 3/

B 4/5 3/

B 4/5 3/

F

B 4/5 3/

F

B 4/5 3/

F

C B 4/5 3/

F

C B B 4/5 3/

F

C B 10/ B 4/5 3/

F

C B 10/

u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z

B 4/

B 4/5 3/

B 4/5 3/

B 4/5 3/

F

B 4/5 3/

F

B 4/5 3/

F

C B 4/5 3/

F

C B B 4/5 3/

F

C B 10/ B 4/5 3/

F

C B 10/

u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z

B

B 4/ 1/ B 4/5 3/

F B 4/5 3/

F

B 4/5 3/

F

C B 4/5 3/

F

C u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z (m) (n) (i) (j) (e) (f) (a) (b) 10/ 10/ 1/ 2/ 4/ 3/ B 1/ 2/ 3/ B 4/ 1/ B 4/5 3/ 2/ F B 4/5 3/ 2/ F 1/ B 4/5 3/ 2/ F 1/8 9/ C B 4/5 3/ 2/ F 1/8 9/ C B u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z (m) (n) (i) (j) (e) (f) (a) (b) 10/ 10/

B 4/

B 4/5 3/

B 4/5 3/

B 4/5 3/

F

B 4/5 3/

F

B 4/5 3/

F

C u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z ph Algorithms 1/ 2/ 1/ 2/ 3/ 1/ 2/ 4/ 3/ 1/ 2/ 3/ B 4/ 1/ 2/ B 4/5 3/ 1/ B 4/5 3/ 2/ B 4/5 3/ 2/ F 1/ B 4/5 3/ 2/ F 1/8 9/ B 4/5 3/ 2/ F 1/8 9/ C u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z u v w x y z

Exemplo de aplicação

Grafo de estados: é um grafo onde os

vértices representam estados de um

problema, e as arestas representam

possíveis transições entre dois estados

Exemplo: robô

aspirador de pó

Um robô aspirador de pó deve limpar uma casa com duas

posições. As operações que ele sabe executar são:

sugar

ir para a posição da esquerda

ir para a posição da direita

Como o aspirador pode montar um plano para limpar a

casa se inicialmente ele esta na posição direita e as duas

posições têm sujeira?

Quais os estados possíveis do mundo do aspirador e as

transições?