aula 12 projeto e anÁlise de...
TRANSCRIPT
![Page 1: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/1.jpg)
AULA 12PROJETO E ANÁLISE DE
ALGORITMOS
Algoritmos de busca em largura e profundidade em grafosKarina Valdivia Delgado
![Page 2: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/2.jpg)
Roteiro
MotivaçãoAlgoritmo de busca em larguraAlgoritmo de busca em profundidade
![Page 3: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/3.jpg)
MotivaçãoProblema fundamental em grafos:
Como explorar um grafo de forma sistemática?
Muitas aplicações são abstraídas como problemas de busca.Os algoritmos de busca em grafos são a base de vários algoritmos mais gerais em grafos.
![Page 4: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/4.jpg)
MotivaçãoComo explorar o grafo?
Por exemplo, como saber se existe caminhos simples entre dois vértices?
Evitar explorar vértices já explorados. Temos que marcar os vértices!
![Page 5: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/5.jpg)
Busca em larguraSeja G = (V , A) e um vértice s, o algoritmo de busca em largura (breadth-first-search - BFS) percorre as arestas de G descobrindo todos os vértices atingíveis a partir de s.
BFS determina a distância (em número de arestas) de cada um desses vértices a s.
![Page 6: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/6.jpg)
Busca em larguraAntes de encontrar um vértice à distância k+1 de s, todos os vértices à distância k são encontrados.
![Page 7: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/7.jpg)
Busca em larguraBFS produz uma árvore BFS com raiz em s, que contém todos os vértices acessíveis determinando o caminho mais curto (caminho que contém o número mínimo de arestas) de s a t (em que t é um vértice acessível).
![Page 8: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/8.jpg)
Busca em larguraPara organizar o processo de busca os vérticessão pintados:● - branco: não foram descobertos ainda● - cinza: são a fronteira. O vértice já foi descoberto
mas ainda não examinamos os seus vizinhos.● - preto: são os vértices já descobertos e seus
vizinhos já foram examinados.É utilizada uma fila para manter os vértices cinzas.
![Page 9: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/9.jpg)
Busca em largura
∞
∞
∞
∞
∞
∞
∞
∞
r s t u
v w x y
No início todos os vértices são brancos e a distância é infinita
![Page 10: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/10.jpg)
Busca em largura
∞
∞
0
∞
∞
∞
∞
∞
r s t u
v w x y
sQ:
O vértice origem é pintado de cinza (ele é considerado descoberto) e é colocado na fila
![Page 11: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/11.jpg)
Busca em largura
1
∞
0
1
∞
∞
∞
∞
r s t u
v w x y
wQ: r
É retirado o primeiro elemento da fila e os adjacentes a ele são colocados em Q e pintados de cinza. Além disso, é atualizada a
distância e o pai
![Page 12: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/12.jpg)
Busca em largura
1
∞
0
1
∞
∞
∞
∞
r s t u
v w x y
wQ: r
colorimos o vértice com preto (os seus vizinhos já foram descobertos)
![Page 13: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/13.jpg)
Busca em largura
1
∞
0
1
2
2
∞
∞
r s t u
v w x y
rQ: t x
![Page 14: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/14.jpg)
Busca em largura
1
2
0
1
2
2
∞
∞
r s t u
v w x y
Q: t x v
![Page 15: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/15.jpg)
Busca em largura
1
2
0
1
2
2
3
∞
r s t u
v w x y
Q: x v u
Observe que somente colocamos na fila vértices brancos, que são imediatamente coloridos de cinza ao
entrar na fila
![Page 16: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/16.jpg)
Busca em largura
1
2
0
1
2
2
3
3
r s t u
v w x y
Q: v u y
![Page 17: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/17.jpg)
Busca em largura
1
2
0
1
2
2
3
3
r s t u
v w x y
Q: u y
![Page 18: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/18.jpg)
Busca em largura
1
2
0
1
2
2
3
3
r s t u
v w x y
Q: y
![Page 19: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/19.jpg)
Busca em largura
1
2
0
1
2
2
3
3
r s t u
v w x y
Q: Ø
![Page 20: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/20.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY 6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) 10 while Q is non-empty 11. u ← DEQUEUE(Q) 12. for each v adjacent to u 13. if color[v] = WHITE 14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u17. ENQUEUE(Q, v)18. color[u] ← BLACK
![Page 21: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/21.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty 11. u ← DEQUEUE(Q) 12. for each v adjacent to u 13. if color[v] = WHITE 14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u17. ENQUEUE(Q, v)18. color[u] ← BLACK
![Page 22: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/22.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u 13. if color[v] = WHITE 14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u17. ENQUEUE(Q, v)18. color[u] ← BLACK
![Page 23: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/23.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE 14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u17. ENQUEUE(Q, v)18. color[u] ← BLACK
![Page 24: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/24.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco (ele ainda não foi descoberto)14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u17. ENQUEUE(Q, v)18. color[u] ← BLACK
![Page 25: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/25.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco (ele ainda não foi descoberto)14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou à descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
![Page 26: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/26.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
Cada vértice é colocado na filano máximo uma vez e portanto retirado da fila no máximo uma
vez
![Page 27: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/27.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
As operações DEQUEUE e ENQUEUE demoram tempo O(1). Assim o tempo total de operações
na fila é: O(V)
![Page 28: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/28.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
A lista de adjacências de cada vértice é examinado somente
quando o vértice é desenfileirado, a lista de adjacências de cada
vértice é examinada no máximo uma vez.
![Page 29: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/29.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
Assim, o tempo gasto na varredura total das listas de adjacências é: O(A)
![Page 30: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/30.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
Assim, o tempo gasto na varredura total das listas de adjacências é: O(A)
A parte de inicialização é O(V)
![Page 31: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/31.jpg)
Busca em larguraBFS(V, A, s)1. for each u in V − {s} ▷ para cada vértice u em V exceto s 2. color[u] ← WHITE ▷ no início todos os vértices são brancos3. d[u] ← infinity4. π[u] ← NIL5. color[s] ← GRAY ▷ Vértice origem descoberto6. d[s] ← 0 7. π[s] ← NIL 8. Q ← {} 9. ENQUEUE(Q, s) ▷ Colocar o vértice origem na fila Q10 while Q is non-empty ▷ Enquanto existam vértices cinzas11. u ← DEQUEUE(Q) ▷ i.e., u = primeiro(Q)12. for each v adjacent to u ▷ para cada vértice adjacente a u13. if color[v] = WHITE ▷ se é branco ele ainda não foi descoberto14. then color[v] ← GRAY15. d[v] ← d[u] + 116. π[v] ← u ▷ pai de v é o nó que levou a descoberta de v17. ENQUEUE(Q, v)18. color[u] ← BLACK ▷ os vizinhos de u já foram examinados
O tempo total da busca em largura é O(V+A)
![Page 32: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/32.jpg)
Busca em profundidadeDepth-first-search (DFS)A ideia é prosseguir a busca sempre a partir do vértice descoberto mais recentemente, até que este não tenha mais vizinhos descobertos. Neste caso, volta-se na busca para o precursor desse vértice.Oposto de BFS que explora o vértice mais antigo primeiro.DFS devolve uma floresta.
![Page 33: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/33.jpg)
Busca em profundidadeOs vértices recebem 2 rótulos:● d[.]: o momento em que o vértice foi
descoberto (tornou-se cinza).● f[.]: o momento em que examinamos os
seus vizinhos (tornou-se preto). O vértice é branco até d, cinza entre d e f epreto a partir de f.
![Page 34: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/34.jpg)
Busca em profundidadesourcevertexvértice
origem
![Page 35: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/35.jpg)
Busca em profundidade
1 | | |
| | |
| |
sourcevertex
d f
vértice origem
![Page 36: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/36.jpg)
Busca em profundidade
1 | | |
| | |
| |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 37: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/37.jpg)
Busca em profundidade
1 | | |
| | |
2 | |
sourcevertex
d f
vértice origem
![Page 38: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/38.jpg)
Busca em profundidade
1 | | |
| | |
2 | |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 39: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/39.jpg)
Busca em profundidade
1 | | |
| | 3 |
2 | |
sourcevertex
d f
vértice origem
![Page 40: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/40.jpg)
Busca em profundidade
1 | | |
| | 3 |
2 | |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 41: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/41.jpg)
Busca em profundidade
1 | | |
| | 3 | 4
2 | |
sourcevertex
d f
vértice origem
Não existe. Então, terminei com o vértice (pinta ele de preto)Volta-se na busca para o precursor desse vértice.
![Page 42: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/42.jpg)
Busca em profundidade
1 | | |
| | 3 | 4
2 | |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 43: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/43.jpg)
Busca em profundidade
1 | | |
| 5 | 3 | 4
2 | |
sourcevertex
d f
vértice origem
![Page 44: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/44.jpg)
Busca em profundidade
1 | | |
| 5 | 3 | 4
2 | |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 45: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/45.jpg)
Busca em profundidade
1 | | |
| 5 | 63 | 4
2 | |
sourcevertex
d f
vértice origem
Não existe. Terminei!Volta-se na busca para o precursor desse vértice.
![Page 46: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/46.jpg)
Busca em profundidade
1 | | |
| 5 | 63 | 4
2 | |
sourcevertex
d f
vértice origem
Existe algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 47: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/47.jpg)
Busca em profundidade
1 | | |
| 5 | 63 | 4
2 | 7 |
sourcevertex
d f
vértice origem
Não existe. Terminei!Volta-se na busca para o precursor desse vértice.
![Page 48: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/48.jpg)
Busca em profundidade
1 | | |
| 5 | 63 | 4
2 | 7 |
sourcevertex
d f
vértice origem
Existe mais algum vértice adjacente ao vértice que não tenha sido descoberto?
![Page 49: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/49.jpg)
Busca em profundidade
1 | 8 | |
| 5 | 63 | 4
2 | 7 |
sourcevertex
d f
vértice origem
![Page 50: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/50.jpg)
Busca em profundidade
1 | 8 | |
| 5 | 63 | 4
2 | 7 9 |
sourcevertex
d f
vértice origem
![Page 51: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/51.jpg)
Busca em profundidade
1 | 8 | |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 52: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/52.jpg)
Busca em profundidade
1 | 8 |11 |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 53: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/53.jpg)
Busca em profundidade
1 |12 8 |11 |
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 54: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/54.jpg)
Busca em profundidade
1 |12 8 |11 13|
| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 55: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/55.jpg)
Busca em profundidade
1 |12 8 |11 13|
14| 5 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 56: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/56.jpg)
Busca em profundidade
1 |12 8 |11 13|
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 57: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/57.jpg)
Busca em profundidade
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
![Page 58: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/58.jpg)
Busca em profundidade
1 |12 8 |11 13|16
14|155 | 63 | 4
2 | 7 9 |10
sourcevertex
d f
vértice origem
Resultado: uma floresta com 2 árvores, uma com 6 vértices e outra com 2 vértices
![Page 59: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/59.jpg)
Busca em profundidade
DFS-Visit(u)1. color[u] ← GRAY ▷ vértice u acabou de ser descoberto2. time ← time + 13. d[u] ← time4. for each vertex v adjacent to u ▷ explora a aresta (u, v)5. if color[v] = WHITE6. then π[v] ← u7. DFS-Visit(v)8. color[u] ← BLACK ▷ os vizinhos de u já foram examinados9. time ← time + 110. f[u] ← time
![Page 60: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/60.jpg)
Busca em profundidade
DFS-Visit(u)1. color[u] ← GRAY ▷ vértice u acabou de ser descoberto2. time ← time + 13. d[u] ← time4. for each vertex v adjacent to u ▷ explora a aresta (u, v)5. if color[v] = WHITE6. then π[v] ← u7. DFS-Visit(v)8. color[u] ← BLACK ▷ os vizinhos de u já foram examinados9. time ← time + 110. f[u] ← time
DFS-Visit cria uma árvore DFS com raiz em u
![Page 61: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/61.jpg)
Busca em profundidadeDFS (V, A)1. for each vertex u in V ▷inicialização2. color[u] ← WHITE3. π[u] ← NIL4. time ← 05. for each vertex u in V ▷ criar floresta6. if color[u] = WHITE7. then DFS-Visit(u) ▷ criar uma nova árvore a partir de uDFS-Visit(u)1. color[u] ← GRAY ▷ vértice u acabou de ser descoberto2. time ← time + 13. d[u] ← time4. for each vertex v adjacent to u ▷ explora a aresta (u, v)5. if color[v] = WHITE6. then π[v] ← u7. DFS-Visit(v)8. color[u] ← BLACK ▷ os vizinhos de u já foram examinados9. time ← time + 110. f[u] ← time
![Page 62: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/62.jpg)
Busca em profundidadeDFS (V, A)1. for each vertex u in V ▷inicialização2. color[u] ← WHITE3. π[u] ← NIL4. time ← 05. for each vertex u in V ▷ criar a floresta6. if color[u] = WHITE7. then DFS-Visit(u) ▷ criar uma nova árvore a partir de uDFS-Visit(u)1. color[u] ← GRAY ▷ vértice u acabou de ser descoberto2. time ← time + 13. d[u] ← time4. for each vertex v adjacent to u ▷ explora a aresta (u, v)5. if color[v] = WHITE6. then π[v] ← u7. DFS-Visit(v)8. color[u] ← BLACK ▷ os vizinhos de u já foram examinados9. time ← time + 110. f[u] ← time
O tempo total da busca em profundidade é O(V+A)
![Page 63: AULA 12 PROJETO E ANÁLISE DE ALGORITMOSeach.uspnet.usp.br/digiampietri/SIN5013/Karina_Aula12AA.pdf · AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade](https://reader034.vdocuments.site/reader034/viewer/2022050323/5f7c64343c4bec55085b5973/html5/thumbnails/63.jpg)
AULA 12PROJETO E ANÁLISE DE
ALGORITMOS
Algoritmos de busca em largura e profundidade em grafosKarina Valdivia Delgado