Você está na página 1de 28

Busca em Grafos

Katia S. Guimares
katiag@cin.ufpe.br

Busca em Grafos
OBJETIVO:
Visitar todos os vrtices e arestas do
grafo de forma sistemtica, para evitar
repeties e conseqente desperdcio.
Se o grafo uma rvore enraizada,
isto , uma rvore na qual os vrtices
obedecem a uma hierarquia, a tarefa
simples.
katiag@cin.ufpe.br

Busca em rvores Enraizadas


1. Busca em prordem
Raiz visitada antes
dos descendentes

katiag@cin.ufpe.br

Busca em rvores Enraizadas


2. Busca em psordem
Raiz visitada depois
dos descendentes
B

katiag@cin.ufpe.br

Busca em rvores Enraizadas


3. Busca em in-ordem
Raiz visitada entre os descendentes
S faz sentido para rvores binrias ou
similares (2-3, B, etc.)
(Applet)

katiag@cin.ufpe.br

Algoritmo Pr-ordem
Algoritmo Pr-ordem(raiz)
Se raiz no nula ento
Visite (raiz)
Pr-ordem (left.raiz)
Pr-ordem (right.raiz)

katiag@cin.ufpe.br

Algoritmo Ps-ordem
Algoritmo Ps-ordem(raiz)
Se raiz no nula ento
Ps-ordem (left.raiz)
Ps-ordem (right.raiz)
Visite (raiz)

katiag@cin.ufpe.br

Algoritmo In-ordem
Algoritmo In-ordem(raiz)
Se raiz no nula ento
In-ordem (left.raiz)
Visite (raiz)
In-ordem (right.raiz)

katiag@cin.ufpe.br

Busca em Grafos com Ciclos


Se o grafo contm ciclos, preciso
cuidar para evitar que arestas sejam
visitadas mais de uma vez.
5

6
1
3

4
2

katiag@cin.ufpe.br

Busca em Grafos com Ciclos


Exemplo: A partir do grafo abaixo obtemos
5

1
3

4
2

7
katiag@cin.ufpe.br

5
10

Busca em Grafos com Ciclos


Se o grafo no uma rvore, ns
definimos um subgrafo dele que uma
rvore, para servir de espinha dorsal.
Algoritmo bsico:
Tome um vrtice qualquer s. Marque s.
Enquanto houver arestas no visitadas,
tome uma aresta (v, w) incidente a algum
vrtice j marcado. Marque (v, w)
(explorada) e v, w (visitados).
katiag@cin.ufpe.br

11

Busca em Grafos com


Ciclos
H duas tcnicas principais para busca:
Busca em Profundidade
Tomar a aresta no marcada incidente ao
vrtice visitado mais recentemente.
Busca em Largura
Tomar a aresta no marcada incidente ao
vrtice visitado menos recentemente.

katiag@cin.ufpe.br

12

Busca em Profundidade
JAVA Applet para uma
Busca em Profundidade
JAVA Applet para Busca em
grafo direcionado com
pilha

katiag@cin.ufpe.br

13

Controle para

Busca em Profundidade
Main Procedure
Inicialize pilha Q como vazia;
Desmarque todos os vrtices e arestas;
Tome um vrtice v qualquer;
Inclua v em Q;
P(v);
Remova v de Q.
14

Algoritmo para Busca em

Profundidade

Procedimento P(v)
Marque v como visitado (cinza);
Para toda aresta (v, w) incidente a v faa:
Se w no marcado ento
/* aresta de rvore */ {d[w] time;
time++;
pred[w]
v; P(w)
fim[w] time;
time++}
seno se w pai(v)
ento /* aresta de retorno */
katiag@cin.ufpe.br

15

rvore de Busca em
Profundidade
A busca em profundidade biparticiona
o conjunto de arestas em:
1
5

6
1
3
4
2

6
7

- Arestas
de rvore

- Arestas
de Retorno

5
16

Teorema 23.6 (Teorema dos parnteses)


Em qualquer busca em profundidade de um
grafo (direcionado ou no direcionado) G =
(V, E), para quaisquer dois vrtices u e v,
exatamente uma das trs condies vale:
- Os intervalos [d[u],f[u]] e [d[v], f[v]]
so disjuntos,
- O intervalo [d[u],f[u]] est contido no
intervalo [d[v],f[v]], e u um descendente
de v na rvore de busca em profundidade,
ou
- Vice-versa.
17

Corolrio 23.7

(Nesting dos intervalos dos descendentes)


Vrtice v um descendente prprio do
vrtice u na floresta de busca em
profundidade de um grafo G sse d[u]
< d[v] < f[v] < f[u].

18

Variaes de Busca em
Profundidade
O algoritmo de Busca em
Profundidade
usado como controle para
muitas
aplicaes em tempo linear.

1
4

Ex. Componentes Biconexos


(Tolerncia a falhas em redes)
Ex: No grafo ao lado, os seguintes
subgrafos
gerados permanecem conexos se
cair um
link qualquer: katiag@cin.ufpe.br

5
19

Busca em Largura
Cria um centro no vrtice inicial e forma
nveis ou camadas a partir deste
n.
1
5

6
1

6
3

4
2

2
7
20

Vrtices Brancos, Cinza e Pretos


- Brancos Valor inicial
- Cinza Aps serem descobertos
- Pretos Aps a descoberta de todos os adjacentes.
1

1
5

3
7

1
6
5

3
7

3
7

21

Busca em Largura
Applet para Busca em
Largura

22

Algoritmo para Busca em


Largura
Tome um vrtice qualquer v. Coloque v na fila F.
Enquanto F no for vazia faa
v Primeiro elemento da fila F
Para toda aresta (v, w) incidente a v faa
Se w no marcado ento
Inclua w em F

/* aresta de rvore

*/
seno se v = pai (w)
ento

/* aresta de rvore */

seno /* aresta de cruzamento */


23

Ao trmino de Busca em Largura


A busca em largura biparticiona as
arestas do grafo em arestas de rvore e
arestas de cruzamento.
1
5

3
4
2

1
7

24

Correo de Busca em Largura (BL)


Teorema 23.4 (Correo de BL)
Seja G = (V, E) um grafo direcionado ou
no direcionado, e suponha que o
algoritmo BL executado em G a partir
de um dado vrtive s V. Ento, durante
a sua execuo, BL descobre todo vrtice
v V alcanvel a partir do n fonte s, e
ao trmino,
d[v] = distncia (s, v) para todo v V
...
25

Busca em Largura vs.


Distncias
Teorema 23.4 (Correo de Busca em Largura)
......
Alm disso, para qualquer vrtice v <> s
alcanvel a partir de s, um dos menores
caminhos de compr. mnimo de s a v o
caminho de s a pred(v) seguido pela aresta
(pred(v), v).

26

Variaes de Busca em Largura


O algoritmo de Busca em Largura
tambm
largamente usado como controle
para aplicaes em tempo linear.
Ex. Broadcast de mensagens em uma
rede

27

Referncia Bibliogrfica
Leiam o Captulo 23 do livro de
Cormen, Leiserson, Rivest (Pgs. 465 a
497).
No esqueam os problemas.

28

Você também pode gostar