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

Documentos relacionados
Busca em Profundidade e em Largura

Projeto e Análise de Algoritmos

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

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

Grafos e Algoritmos de Busca

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

Estruturas de Dados Grafos

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

5COP096 TeoriadaComputaçã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

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

Grafos: algoritmos de busca

Árvores: Conceitos Básicos e Árvore Geradora

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

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

Grafos - Representação

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

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

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

Grafos Caminhos mais Curtos

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

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

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

INF 1010 Estruturas de Dados Avançadas

APLICAÇÕES DE BUSCA EM GRAFOS

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

Universidade Federal de Alfenas

grafo nós vértices arcos arestas

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

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Complexidade de Algoritmos

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

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

INF 1010 Estruturas de Dados Avançadas

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

Algoritmos e Estruturas de Dados

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Conceitos Básicos da Teoria de Grafos

Algoritmos de Ordenação: Cota Inferior

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Teoria dos Grafos Aula 5

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

Classes, Herança e Interfaces

Análise e Síntese de Algoritmos

Introdução a Grafos Letícia Rodrigues Bueno

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres

Teoria dos Grafos Aula 6

Cap. 2 Conceitos Básicos em Teoria dos Grafos

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

Filas de Prioridades Letícia Rodrigues Bueno

IPRJ PROJETO E ANÁLISE DE ALGORITMOS LISTA DE EXERCÍCIOS 10

CIC 111 Análise e Projeto de Algoritmos II

Algoritmos e Estruturas de Dados II

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Algoritmos de Ordenação: HeapSort

Algoritmos em Grafos: Caminho Mínimo

Heapsort Letícia Rodrigues Bueno

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

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

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

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

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

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

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

Teoria dos Grafos Aula 8

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

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

Teoria dos Grafos. Profa. Alessandra Martins Coelho

Matemática Discreta 10

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

Informações Importantes! INF TURMA A

GRAFOS Conceitos Básicos (Parte 1)

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

AULA 13 PROJETO E ANÁLISE DE ALGORITMOS. Problema do caminho mais curto de uma única origem em grafos Karina Valdivia Delgado

AULA 11 PROJETO E ANÁLISE DE ALGORITMOS. Conceitos básicos e representação de grafos Karina Valdivia Delgado

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Algoritmos em Grafos

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

Caminhos mínimos de única origem

Estudo e implementação de heurísticas para determinação do caminho de menor custo para atender a rotas pré estabelecidas. Por: Charles Pereira

Web site. Profa. Patrícia Dockhorn Costa.

B-tree. B-Trees. Estrutura do nodo da B-tree. Balanceamento. Disposição dos elementos ordenados na B-tree. Exemplo de uma B-tree de ordem 3

Desafios de Programação TCC Turma A-1

Aula 08. Estruturas de dados Árvore e Grafo

Departamento de Engenharia de Produção UFPR 57

Árvore Geradora Mínima

5COP096 TeoriadaComputação

Sub-grafo. Árvore Geradora Mínima

2 Definição do Problema

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

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

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

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

Teoria da Complexidade Computacional

If969 - Algoritmos e Estruturas de Dados

Transcrição:

Fevereiro - 009

Definição de Grafo Listas de Adjacências de Técnicas da Classificação das Arestas Aplicação do de de 4 Grafo Transposto

Definição de Grafo Listas de Adjacências de Exemplos de Aplicação em Computação Verificar a existência de um caminho entre um objeto e outro (uma cidade e outra) Calcular a distância entre um objeto e outro (pontos de um metrô) Determinar quais objetos podem ser alcançados a partir de um determinado objeto (navegação na web)

Representação de Definição de Grafo Listas de Adjacências de Um grafo é constituído de um conjunto de vértices e um conjunto de arestas conectando pares de vértices. Um grafo pode ser orientado ou não orientado. 4 5 6 4 5 grafo orientado grafo não orientado

Definição de Grafo Listas de Adjacências de Definição de Grafo Um grafo orientado é um par (V, E) em que V é um conjunto finito de vértices e E é um conjunto de arestas com uma relação binária em V. 4 5 6 V={,,,4,5,6} E={(,),(,4),(,5),(,5),(,6),(4,),(5,4),(6,6)} Um grafo não orientado é um par (V, E) em que E é constituído de pares de vértices não ordenados. As arestas (u, v) e (v, u) são consideradas como única. V = {,,,4,5} E = {(,),(,4),(,),(,4),(,5),(,5),(4,5)} 4 5

Listas de Adjacências de Definição de Grafo Listas de Adjacências de Um grafo G = (V, E) pode ser representado por uma lista de adjacências, definida a partir de um arranjo de listas, uma para cada vértice em V. Para cada u V, a lista de adjacências Adj[u] contém (ponteiros para) todos os vértices v que podem ser alcançados diretamente a partir de u (existe uma aresta (u, v) E). A ordem de armazenamento dos vértices em cada lista de adjacências é arbitrária.

Definição de Grafo Listas de Adjacências de Representação de Listas de Adjacências 4 5 6 5 4 grafo orientado grafo não orientado 4 5 6 5 4 5 4 6 6 lista de adjacências 4 5 5 5 4 5 4 lista de adjacências 4

