63
AULA 12 PROJETO E ANÁLISE DE ALGORITMOS Algoritmos de busca em largura e profundidade em grafos Karina Valdivia Delgado

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

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AULA 12PROJETO E ANÁLISE DE

ALGORITMOS

Algoritmos de busca em largura e profundidade em grafosKarina Valdivia Delgado