Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Caminhos; Arvores de Busca; Busca em largura; Busca em profundidade By: Paulo Cesar Rodacki
Tipologia: Notas de estudo
1 / 26
Esta página não é visível na pré-visualização
Não perca as partes importantes!
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 0 ∞ Q 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 0 ∞ Q 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 0 ∞ Q 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 0 ∞ Q 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 0 ∞ Q 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 y ∞ 1 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 0 ∞ Q 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 3 ∅ Figure 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.
v w x y ∞ 1 2 ∞ 1 (e) (g) (i) Q 2 2 t u v w x y 1 0 ∞ Q 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 ∅ Figure 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.
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 0 ∞ Q 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 3 ∅ Figure 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 0 ∞ Q 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 ∅
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
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:
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
B
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)
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