Upload
mexico108
View
219
Download
0
Embed Size (px)
DESCRIPTION
conteúdo das aulas de comunicação e redes da ufabc
Citation preview
1Aula 04 Busca em profundidade
BC0506 - Comunicao e Redes
David Correa Martins [email protected]
2Aula passada
Algoritmo de busca em largura.
gf
h
k
pn q r
b
c
m
rvore de busca em larguraGrafo de entrada
gf h k
pn q r
b c
m
01
2
3 4 5
6 7 8 910
3Roteiro da aula
Grafos- Definies: rvore e florestas.
Algoritmos de buscas em grafos- Busca em profundidade
Atividade prtica
4I. Definies
5Definies
Uma rvore um grafo conexo e acclico (sem ciclos).
As rvores so muito teis para organizar informao.
rvore no-direcionada rvore direcionada
6Definies
O seguinte grafo uma rvore?
2
1 3
4
5
6
7
7Definies
O seguinte grafo uma rvore?
0: 5,11: 0,2,3,42: 13: 14: 15: 06: 7,87: 68: 6
8Definies
O seguinte grafo uma rvore?
0: 5,11: 0,2,3,42: 13: 14: 15: 06: 7,87: 68: 6
1
3
4
760 5
2 8
Uma floresta um conjunto de rvores.
9Definies
Toda rvore com V vrtices tem exatamente V-1 arestas.
1
3
4
760 5
2 8
V=9 V=6 V=3
10
Definies
Toda floresta com V vrtices e C componentes conexas tem exatamente V-C arestas.
1
3
4
760 5
2 8
Uma floresta com 14 vrtices, e 3 componentes, tem 11 arestas.
11
13
14
12
15
11
Definies
Folhas: vrtices de grau 1 na florestaTambm chamadas de ns terminais
1
6011
14
12
3
4
75
2 813
15
12
rvore de genealogia acadmica de J. BernoulliJohann Bernoulli
Leonhard Euler Samuel Konig
Grafo direccionadoVrtices: 81.768Arestas: 88.921
13
II. Busca em profundidade
14
Busca em profundidade
A estrategia seguida pela busca em profundidade , como seu nome implica, procurar cada vez mais fundo no grafo.
Nessa busca as arestas soexploradas a partir do vrticemais recentemente descobertoque ainda possui arestasinexploradas saindo dele.
Baseado em Pilha.
15
Busca em profundidade
Fila
Pilha
First In, First Out
Last In, First Out
16
Busca em profundidade
Inicialmente, parte-se de um dado vrtice {s}Os vrtices so explorados a partir do vrtice mais recentemente descoberto.
17
Busca em grafos
a
b c
d e
i jh
f g
k
18
Busca em grafos
a
b c
d e
i jh
f g
k
a
b c
d e
i jh
f g
k
Busca em largura (Breadth First Search - BFS)
Busca em profundidade (Depth First Search - DFS)
19
Busca em profundidade
O algoritmo de busca em profundidade tambm atribui cores a cada vrtice
20
Busca em profundidade
2
1 3
4
5
6
7
Grafo inicial
21
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4}
0
Indica tempo de visita
22
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1}
0
1
23
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2}
0
1
2
24
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,7}
0
1
2
3
25
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2}
0
1
2
3/4
26
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,5}
0
1
2
3/4
5
27
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,5,3}
0
1
2
3/4
5
6
28
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,5,3,6}
0
1
2
3/4
5
6 7
29
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,5,3}
0
1
2
3/4
5
6 7/8
30
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2,5}
0
1
2
3/4
5
6/9 7/8
31
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1,2}
0
1
2
3/4
5/10
6/9 7/8
32
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4,1}
0
1
2/11
3/4
5/10
6/9 7/8
33
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={4}
0
1/12
2/11
3/4
5/10
6/9 7/8
34
Busca em profundidade (origem s=4)
2
1 3
4
5
6
7
Pilha={}
0/13
1/12
2/11
3/4
5/10
6/9 7/8
Indica tempo de visita
35
Busca em largura (Algoritmo)
Constantes:BRANCO, CINZA, PRETO, INFINITO
Variveis:P (Pilha) , s (vrtice de origem)
Propriedades do vrtice v:v.cor (cor do vrtice)v.t1 (tempo de visita inicial do vrtice v)v.t2 (tempo de visita final do vrtice v)
Funes :Insere(P,v): permite inserir o vrtice v na pilha P.Remove(P): permite remover um vrtice do topo da pilha P.Topo(P): devolve o vrtice do topo da pilha P.
36
Busca em profundidade (Depth First Search)DFS(G,s): Para cada vrtice v em G.V-{s} faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 s.cor = CINZA s.t1 = tempo P = VAZIO Insere(P,s)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
37
Percorre o grafo
Inicializao
Busca em profundidade (Depth First Search)DFS(G,s): Para cada vrtice v em G.V-{s} faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 s.cor = CINZA s.t1 = tempo P = VAZIO Insere(P,s)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
38
Inicializao
Busca em profundidade (Depth First Search) Para cada vrtice v em G.V-{s} faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 s.cor = CINZA s.t1 = tempo P = VAZIO Insere(P,s)
2
1 3
4
5
6
7P={4}
0
39
Percorre o grafo
Busca em profundidade (Depth First Search)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
2
1 3
4
5
6
7Pilha={4,1}
0
1
Iterao 1
2
1 3
4
5
6
7Pilha={4}
0Inicializao
40
Percorre o grafo
Busca em profundidade (Depth First Search)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
2
1 3
4
5
6
7
Pilha={4,1,2}
0
1
2
Iterao 2
41
Percorre o grafo
Busca em profundidade (Depth First Search)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
2
1 3
4
5
6
7
Pilha={4,1,2,7}
0
1
2
3
Iterao 3
42
Percorre o grafo
Busca em profundidade (Depth First Search)
Enquanto P VAZIO faa u = Topo(P) Se u tem pelo menos um vrtice adjacente BRANCO v = escolhe um dos vrtices adjacentes com v.cor=BRANCO v.cor = CINZA tempo = tempo+1 v.t1 = tempo Insere(P,v) Caso-contrrio u.cor = PRETO tempo = tempo+1 v.t2 = tempo Remove(P)
2
1 3
4
5
6
7
0
1
2
3/4
Iterao 4Pilha={4,1,2}
43
Busca em profundidade
O algoritmo anterior pode ser transformado em uma verso RECURSIVA.
O algoritmo recursivo, uma variante que simplifica o uso da estrutura de pilha (P).
44
Recursividade
Uma funo (programa) recursivo uma funo que se chama a si mesma.
45
Recursividade
Recursividade uma das coisas mgicas e interessantes em Programao.
46
Recursividade
Anuncio com uma imagem recursiva.
47
Recursividade
def contagem_regressiva(n): if n==0: print "Fogo!" else: print n contagem_regressiva(n-1)
48
Recursividade
Porque no usar Iterao ao invs de RecursividadeDepende muito do estilo de programao. Entretanto, algumas vezes mais apropriado usar Recursividade para resolver um problema.Normalmente mais fcil de programar e entender um programa recursivo
def contagem_regressiva(n): if n==0: print "Fogo!" else: print n contagem_regressiva(n-1)
def contagem_regressiva2(n): while n>0: print n n = n-1 print "Fogo!"
49
Recursividade
def fact(n): if n==1: return 1 else: return n*fact(n-1)
50
Percorre o grafo
Inicializao
Busca em profundidade (verso recursiva)
DFS(G,s): Para cada vrtice v em G.V-{s} faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 VisitaDFS(G,s)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
51
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
s=4
tempo=0
52
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
s=4
tempo=0
53
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
s=4
tempo=1
54
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
s=4
tempo=2
v=1
55
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
s=4
tempo=3
v=1
56
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2
3
s=7
tempo=4
Aps alguns chamados recursivos...
57
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=7
tempo=4
Aps alguns chamados recursivos...
3
58
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=7
tempo=4
Aps alguns chamados recursivos...
3
59
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=7
tempo=5
Aps alguns chamados recursivos...
3/4
60
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=7
tempo=5
Aps alguns chamados recursivos...
3/4
61
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=5
tempo=5
Aps alguns chamados recursivos...
3/4
62
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=5
tempo=5
Aps alguns chamados recursivos...
3/4
63
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
5
6
7
0
1
2s=5
tempo=5
Aps alguns chamados recursivos...
3/4
5
64
Percorre o grafo
Busca em profundidade (verso recursiva)
VisitaDFS(G,s): s.t1 = tempo s.cor = CINZA tempo = tempo+1 Para cada v em G.Adj[s] faa Se v.cor == BRANCO VisitaDFS(G,v) s.cor = PRETO s.t2 = tempo tempo = tempo+1
2
1 3
4
6
7
0
1
2s=5
tempo=6
Aps alguns chamados recursivos...
3/4
55
65
Para grafos direcionados
66
Para grafos direcionados
67
Para grafos direcionados
68
Para grafos direcionados
69
Para grafos direcionados
70
Para grafos direcionados
71
Para grafos direcionados
72
Para grafos direcionados
73
Para grafos direcionados
74
Para grafos direcionados
75
Para grafos direcionados
76
Para grafos direcionados
77
Inicializao
Inicializao
Busca em profundidade (verso recursiva)
DFS(G,s): Para cada vrtice v em G.V-{s} faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 VisitaDFS(G,s)
DFS(G): Para cada vrtice v em G.V faa v.cor = BRANCO v.t1 = INFINITO v.t2 = INFINITO tempo = 0 Para cada vrtice u em G.V faa se u.cor==BRANCO VisitaDFS(G,u)
// Esta nova funo permite percorrer todos os elementos do grafo.
// Esta funo permite percorrer os elementos da componente conexa contendo s.
78
Para grafos direcionados
79
Para grafos direcionados
80
Para grafos direcionados
81
Para grafos direcionados
82
Para grafos direcionados
83
Para grafos direcionados
84
Ordenao 'topologica'
85
Ordenao 'topologica'
86
Ordenao 'topologica'
A ordenao topologica (de um grafo direcionado) uma ordem linear de seus vrtices em que:
Cada aresta direcionada uv (do vrtice u ao vrtice v), o vrtice u vem antes do vrtice v na ordenao.
Podem existir uma ou mais ordenaes topolgicas.
u v
87
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
88
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1
89
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1
2
90
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1
2/3
91
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
92
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
93
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6
94
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6
7
95
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6
7
8
96
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6
7
8/9
97
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6
7/10
8/9
98
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5
6/11
7/10
8/9
99
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
100
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13
101
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13/14
102
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13/1415
103
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13/1415
16
104
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13/1415
16/17
105
Ordenao 'topologica'
BCC
PI
CR
BMat
NI
BExp
TQui
Obrig
Optat
1/4
2/3
5/12
6/11
7/10
8/9
13/1415/18
16/17
BExp TQui Optat
13/1415/18 16/17
BCC
5/12
PI CR
6/11 7/10
Obrig
8/9
BMat NI
1/4 2/3
Ordenado pelo tempo de visita 2(ordem descendente)
106
III. Atividade Prtica
107
Atividade PrticaPara os grafos G e H abaixo, execute a busca em profundidade a partir do vrtice 1:
(a) Dando preferncia para vrtices de menor ndice.(b) Dando preferncia para vrtices de maior ndice.
Para cada exerccio indique a sequncia de vrtices visitados.
G H
108
Atividade Prtica: Gabarito
Grafo G:(a) Dando preferncia para vrtices de menor ndice.
(b) Dando preferncia para vrtices de maior ndice.
Grafo H:(a) Dando preferncia para vrtices de menor ndice.
(b) Dando preferncia para vrtices de maior ndice.
First Slide ExampleSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56Slide 57Slide 58Slide 59Slide 60Slide 61Slide 62Slide 63Slide 64Slide 65Slide 66Slide 67Slide 68Slide 69Slide 70Slide 71Slide 72Slide 73Slide 74Slide 75Slide 76Slide 77Slide 78Slide 79Slide 80Slide 81Slide 82Slide 83Slide 84Slide 85Slide 86Slide 87Slide 88Slide 89Slide 90Slide 91Slide 92Slide 93Slide 94Slide 95Slide 96Slide 97Slide 98Slide 99Slide 100Slide 101Slide 102Slide 103Slide 104Slide 105Slide 106Slide 107Slide 108