DFS: Depth-First Search (pesquisa em profundidade) Percursos e Conectividade em Grafos Depth-First Search. Implementação de DFS

Documentos relacionados
Percursos e Conectividade em Grafos Depth-First Search. DFS: Depth-First Search (pesquisa em profundidade)

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Análise e Síntese de Algoritmos

Grafos e Algoritmos de Busca

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

Grafos. Notas. Notas. Notas. Notas. Algoritmos elementares. Representação de grafos Lista de adjacências Matriz de adjacências Atributos

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

Grafos Parte 2. SCC-603 Algoritmos e Estruturas de Dados II. Profª. Rosane Minghim / Baseado em material de professores dos anos anteriores

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Teoria dos Grafos Aula 6

SCC-210 Algoritmos Avançados. Capítulo 9 Grafos. Adaptado por João Luís G. Rosa

Busca em Profundidade e em Largura

Caminhos mínimos de única origem

Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Projeto e Análise de Algoritmos

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

Grafos: algoritmos de busca

Algoritmos e Estruturas de Dados

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Grafos COM11087-Tópicos Especiais em Programação II

Teoria dos Grafos Aula 5

BCC204 - Teoria dos Grafos

O grau de saída d + (v) de um vértice v é o número de arcos que tem

grafo nós vértices arcos arestas

Teoria dos Grafos Aula 8

Facebook. Um grafo é uma rede. Estrutura de dados fundamental em Informática, tal como listas e árvores.

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

Desafios de Programação TCC Turma A-1

Aula 09. Percurso em grafo

BCC402 Algoritmos e Programação Avançada. Prof. Marco Antonio M. Carvalho Prof. Túlio Toffolo 2012/1

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Pesquisa em Grafos. Pedro Ribeiro 2016/2017 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2016/ / 52

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 48

Estruturas de Dados Grafos

II. Algoritmos sobre Grafos

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

INF 1010 Estruturas de Dados Avançadas

Análise e Síntese de Algoritmos

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Algoritmos e Estruturas de Dados II

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Complexidade de Algoritmos

Na última aula... Procurando um caminho. Certificados. Procurando um caminho

Grafos representação e aplicações. Prof. Guilherme Tomaschewski Netto

Melhores momentos AULAS 1-8

INF 1010 Estruturas de Dados Avançadas

Melhores momentos AULA 5

Na última aula... Algoritmos em Grafos 1º sem / 80

Universidade Federal de Alfenas

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

Grafos Parte 1. Aleardo Manacero Jr.

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Grafos IFRN. Prof. Robinson Alves

Algoritmos em Grafos

CONCEITO DE ÁRVORE CES-11. A raiz é o único nó que não possui ancestrais. As folhas são os nós sem filhos. Exemplos:

AED2 - Aula 22 Busca em largura, cálculo de distâncias

Análise e Síntese de Algoritmos

Na última aula... Procurando um caminho. Certicados. Problema: dados um digrafo G e dois vértices s e t decidir se existe um caminho de s a t

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados MEEC 2012/13. Objecto abstracto Dois tipos de entidades. Vértices representam

Grafos - O que é um grafo? Algoritmos e Estruturas de Dados LEE 2013/14. Objecto abstracto Dois tipos de entidades. Vértices representam

Busca em Largura. Adaptado de Humberto C. B. Oliveira

CES-11. Algoritmos e Estruturas de Dados

Grafos Direcionados. > Grafos Direcionados Representações Computacionais 1/36

Busca em Largura Letícia Rodrigues Bueno

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Na última aula... Algoritmos em Grafos 1º sem / 1

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Algoritmos Combinatórios: Backtracking com Bounding

CES-11. Árvores. Conceito de árvore. Definição recursiva de árvore Definições associadas a árvore. Ordenação dos nós de uma árvore

Árvores: Conceitos Básicos e Árvore Geradora

Análise de algoritmos

não descobertos descobertos explorados descoberta cruzamento

Estruturas de dados para listas arrays e listas ligadas

Resolução de Problemas. Universidade Católica de Pelotas Engenharia da Computação Disciplina: Inteligência Artificial

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Pesquisa em profundidade. 1 - Grafos não dirigidos

Algoritmos em Grafos COM11087-Tópicos Especiais em Programação I

BUSCA CEGA OU SEM INFORMAÇÃO (parte 2 Resolução de problemas por busca) *Capítulo 3 (Russel & Norvig)

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Cap. 2 Conceitos Básicos em Teoria dos Grafos

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 10: Introdução aos Grafos

Primeiro Trabalho de IA/SI: Buscas. Entrega: 03/03/2019 (2 semanas)

Inteligência Artificial 04. Busca Sem Informação (Cega) Capítulo 3 Russell & Norvig; Seções 3.4 e 3.5

Transcrição:

