Sei sulla pagina 1di 51

SCC0216 - Modelagem Computacional em Grafos

Busca em grafos

Prof. Alneu (alneu@icmc.usp.br ) / Profa. Rosane (rminghim@icmc.usp.br)


PAE: Alan (alan@icmc.usp.br) / Henry (henry@icmc.usp.br)
Busca
Imagine que voc est em uma nova cidade
e deseja encontrar um bar para beber um
chopp
Se voc tem um mapa, voc pode descobrir
como sair de onde voc est para chegar ao
bar
Se voc no tem um mapa, voc poderia
caminhar sem rumo at encontrar um bar
Ou voc poderia procurar sistematicamente por
um bar
Busca
Caso voc represente sua cidade em um grafo,
com vrtices representado cruzamentos e
arestas ruas, voc poderia, por exemplo,
utilizar o seguinte algoritmo para encontrar
bar

1. Procure um bar (visite um n)


2. Caso no encontrou um bar, v para um local
no visitado por voc e repita o passo 1
3. Se voc encontrou um bar, v e beba um chop
4. Aps o dcimo chopp, saia e caia na sarjeta
Busca
Uma busca em grafo pode resolver
problemas da mesma forma:
Ele sabe onde ele est (n inicial, conjunto de
informaes inicial)
Ele sabe onde deseja ir (n objetivo)
Ele sabe como ir para um prximo n

Resolver problema envolve a busca pelo


estado objetivo
Busca em rvore

Problemas de busca so Ni
frequentemente descritos
utilizando diagramas de rvores
N inicial = onde a busca comea
N objetivo = onde ela termina (Fig 1)
Objetivo: Encontrar um caminho
que ligue o n inicial a um n
objetivo No

Fig 1
Busca em uma rvore

Entrada:
Descrio dos ns inicial e objetivo
Procedimento que produz os sucessores de um n
arbitrrio
Sada:
Sequncia legal de ns iniciando com o n inicial e
terminando com o n objetivo
Exemplos: encontrar o menor caminho entre S e G
no mapa a seguir.
Exemplo

Dado o mapa (grafo) abaixo, encontrar a


menor distncia de S a G
4 4
A B C
3
5 5
S G
4 3
2
D E 4
F
S Denota o caminho S-D

A D

B D A E

C E E B B F

D F B F C E A C G

G C G F
Denota o caminho S-D-A-B-E-
F G
O problema TSP

Considere as rotas definidas entre estas


quatro cidades:
B
7hrs 6hrs

D
8hrs
A
9hrs

C
5hrs 6hrs
O problema TSP
O problema do TSP
representado como
A
rvore de busca

C D
B

C D D C
B B

D C D
B C B
Exemplo: palavras cruzadas

Fig 2
Uma rvore de busca

Uma busca pode ser definida graficamente:

Estado
inicial

Estado
objetivo

O objetivo atravessar a rvore partindo do


estado inicial at o estado objetivo
Tipos de busca
Busca em profundidade envolve buscar o final
de um caminho antes de tentar um caminho
alternativo:

Estado
inicial

Estado
final
Tipos de busca (cont)
Busca em largura envolve escolher um
caminho e segui-lo at o prximo ponto de
deciso ou at o objetivo ser atingido:

Estado
Inicial

Estado
Final
Problemas da busca
Com o aumento da rvore de deciso e do
nmero de possveis caminhos, o tempo de
busca aumenta
Existem vrias formas de reduzir o tempo de
busca (busca heurstica ou informada)
Possveis situaes
Mais de um n objetivo
Mais de um n inicial
Nestas situaes
Encontrar qualquer caminho de um n inicial para
um n objetivo
Encontrar melhor caminho
Definies importantes
Profundidade: nmero de ligaes entre um
dado n e o n inicial
Largura: nmero de sucessores (filhos) de um
n
Algoritmo bsico de busca (rvore)
1 Definir um conjunto L de ns iniciais;
2 Se L vazio
Ento Busca no foi bem sucedida
Seno Escolher um n n de L;
3 Se n um n objetivo
Ento Retornar caminho do n inicial at n;
Parar
Seno Remover n de L;
Adicionar a L todos os filhos de n, rotulando
cada um com o seu caminho at o n inicial;
Voltar ao passo 2
Algoritmos de Busca
Existem vrios algoritmos de busca
diferentes, o que os distingue a maneira
como o n n escolhido no passo 2
Mtodos de busca
Busca cega: a escolha depende da posio do n
na rvore de busca
Busca heurstica: A escolha utiliza informaes
especficas do domnio para ajudar na deciso
Busca cega

Tcnicas de busca cega


Grande nmero de mtodos
Busca em Profundidade
Busca em Largura
Tcnicas de busca cega

