0% acharam este documento útil (0 voto)
23 visualizações29 páginas

Busca em Profundidade em Grafos DFS

O documento discute a técnica de busca em profundidade (depth-first search - DFS) em grafos. A DFS explora os vértices descobertos mais recentemente primeiro e produz uma árvore de profundidade. A DFS pode ser implementada recursivamente ou usando uma pilha. Sua complexidade é linear em relação ao número de vértices e arestas do grafo. A DFS é útil para determinar se um grafo contém ciclos e para realizar ordenação topológica em grafos direcionados acíclicos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
23 visualizações29 páginas

Busca em Profundidade em Grafos DFS

O documento discute a técnica de busca em profundidade (depth-first search - DFS) em grafos. A DFS explora os vértices descobertos mais recentemente primeiro e produz uma árvore de profundidade. A DFS pode ser implementada recursivamente ou usando uma pilha. Sua complexidade é linear em relação ao número de vértices e arestas do grafo. A DFS é útil para determinar se um grafo contém ciclos e para realizar ordenação topológica em grafos direcionados acíclicos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

TEORIA DOS GRAFOS

Márcio Antônio Duarte

UFCat – Ciência da Computação

email: marcioaduarte@[Link]
DFS (Depth-First Search)

Explorar vértices descobertos mais recentes primeiro;

Oposto de BFS: explora mais antigo primeiro;


Interpretação

procurar uma saída de um labirinto vai fundo atrás
da saída (tomando decisões a cada
encruzilhada);

volta a última encruzilhada quando encontrar um
beco sem saída (ou lugar já visitado).
DFS (Busca em Profundidade)

Explorar o grafo abaixo usando DFS

início: vértice 4

vizinhos encontrados em ordem crescente


Ordem de descobrimento dos vértices?
DFS (Árvore de Profundidade)

Árvore induzida pela busca em profundidade

Raiz: vértice de origem

Pai de v: nó que levou à descoberta de v
raiz: nó 4


Ordem da busca define árvore
DFS (Árvore de Profundidade)

Árvore induzida pela busca em profundidade

Raiz: vértice de origem

Pai de v: nó que levou à descoberta de v
raiz: nó 4


Ordem da busca define árvore
DFS (Árvore de Profundidade)

Árvore induzida pela busca em profundidade

Raiz: vértice de origem

Pai de v: nó que levou à descoberta de v
raiz: nó 4


Ordem da busca define árvore
DFS (Árvore de Profundidade)

Também se pode usar o esquema de corespara guiar a
busca:

Todos os vértices são inicializados brancos;

Quando um vértice v é descoberto pela primeira
vez, ele se torna cinza;

Quando todos os vértices adjacentes a v são
descobertos, v se torna preto.
DFS (Árvore de Profundidade)

Árvore induzida pela busca em profundidade

Raiz: vértice de origem

Pai de v: nó que levou à descoberta de v
raiz: nó 4


Ordem da busca define árvore
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Árvore de Profundidade)
DFS (Busca em Profundidade)
Exercício: faça a busca em profundidade no grafo
abaixo, mostrando a ordem de visita aos vértices.
DFS (Implementação)

Utilizando Recursão

[Link](u)
2. Marcar u como descoberto
3. Para cada aresta (u,v) incidente a u
4. Se v não estiver marcado
5. DFS(v) // chamada recursiva
6.
7. Desmarcar todos os vértices
8. Escolher vértice inicial s
9. DFS(s)
DFS (Implementação)

Utilizando Pilha

1. DFS(s)
2. Desmarcar todos os vértices
3. Definir pilha P com um elemento s
4. Enquanto P não estiver vazia
5. Remover u de P // no topo da pilha
6. Se u não estiver marcado
7. Marcar u como descoberto
8. Para cada aresta (u,v) incidente a u
9. Adicionar v em P // no topo
DFS (Complexidade)
Mesma complexidade que BFS!


O(|V| + |E|)

Complexidade linear

mesma ordem de grandeza do tempo necessário
para ler o grafo!
DFS (Aplicação)

Uma aplicação comum da DFS é determinar se um
grafo é cíclico

Isso acontece quando, ao percorrer uma aresta,
um vértice x se conecta a um vértice y que
não é branco
DFS (Aplicação)

Uma aplicação comum da DFS é determinar se um
grafo é cíclico

Isso acontece quando, ao percorrer uma aresta,
um vértice x se conecta a um vértice y que
não é branco


Algoritmo de busca em profundidade é facilmente
adaptado para esta tarefa!

Como?
DFS (Ordenação Topológica)

Ordenação topológicade um grafo direcionado
acíclico

Ordenação linear dos vértices do grafo tal que u
aparece antes de v se há uma aresta (u,v)
DFS (Ordenação Topológica)
Faça a ordenação topológica do grafo abaixo

Você também pode gostar