Ciclos Definição de Grafo Listas de Adjacências de Em um grafo orientado, um caminho (v 0, v, v,..., v k ) forma um ciclo se v 0 = v k e o caminho contém pelo menos uma aresta. 0 4 O caminho (0,,,,0) forma um ciclo 5 Em um grafo não orientado, v 0, v, v,..., v k forma um ciclo se v 0 = v k e o caminho contém pelo menos três arestas. Em ambos os casos, o ciclo é simples se os vértices v, v,..., v k são distintos. Um grafo sem ciclos é um grafo acíclico.

Técnicas da Classificação das Arestas A busca em profundidade é um algoritmo para caminhar no grafo, com a estratégia de buscar o mais profundo no grafo, sempre que possível. Na busca, as arestas são exploradas a partir do vértice v mais recentemente descoberto que ainda possui arestas não exploradas saindo dele. Quando não existem mais arestas a serem exploradas, a busca anda para trás. A busca em profundidade é a base para os algoritmos de: ordenação topológica obtenção dos componentes fortemente conectados

Técnicas da Classificação das Arestas Sempre que um vértice v é descoberto a partir de um u, a busca registra este evento atribuindo u a uma estrutura chamada antecessor[v]. Para acompanhar o andamento da busca, cada vértice recebe as cores branca, cinza ou preta. No início os vértices estão todos brancos. O tempo de descoberta do vértice (tornado cinza) é registrado em d[v] e o tempo de término do exame da lista de adjacentes de v é registrado em t[v] (nesse momento v se torna preto).

Técnicas da Classificação das Arestas Progresso do Percurso em Profundidade ( / ) ( / ) ( / ) 0 0 0 (a) (b) (c) Ao lado de cada vértice é indicado (tempo-de-descoberta / tempo-de-término).

Técnicas da Classificação das Arestas Progresso do Percurso em Profundidade ( / ) ( / ) ( / ) ( / ) ( / ) ( / 5 ) 0 0 0 ( / ) ( / 4 ) ( / 4 ) (d) (e) (f)

Técnicas da Classificação das Arestas Progresso do Percurso em Profundidade ( / 6 ) ( / 5 ) ( / 6 ) ( / 5 ) ( / 6 ) ( / 5 ) 0 0 0 ( / 4 ) ( / 4 ) ( 7 / ) ( / 4 ) ( 7 / 8 ) (g) (h) (i)

Técnicas da Classificação das Arestas de BuscaEmProfundidade(G) For Each vertice u em V Do cor[u] := BRANCO antecessor[u] := NIL 4 tempo := 0 5 For Each vertice u em V 6 Do If cor[u] = BRANCO 7 Then VisitaBEP(u) Fim VisitaBEP(u) cor[u] := CINZA tempo := tempo + d[u] := tempo 4 For Each v em Adj[u] 5 Do If cor[v] = BRANCO 6 Then antecessor[v] := u 7 VisitaBEP(v) 8 cor[u] := PRETO 9 tempo := tempo + 0 t[u] := tempo Fim Sempre que um vértice v é descoberto durante uma varredura na lista de adjacências de um vértice já descoberto u, a busca em profundidade registra u como antecessor de v.

Classificação das Arestas Técnicas da Classificação das Arestas A pode ser utilizada para a classificação das arestas de um grafo G = (V, E). Durante a, cada aresta (u, v) pode ser classificada na primeira vez em que é percorrida, através da cor do vértice v alcançado: Branco indica uma aresta de árvore; Cinza indica uma aresta de retorno; Preto indica uma aresta de avanço quando d[u] < d[v] e indica uma aresta de cruzamento quanto d[u] > d[v]

Classificação das Arestas Técnicas da Classificação das Arestas A classificação das arestas pode ser utilizada para verificar se um grafo orientado é acíclico ou contém um ou mais ciclos. Se uma aresta de retorno for encontrada durante a Busca em Profundidade, então existe um ciclo. O grafo abaixo contém um ciclo, e ao lado de cada aresta é mostrado o tipo (arv, ret, avan ou cruz). ( / 6 ) 0 arv ( / 5 ) ret arv cruz ( / 4 ) ( 7 / 8 ) ret

Aplicação do de de A de um grafo orientado acíclico G = (V, E) é uma ordenação linear de todos os seus vértices tal que se G contém uma aresta (u, v) então u aparece antes de v. Uma ordenação topológica de um grafo fornece a ordem em que as atividades devem ser processadas.

Aplicação do de de Os grafos orientados acíclicos são usados para indicar precedências entre eventos. Uma aresta direcionada num grafo orientado acíclico indica que a atividade u deve ser realizada antes da v. meias sapatos calças cinto camisa gravata relogio paleto

Aplicação do de de Aplicação do de Aplicação do algoritmo de para a marcação dos tempos de descoberta e término em cada vértice de um trecho do exemplo anterior: camisa calças camisa calças camisa calças gravata cinto gravata cinto gravata cinto paleto paleto paleto (a) (b) (c)