Busca em Profundidade (BP)


A rvore examinada de cima para baixo
Aconselhvel nos casos onde os caminhos
improdutivos no so muito longos
Busca em Largura (BL)
A rvore examinada da esquerda para a direita
Aconselhvel quando o nmero de ramos no
muito grande
Algoritmo BP

1 Definir um conjunto L de ns iniciais


2 Seja n o primeiro n de L;
Se L vazio
Ento Busca no foi bem sucedida
3 Se n um n objetivo
Ento Retornar caminho do n inicial at n;
Parar
Seno Remover n de L;
Adicionar ao incio de L todos os filhos de n,
rotulando
cada um com o seu caminho at o n inicial;
Voltar ao passo 2;
Busca em profundidade
d=0
1

2 9 15 d=1

3 8 10 13 16 17 d=2

4 11 12 14 18 d=3

5 6 7 d=4
Algoritmo BL
1 Definir um conjunto L de ns iniciais
2 Seja n o primeiro n de L;
Se L vazio
Ento Busca no foi bem sucedida
3 Se n um n objetivo
Ento Retornar caminho do n inicial at n;
Parar
Seno Remover n de L;
Adicionar ao final de L todos os filhos de n,
rotulando
cada um com o seu caminho at o n inicial;
Voltar ao passo 2;
Busca em largura
d=0
1

2 3 4 d=1

5 6 7 8 9 10 d=2

d=3
11 12 13 14 15

d=4
Exemplo 1: Dada a rvore abaixo, utilizando BP,
indique: a) Memria mxima e b) Nmero mnimo
de passos necessrios para atingir um dos ns
objetivos
d=0
1

2 3 4 d=1

5 6 7 8 9 10 d=2

d=3
11 12 13 14 15 16 17

d=4
18 19 20 20 21
Resposta ao exemplo 1
a) 1 L = {1}
2 L = {21, 31,41}
3 L = {521,621,31,41}
4 L = {11521, 621,31,41}
5 L = {1811521, 1911521, 2011521 621,31,41}
6 L = {1911521, 2011521 621,31,41}
7 L = {2011521, 621,31,41}
8 L = {621,31,41}
9 L = {31,41}
....
18 L = {151041,161041,171041}
Observaes

BP e BL no precisam ser realizadas em


uma ordem especfica
Memria utilizada pelas duas tcnicas
BP: precisa armazenar todos os filhos no
visitados de cada n entre n atual e n inicial
BL: antes de examinar n a uma profundidade
d, necessrio examinar e armazenar todos
os ns a uma profundidade d - 1
BP utiliza menos memria
Observaes

Quanto ao tempo
BP geralmente mais rpida
Mtodos de busca cega no examinam a rvore de
forma tima, o que poderia minimizar o tempo
gasto para resolver o problema
Tcnicas exaustivas de busca

Completude: a soluo sempre ser


encontrada?
Optimalidade: o caminho mais curto ser
encontrado antes dos caminhos mais
longos?
Eficincia: quais so os requisitos de memria
e tempo de execuo?
Percorrendo um grafo

Percorrendo um Grafo

Percorrer um grafo um problema fundamental

Deve-se ter uma forma sistemtica de visitar as


arestas e os vrtices

O algoritmo deve ser suficientemente flexvel para


ajustar-se diversidade de grafos

31
Eficincia

Percorrendo um Grafo

Eficincia

No deve haver repeties (desnecessrias) de visitas


a um vrtice e/ou aresta (apenas duas visitas a cada
aresta)

32
Correo

Percorrendo um Grafo

Correo

Todas os vrtices e/ou arestas devem ser visitados

33
Soluo

Percorrendo um Grafo

Soluo

Marcar os vrtices com...

no visitados
visitados
processados

34
Soluo

Percorrendo um Grafo

Soluo

Manter uma lista de vrtices no estado visitados

H duas possibilidades de implementao:


Fila
Pilha

35
Busca em Largura BFS
Percorrendo um Grafo

BFS Breadth-First Search

Em grafos no-dirigidos cada aresta visitada duas


vezes

Em grafos dirigidos cada aresta visitada uma nica


vez

36
BFS

{ Percorre um grafo G a partir de um vrtice


inicial s informado. Pode realizar processa-
mento medida que visita vrtices e arestas }

Descobre todos os vrtices alcanveis a partir


de s;
Calcula a distncia de s a cada vrtice alcanvel;
Gera uma rvore em largura com raiz em s com todos
os vrtices alcancveis v, tal que o caminho na
rvore corresponde ao menor caminho entre s e v.

