Ciência da Computação GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira
Busca em Largura (Breadth-First Search) Um dos algoritmos mais simples para exploração de um grafo. Considerada também como uma busca por nível. Visita primeiro todos os vértices próximos da raiz de busca (por níveis), antes de visitar os mais distantes. - Dados um grafo G = (V, E) e um vértice s, chamado de fonte, a busca em largura sistematicamente explora as arestas de G de maneira a visitar todos os vértices alcançáveis a partir de s.
Busca em Largura (Breadth-First Search) Essa busca é dita em largura porque ela expande a fronteira entre vértices conhecidos e desconhecidos de uma forma uniforme ao longo da fronteira. O algoritmo descobre todos os vértices com distância k antes de descobrir qualquer vértice de distância k + 1.
Busca em Largura Vértice não explorado Vértice visitado Aresta não explorada Aresta encontrada Aresta de cruzamento
Busca em Largura (cont.)
Busca em Largura (cont.)
Busca em Largura (Breadth-First Search) Para controlar a busca, o algoritmo pinta cada vértice na cor branca, cinza ou preto. Todos os vértices iniciam com a cor branca e podem, mais tarde, se tornar cinza e depois preto. Branca: não visitado; Cinza: visitado; Preta: visitado e seus nós adjacentes visitados.
Busca em Largura (BFS) s Quando um vértice é visitado pela primeira vez, sua cor é modificada de branco para cinza.
Busca em Largura (BFS) Início
Busca em Largura (BFS) Explorando o vértice 1
Busca em Largura (BFS) Explorando o vértice 2
Busca em Largura (BFS) Explorando o vértice 3
Busca em Largura (Breadth-First Search) A partir de é possível reconstruir a árvore da busca em largura. Árvore de busca Grafo G
Busca em Largura (Breadth-First Search) Teorema: Seja G = (V, E) um grafo dirigido ou não, e suponha que BFS é executada a partir de um vértice s V. Então: Durante a busca, BFS descobre cada vértice v V que seja alcançável a partir de s, Ao final, d[v] = d(s, v) para todo v V. s
Busca em Largura (Breadth-First Search) Além disso, para qualquer vértice v s que seja alcançável a partir de s, um caminho mais curto de s para v é o caminho de s para [v] seguido da aresta ( [v], v). s
Busca em Profundidade (Depth-First Search) A estratégia é buscar o vértice mais profundo no grafo. As arestas são exploradas a partir do vértice v mais recentemente descoberto que ainda possui arestas não exploradas. Quando todas as arestas de v tiverem sido exploradas a busca anda para trás para explorar vértices adjacentes ao vértice do qual v foi descoberto (backtracking)
Busca em Profundidade (Depth-First Search) Vértice não explorado Vértice visitado Aresta não explorada Aresta encontrada Aresta de retorno
Busca em Profundidade (Depth-First Search)
Busca em Profundidade (Depth-First Search) Para controlar a busca, o algoritmo pinta cada vértice na cor branca, cinza ou preto. Todos os vértices iniciam com a cor branca e podem, mais tarde, se tornar cinza e depois preto. Branca: não visitado; Cinza: visitado; Preta: visitado e seus nós adjacentes visitados. A busca em profundidade também marca cada vértice com um timestamp. Cada vértice tem dois timestamps: d[v]: indica o instante em que v foi visitado (pintado com cinza); f[v]: indica o instante em que a busca pelos vértices na lista de adjacência de v foi completada (pintado de preto).
Busca em Profundidade (DFS)
Busca em Profundidade (DFS) Início
Busca em Profundidade (DFS) Explorando o vértice u
Busca em Profundidade (DFS) Explorando o vértice v
Busca em Profundidade (DFS) Explorando o vértice y
Busca em Profundidade (DFS) Explorando o vértice x
Busca em Profundidade (DFS) Explorando o vértice x
Busca em Profundidade (DFS) Explorando o vértice y
Busca em Profundidade (DFS) Explorando o vértice v
Busca em Profundidade (DFS) Explorando o vértice u
Busca em Profundidade (DFS) Retorna ao módulo principal
Busca em Profundidade (DFS) Explorando o vértice w
Busca em Profundidade (DFS) Explorando o vértice z
Busca em Profundidade (DFS) Encerrando
Algumas Aplicações Caminho mínimo para grafos não valorados; Redes Peer to Peer (BitTorrent): usado para encontrar todos os nós vizinhos; Crawlers em Motores de Busca (Search Engines): usado para construção dos índices; Redes Sociais Virtuais: usado para encontrar pessoas dada uma certa distância; Sistemas de Navegação GPS: usado para encontrar locais vizinhos; Broadcasting em Redes de Computadores: usado para alcançar todos os nós para pacotes de broadcast; Path Finding: usando para encontrar possíveis caminhos entre dois pontos (vértices); Detectar ciclos em um grafo: um grafo possui um ciclo se é detectada uma aresta de retorno (DFS); Verificação de grafos bipartidos.
Busca em Profundidade (DFS) Resolução de Labirintos
Busca em Profundidade (DFS) Resolução de Labirintos