Aplicação do de de Aplicação do de camisa calças camisa calças camisa calças gravata cinto gravata cinto gravata ( / 5) cinto paleto ( / 4) paleto ( / 4) paleto (d) (e) (f)

Aplicação do de de Aplicação do de camisa ( / 8 ) calças camisa calças camisa calças gravata ( / 5) cinto (6 / ) ( / 5) gravata cinto (6 / 7) gravata ( / 5) cinto (6 / 7) ( / 4) paleto ( / 4) paleto ( / 4) paleto (g) (h) (i)

Aplicação do de de Aplicação do de ( / 8 ) (9 / ) ( / 8 ) (9 / 0 ) camisa calças camisa calças gravata ( / 5) cinto (6 / 7) gravata ( / 5) cinto (6 / 7) paleto ( / 4) paleto ( / 4) (j) (k)

Aplicação do de de Apresentação de Grafo com camisa ( / 8 ) (9 / 0 ) calças gravata ( / 5) cinto (6 / 7) ( / 4) paleto calças camisa cinto gravata paleto (9 / 0 ) ( / 8 ) (6 / 7) ( / 5) ( / 4) O grafo com ordenação topológica apresenta seus vértices organizados da esquerda para a direita, em ordem de tempo de término decrescente.

de Aplicação do de de O algoritmo simples a seguir ordena topologicamente um grafo acíclico orientado utilizando o algoritmo de Busca em Profundidade: OrdenacaoTopologica(G) Chamar BuscaEmProfundidade(G) para calcular o tempo de término t[v] para cada vértice v A medida que cada vértice é terminado, inserir o vértice à frente de uma lista ligada Retornar a lista ligada de vértices Fim

Exercício Dirigido Aplicação do de de Mostre a ordenação de vértices produzida pelo algoritmo OrdenacaoTopologica(G) quando ele é executado sobre o grafo acíclico orientado abaixo: meias sapatos calças cinto camisa gravata relogio paleto

Grafo Transposto de um Grafo Os componentes conexos de um grafo são as classes de equivalência de vértices sob a relação é acessível a partir de. Um grafo orientado é fortemente conectado se cada um de dois vértices quaisquer é acessível a partir do outro. Os componentes fortemente conectados de um grafo orientado são as classes de equivalência de vértices sob a relação são mutuamente acessíveis.

Grafo Transposto de um Grafo Grafo orientado G e seus componentes fortemente conectados: 4 Grafo G 4 Componentes Fortemente Conectados

Definição de Grafo Transposto Grafo Transposto O algoritmo para a obtenção dos componentes fortemente conectados em um grafo orientado G utiliza o grafo transposto G T de G. Grafo Transposto Seja o grafo orientado G = (V, E). O grafo transposto de G é definido como sendo o grafo G T = (V, E T ), onde E T = {(u, v) : (v, u) E}. Isto é, E T contém as arestas de G com suas direções invertidas.

Exemplo de Grafo Transposto Grafo Transposto Os grafos G e G T possuem os mesmos componentes fortemente conectados: 4 4 Grafo G Grafo G T 4 4 Componentes Fortemente Conectados

Grafo Transposto para Obtenção de Componentes Fortemente Conectados O algoritmo simples a seguir apresenta o algoritmo para obter os componentes fortemente conectados utilizando a Busca em Profundidade: ObterCFC(G) Chamar BuscaEmProfundidade(G) para calcular o tempo de término t[u] para cada vértice u Gerar GT Chamar BuscaEmProfundidade(GT), realizando a busca a partir do vértice de maior t[u] obtido na linha. Se a nova busca n~ao alcançar todos os vértices, reiniciar uma nova busca em profundidade a partir do vértice de maior t[u] dentre os restantes 4 Retornar os vértices de cada arvore da floresta obtida na busca da linha como um componente fortemente conectado separado Fim

Grafo Transposto Execução do A execução do algoritmo no grafo G se inicia no vértice 0 e são calculados os tempos de descoberta e término. O grafo transposto G T é gerado, e a busca em profundidade em G T resulta em duas árvores: raiz em 0 e raiz em. ( / 8 ) ( / 7 ) arv 0 ( / 6 ) ( / 4 ) ret 0 0 avan ret arv cruz arv arv arv cruz ( 4 / 5 ) ( / 6 ) ( 7 / 8 ) ( / 5 ) Grafo Orientado Grafo Transposto Arvores Resultantes

Execução do Grafo Transposto As duas árvores: raiz em 0 e raiz em representam os componentes fortemente conectados do grafo, e um grafo de componentes acíclicos pode ser obtido pela condensação dos componentes fortemente conectados de G. ( / 8 ) 0 arv ( / 7 ) ( / 6 ) 0 ret ( / 4 ) 0 0 avan ret arv cruz arv arv arv cruz ( 4 / 5 ) ( / 6 ) ( 7 / 8 ) ( / 5 ) Grafo de Componentes Grafo Orientado Grafo Transposto Arvores Resultantes Aciclico

Bibliografia Utilizada Grafo Transposto Nívio Ziviani. Projeto de s com Implementações em Pascal e C. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. s - Teoria e Prática.