O documento descreve o algoritmo de busca em largura (breadth-first search) para grafos. Ele começa explorando todos os vértices vizinhos da raiz e, em seguida, os vértices vizinhos desses vértices, repetindo o processo até encontrar o alvo da busca ou todos os vértices terem sido explorados. O algoritmo garante que nenhum vértice ou aresta seja visitado mais de uma vez usando uma fila. Sua complexidade é O(V+E) no tempo e O(V) no espaço, onde V é o número de vé
3. É um algoritmo
que recupera
informações
armazenadas
dentro de
alguma
estrutura de
dados.
DEFINIÇÃO
DE
ALGORITM
O DE
BUSCA
4. EXEMPLOS DE ALGORITMOS DE BUSCA
Busca Sequencial
Busca Binária
Busca em
profundidade
Busca em Largura
A*
Dijkstra
5. É um conjunto de
vértices e um conjunto
de arestas que
conectam qualquer
par de vértices.
ESTRUTURA DE DADOS: GRAFO
6. Busca em largura é um algoritmo de busca
em grafos utilizado para realizar uma busca
ou travesia num grafo e estrutura de dados do
tipo árvore. Intuitivamente, você começa pelo
vértice raiz e explora todos os vértices vizinhos.
Então, para cada um desses vértices mais
próximos, exploramos os seus vértices vizinhos
inexplorados e assim por diante, até que ele
encontre o alvo da busca. Em outras palavras,
podemos dizer que o algoritmo realiza uma
busca exaustiva num grafo passando por todas
as arestas e vértices do grafo.
ALGORITMO BUSCA EM LARGURA
9. def getWeight(self, n1, n2):
if n1 in self and n2 in self:
if n2 in self.nodes[n1]:
return self.nodes[n1][n2]
elif n1 == n2:
return 0
return float("inf")
return False
10. def addEdge(self, n1, n2, weight=1):
if not n1 in self.nodes:
self.nodes[n1] = {}
self.nodes[n1][n2] = weight
if self.directed is False:
if not n2 in self.nodes:
self.nodes[n2] = {}
self.nodes[n2][n1] = weight
11. def add(self, n, G = None):
if not n in self:
self.nodes[n] = {}
if G:
if n in G:
self.nodes[n]= G.getEdges(n)
13. BUSCA EM LARGURA
É um algoritmo de
busca em grafos
utilizado para
realizar uma busca
ou travessia num
grafo e estrutura de
dados do tipo
árvore.
14. A ideia é começar
pelo vértice raiz e
explora todos os
vértices vizinhos.
Então, para cada um
desses vértices mais
próximos, exploramos
os seus vértices
vizinhos inexplorados
e assim por diante,
até que ele encontre
o alvo da busca.
BUSCA EM LARGURA
15. Realiza uma busca
exaustiva num grafo
passando por todas
as arestas e vértices
do grafo.
Deve garantir que
nenhum vértice ou
aresta será visitado
mais de uma vez,
então utiliza uma
fila para tal.
BUSCA EM LARGURA
16. Cinza = esta na
fila
Preto = já foi
inspecionado
17. Complexidade de
tempo: O(|E| + |V|).
Complexidade de
espaço: O(|V|)
Sendo |E| = arestas
Sendo |V| = vértices
BUSCA EM LARGURA
18. Legenda:
F - Fila(FIFO)
G - Grafo
s, v, w representam vértices do grafo onde listDeAdja
representa a lista de adjacência de um vértice
BUSCA EM LARGURA
19. BuscaEmLargura
escolha uma raiz s de G
marque s
insira s em F
enquanto F não está vazia faça
veja v o primeiro vértice de F
para cada w ∈ listaDeAdja de v faça
se w não está marcado então
visite aresta entre v e w
marque w
insira w em F
senão se w ∈ F então
visite aresta entre v e w
fim se
fim para
retira v de F
fim enquanto
22. while(len(fila)>0):
vert1 = fila[0]
listaAdj = self.getEdges(vert1)
for i in listaAdj:
if(i not in vertMarcados):
vertMarcados.append(i)
tamVertMarcados += 1
fila.append(i)
fila.pop(0)