DFS: Depth-First Search (pesquisa em profundidade) Percursos e Conectividade em Grafos Depth-First Search Fernando Lobo Algoritmos e Estrutura de Dados II Assim que se descobre um nó, começa-se logo a explorar os descendentes desse nó. Quando não é possível explorar mais, volta-se para trás (backtracking). Ao contrário de BFS, a pesquisa pode recomeçar de novo. Isto é, todos os nós do grafo são explorados, mesmo que o grafo seja desconexo. Em vez de uma BFS Tree, produz uma DFS Forest (várias árvores, uma para cada componente conexa). 1 / 23 2 / 23 Implementação de DFS Implementação de DFS Usa-se um stack em vez de uma fila (e até podemos nem usar o stack, se implementarmos o algoritmo de forma recursiva). Mantemos dois timestamps em cada nó: v.d discovery time, instante em que v é descoberto. v.f finish time, instante em que todos os descendentes de v já foram descobertos. Estes timestamps são inteiros distintos entre 1 e 2 V v.d < v.f, v Também usamos um atributo color para cada nó: white não descoberto. gray descoberto mas ainda não terminado (ainda há descendentes por explorar). black terminado. Para um determinado nó v: v é white entre os instantes de tempo 1 e v.d v é gray entre v.d e v.f v é black entre v.f e 2 V 3 / 23 4 / 23

Pseudocódigo Pseudocódigo DFS(G) for each u G.V u.color = white u.π = nil time = 0 for each u G.V if u.color == white DFS-Visit(u) DFS-Visit(u) u.color = gray // u acaba de ser descoberto time = time + 1 u.d = time for each v G.Adj[u] // explora o arco (u, v) if v.color == white v.π = u DFS-Visit(v) / terminou de explorar os descendentes de u u.color = black time = time + 1 u.f = time 5 / 23 6 / 23 Complexidade de DFS Exemplo Complexidade de DFS = Θ(V + E). Θ e não apenas O como em BFS, porque aqui todos os nós e todos os arcos são examinados. Θ(V ) da inicialização. Θ(E) porque para cada nó u, são examinados Adj[u] arcos. v V Adj[v] = Θ(E) Notação na figura: d/f discovery time / finish time. 7 / 23 8 / 23

Classificação de arcos num grafo Exemplo (retirado de CLRS) Tree edge: Se pertencer à DFS Forest. (u, v) se v é descoberto ao explorar (u, v). Back edge: (u, v) em que v é antecessor de u. Forward edge: (u, v) em que v é descendente de u, e não é um Tree edge. Cross edge: todos os outros arcos do grafo. Se o grafo for não orientado, apenas existem Tree edges e Back edges. Notação: B back edge, F forward edge, C cross edge. 9 / 23 10 / 23 Grafo redesenhado (retirado de CLRS) Teorema dos parêntesis (ver demonstração no livro) Dados dois nós, u e v, uma das três coisas ocorre: 1. u.d < u.f < v.d < v.f ou v.d < v.f < u.d < u.f (u não é descendente de v, v não é descendente de u). 2. u.d < v.d < v.f < u.f (v é descendente de u). 3. v.d < u.d < u.f < v.f (u é descendente de v). Tree edges e forward edges de cima para baixo. Back edges apontam para antecessores. 11 / 23 12 / 23

Teorema dos parêntesis Ilustração do teorema dos parêntesis Designando u.d ( u.f ) v.d [ v.f ] Caso 1: ( ) [ ] ou [ ] ( ) Caso 2: ( [ ] ) Caso 3: [ ( ) ] Coisas do estilo ( [ ) ] ou [ ( ] ) nunca acontecem em DFS. Este exemplo é com o mesmo grafo de há pouco (retirado de CLRS). 13 / 23 14 / 23 Teorema do Caminho Branco (White-Path Theorem) Grafos orientados sem ciclos v é descendente de u, se e só se, no instante u.d, existe um caminho u v constituído apenas por nós white (com excepção de u que acaba de ficar gray). Em Inglês, Directed Acyclic Graphs (DAGs). São normalmente usados para expressar dependências. 15 / 23 16 / 23

Exemplo: precedências de disciplinas DAGs - Ordenação topológica Aplica-se a DAGs É uma ordem linear dos nós de um DAG de tal forma que se (u, v) E, então u aparece antes de v. Topological-Sort(G) 1 Chamar DFS(G) para obter v.f, v 2 Assim que cada nó termina, insere-o na cabeça de uma lista. 3 retorna a lista de nós. Nota: Os passos 2 e 3 dão os nós do grafo por ordem decrescente de finish time. 17 / 23 18 / 23 Complexidade? Exemplo com DFS a começar em AED-I Θ(V + E) Idêntico à complexidade de DFS. Inserir na lista é Θ(1). O.T. = SD, PI, MD, ArqC, AED-I, SO, AED-II, Comp. 19 / 23 20 / 23

Redesenhando o DAG Lemma Um grafo orientado G não tem ciclos se e só se o algoritmo DFS não der origem a back edges. Ver demonstração no vosso livro. Grafo pode ser redesenhado com os arcos a irem todos da esquerda para a direira. 21 / 23 22 / 23 Correcção do algoritmo Seja G = (V, E) um DAG. Teremos de mostrar que após correr DFS em G, v.f < u.f, (u,v) E Quando (u, v) é explorado em DFS, quais as cores de u e v? u é gray. v é gray? Não. Caso contrário v era antecessor de u, o que implicaria que (u, v) daria origem a um ciclo, contrariando o facto de G ser um DAG. v é white? Se sim, então v é descendente de u, o que implica que v.f < u.f v é black? Se sim, então v já terminou. Como estamos a explorar (u, v), ainda não terminamos u. Logo, v.f < u.f 23 / 23