37
BFS (G,s)
for each vertex u V[G] {s} do
color[u] = WHITE
d[u] = INF
p[u] = NIL
end-for
color[s]= GRAY, d[s] = 0, p[s] = NIL
initialize(Q)
enqueue(Q,s)
while (not empty(Q)) do
u = dequeue[Q]
processe o vrtice u conforme desejado
for each v Adj[u] do
processe a aresta (u,v) conforme desejado
if color[v] = WHITE then
color[v] = GRAY
d[v] = d[u] + 1
p[v] = u
enqueue(Q,v)
end-if
end-for
color[u] = BLACK
end-while 38
BFS exemplo

Percorrendo um Grafo: BFS

2
3

6 5

39
BFS Tree

Percorrendo um Grafo: BFS Tree

2 6
5

3 4

40
Complexidade do BFS
O(|V | + |E|), ou seja, linear em relao ao tamanho da
representao de G por lista de adjacncias:

Todos os vrtices so empilhados/desempilhados no mximo


uma vez. O custo de cada uma dessas operaes O(1), e
elas so executadas O(|V|) vezes.

A lista de adjacncias de cada vrtice percorrida no mximo


uma vez (quando o vrtice desempilhado). O tempo total
O(|E|) (soma dos comprimentos de todas as listas, igual ao
nmero de arestas)

Inicializao O(|V|)

41
Busca em Profundidade DFS
Percorrendo um Grafo

DFS Depth First Search

Recursivo, eliminando assim a necessidade de uma


estrutura de lista (fila ou pilha)

42
DFS
{ Percorre um grafo G. Pode realizar processa-
mento medida que visita vrtices e arestas }

DFS-graph (G)
for each vertex u V[G] do
color[u] = WHITE
p[u] = NIL
end-for
time = 0
for each vertex u V[G] do
if color[u] = WHITE then
inicialize um novo componente
DFS-visit(u)
end-if
end-for

43
DFS
DFS-visit(u)
color[u] = GRAY
time = time + 1
d[u] = time
processe o vrtice u conforme desejado
for each v Adj[u] do
processe a aresta (u,v) conforme desejado
if color[v] = WHITE then
p[v] = u
DFS-visit(v)
end-if
end-for
color[u] = BLACK
f[u] = time = time + 1

44
DFS

Percorrendo um Grafo: DFS

2
3

6 5

45
DFS Tree
Percorrendo um Grafo: DFS Tree
1

2 6

46
Complexidade do DFS

O(|V| + |E|)

No algoritmo principal, cada for O(|V|). O DFS-visit


chamado exatamente uma vez para cada vrtice
de |V| (na pior das hipteses)

No DFS-visit, o lao executado | adj[v] | vezes,


i.e., O(|E|) no total

47
DFS

Uma aplicao clssica do DFS consiste em decompor um


grafo direcionado (dgrafo) em componentes fortemente
conexos.

Um grafo direcionado fortemente conexo se quaisquer dois


vrtices so mutuamente alcanveis entre si.

Um componente fortemente conexo de um grafo um sub-


conjunto maximal C de vrtices de V tal que qualquer par de
vrtices de C mutuamente alcanvel.

Algoritmo no Cormen, p. 554; ver tambm no Ziviani


48
Tarefas
1. Escrever uma verso no-recursiva do DFS
Dica: todo algoritmo recursivo usa uma pilha implicitamente
2. Escreva um algoritmo que verifique se um dado grafo
G(V,E) acclico.
Dica: a soluo uma aplicao do algoritmo DFS. Se na
busca em profundidade encontrada uma aresta (u,v) E
conectando um vrtice u com um seu antecessor v na rvore
de busca em profundidade, ento o grafo tem ciclo.
Igualmente, se G tem ciclo uma aresta desse tipo ser
encontrada em qualquer busca em profundidade em G
3. Escreva um algoritmo que determina as componentes
fortemente conexas de um grafo direcionado G(V,E)
Dica: soluo tambm aplica algoritmo de DFS

49
Caminhos mais curtos
Em grafos no-orientados e no-valorados o
algoritmo BFS(u) produz uma rvore de
caminhos mais curtos entre u (origem) e
todos os demais vrtices do grafo
alcanveis a partir dele.

Assim, o vetor antecessor p[ u] capaz de


fornecer o caminho mais curto (menor
nmero de arestas) entre u e v, para
qualquer v em V, se ele existir.
50
Caminhos mais curtos (algoritmo)
Dado o vetor antecessor aps BFS(v):

Imprimir_caminho_mais_curto(origem, v:tipoVrtice)
Se origem = v escreve (origem)
seno
Imprimir_caminho_mais_curto(origem, antecessor(v))
escreve(v)
fim se
Fim Imprimir_caminho_mais_curto

Obs: escreve pode ser qualquer procedimento de armazenamento ou


impresso do caminho.

51

Potrebbero piacerti anche