Você está na página 1de 3

Busca em Grafos

Helbert Sousa Reis


November 20, 2018

1 Resumo
Pretende-se com esse trabalho aprender de forma teórica os conceitos de
grafos aprendidos de forma prática no decorrer da disciplina Teoria dos Grafos,
trazendo os conceitos de Busca em Profundidade e Busca em Largura, aplicados
em grafos implementados por matriz de adjacência e lista de adjacência.

2 Introdução
Esse trabalho tem o intuito de estudar os algoritmos de busca em grafos, quais
são elas, sua complexidade, gasto de memória, tempo de execução entre outros
fatores que façam a medição dos algoritmos em questão.

3 Conceitos
3.1 Caminhamento
De acordo com Goodrich and Tamassia, Um caminhamento é um procedi-
mento sistemático para explorar um grafo examinando todos os seus vértices e
arestas.Um caminhamento é eficiente se ele visita todos os vértices e as arestas
em tempo proporcional a seu número, ou seja, em tempo linear.

4 Busca em Grafos
4.1 Busca em Profundidade
É um caminhamento feito através do primeiro vértice até a último vértice al-
cançável e quando chega-se ao último, volta-se através da técnica de backtrack-
ing, utilizando a stack do sistema, já que ao se fazer o caminho é armazenado
quais os vértices foram visitados.

Utilizado para encontrar um caminho de um vértice a outro, determinar se


um grafo é conexo ou não e achar uma árvore de cobertura de um grafo conexo,
além de servir como base para outros algoritmos em grafos.

1
A complexidade de tempo é O(V + E) pois a inicialização custa Θ(V ) e o
tamanho da lista percorrida é O(E).

A dificuldade esteve em entender a sua chamada recursiva e implementar


para as duas representações, sendo elas, matriz e lista de adjacências.
DFS(G)
for cada vertice u ← V {G}
do
cor[u] ← BRAN CO
φ[u] ← N U LL
end
tempo ← 0
for cada vertice u ∈ V {G}
do
if cor[u] == BRAN CO
then
DF S − V ISIT (u)
end
end
DFS-VISIT(u)
cor[u] ← CIN ZA . u é descoberto
tempo ← tempo + 1
d[u] ← tempo
for cada vertice u ∈ Adj[u] . Explora (u,v)
do
if cor[u] == BRAN CO then
π[v] ← u
DF S − V ISIT (v)
end
end
cor[u] ← P RET O . Marca como terminado
f [u] ← tempo ← tempo + 1
Algorithm 1: Busca em Profundidade

4.2 Busca em Largura


Seja G = (V, A) e um vértice s, o algoritmo de busca em largura (BF S)
percorre as arestas de G descobrindo todos os vértices atingı́veis a partir de s.

BF S determina a distância de cada um desses vértices a s.

Por ser um algoritmo que caminha através dos próximos vértices que estão
diretamente ligados ao nó de origem, vizinhos ao vértice em que se está, o
caminho criado é chamado de caminho mı́nimo em um grafo não dirigido. Serve
como base para outros algoritmos em grafo.

A complexidade de tempo do BF S é O(V + E) , onde V é o número de


vértices e E é o número de arestas.

2
A dificuldade esteve em entender como funcionava o passo a passo da fila
para enfileirar e desenfileirar a lista de vértices adjacentes e fazer funcionar para
as duas implementações, sendo elas, matriz e lista de adjacências.

BFS(G,s)
for cada vertice u ← V {G}
do
cor[u] ← BRAN CO
d[u] ← ∞
α[u] ← N ull
end
cor[u] ← CIN ZA
d[u] ← ∞
α[u] ← N ull
Q ← 0 EN QU EU E(Q, s)
while Q 6= 0 do
u ← DEQU EU E(Q)
for v ← Adj[u]
if cor[u] == BRAN CO
then
cor[u] ← CIN ZA
current section becomes this one;
end
do
cor[u] ← P RET O
end
end
Algorithm 2: Busca em Largura

5 Busca em Profundidade Iterativa


Sua definição é parecida com a busca em profundidade recursiva, porém essa
utiliza uma uma pilha explı́cita para fazer o caminho de retorno aos vértices já
visitados.

Após compreender a busca em profundidade recursiva a dificuldade encon-


trada estava em como reorganizar o algoritmo para rodar de forma iterativa.
Foi utilizado para isso uma pilha com os algoritmos de empilhar e desempilhar
fazendo o papel da chamada recursiva.

References
Michael T Goodrich and Roberto Tamassia. Projeto de algoritmos: fundamen-
tos, análise e exemplos da internet. Bookman Editora, 2009.
TH Cormen, T Leiserson, R Rivest, and C Stein. Algoritmos: Tradução da
segunda edição americana, 2002.

Você também pode gostar