Universidade Federal de Alfenas

Documentos relacionados
Grafos Orientados (digrafos)

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

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

Universidade Federal de Alfenas

Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica (continuação) Prof. Humberto Brandã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

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

Percursos em um grafo

Projeto e Análise de Algoritmos

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

Conceitos Básicos da Teoria de Grafos

Percursos em um grafo

76) 1.1 Sim 1.2 Não 1.3 Não

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

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

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

Árvores: Conceitos Básicos e Árvore Geradora

5COP096 TeoriadaComputação

Teoria dos Grafos Aula 6

Estruturas de Dados Grafos

Universidade Federal de Alfenas

GRAFOS. Prof. André Backes. Como representar um conjunto de objetos e as suas relações?

Sub-grafo. Árvore Geradora Mínima

Conceitos Básicos Isomorfismo de Grafos Subgrafos Passeios em Grafos Conexidade

Lista 11. Geometria, Coleção Profmat, SBM. Problemas selecionados das seções 7.2 (pág. 311) e 7.3 (pág. 329).

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

Algoritmos e Estruturas de Dados II

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

Universidade Federal de Alfenas

Introdução à Teoria dos Grafos (MAC-5770) IME-USP Depto CC Profa. Yoshiko. Capítulo 3

PCC173 - Otimização em Redes

GRAFOS Conceitos Básicos (Parte 1)

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

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

MATEMÁTICA DISCRETA. Patrícia Ribeiro 2018/2019. Departamento de Matemática, ESTSetúbal 1 / 47

Grafos Árvores Geradoras Mínimas

Árvore Geradora Mínima

DEPARTAMENTO DE MATEMÁTICA Matemática 7 MA07A TURMA T51 Prof. Luiz Antonio Kretzschmar

Grafos: algoritmos de busca

BCC204 - Teoria dos Grafos

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

ESTRUTURAS DE DADOS. prof. Alexandre César Muniz de Oliveira. 1. Introdução 2. Pilhas 3. Filas 4. Listas 5. Árvores 6. Ordenação 7. Busca 8.

( ) ( ) ( ) ( ) ( ) ( )

Questões. 2ª Lista de Exercícios (Geometria Analítica e Álgebra Linear) Prof. Helder G. G. de Lima 1

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Teoria dos grafos. Caminho euleriano e Hamiltoniano. Prof. Jesuliana N. Ulysses

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Teoria dos Grafos Caminhos. Profª. Alessandra Martins Coelho

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

não descobertos descobertos explorados descoberta cruzamento

x y Grafo Euleriano Figura 1

BCC204 - Teoria dos Grafos

Teoria dos Grafos Aula 5

Grafos: árvores geradoras mínimas. Graça Nunes

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

2. Ordenação por Seleção

PLANO DE DISCIPLINA DISCIPLINA: Algoritmos e Programação

GRAFOS Aula 04 Caminhos, Conexidade e Distância Max Pereira

Teoria dos Grafos. Árvores

INF 1010 Estruturas de Dados Avançadas

Aula 3 Vetores no espaço

CI065 CI755 Algoritmos e Teoria dos Grafos

SIN5013 Análise de Algoritmos e Estrutura de Dados - 1o Semestre de 2019

Introdução a Grafos Letícia Rodrigues Bueno

Aula 09. Percurso em grafo

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

Teoria dos Grafos. Profa. Alessandra Martins Coelho

Grafos Caminhos mais Curtos

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

Teoria dos Grafos Aula 2

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

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

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

Filas de Prioridades Letícia Rodrigues Bueno

Teoria dos Grafos. Edson Prestes

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

PLANO DE DISCIPLINA DISCIPLINA: Algoritmos e Programação

Informações Importantes! INF TURMA A

Programa. 1 Parte 1 - Conjuntos e Aplicações. 1 Conjuntos. 4 Indução Matemática e Divisibilidade. 5 Congruências Lineares

Grafos IFRN. Prof. Robinson Alves

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

grafo nós vértices arcos arestas

Prof. Marco Antonio M. Carvalho

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

Teoria dos Grafos Aula 2

GRAFOS Aula 03 Representações de Grafos Max Pereira

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

Programa Analítico de Disciplina SIN213 Projeto de Algoritmos

Cap. 2 Conceitos Básicos em Teoria dos Grafos

LISTA EXTRA DE EXERCÍCIOS MAT /I

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

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

2 Definição do Problema

Oalgoritmo de Dijkstra

Algoritmos em Grafos

Esta edição do Diário Oficial contém:

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

Transcrição:

Universidade Federal de Alfenas Algoritmos em Grafos Aula 11 Conectividade Prof. Humberto César Brandão de Oliveira humberto@bcc.unifal-mg.edu.br

Discussão preliminar sobre Conectividade A conectividade está relacionada a passagem de um vértice a outro em um grafo através de ligações existentes. Está passagem diz respeito a atingibilidade. Exemplos na prática: Um vértice servidor pode enviar mensagens de dados para um determinado cliente? Você consegue ir de carro da cidade X para a cidade Y?

Discussão preliminar sobre Conectividade Conectividade em grafos não orientados a b a b a b a b a b c d c d c d c d c d G 0 G 1 G 2 G 3 G 4 Podemos ilustrar a atingibilidade na seqüência acima. Dado um gravo trivial G=(V, ), adicionamos sucessivas ligações ao conjunto de arestas, para aumentarmos a atingibilidade entre vértices.

Discussão preliminar sobre Conexidade Conexidade em grafos orientados A atingibilidade entre vértices também pode ser observada em grafos orientados. Vejamos a seqüência abaixo: a b a b a b a b a b c d c d c d c d c d G 0 G 1 G 2 G 3 G 4

Tipos de Conectividade Para grafos orientados ou não Conexo ou não conexo (definição) Um grafo é não conexo (desconexo) se nele existir ao menos um par de vértices não unidos por uma cadeira a b c Pares não unidos por uma cadeira: (a,c) (a,d) d (b,c) (b,d) G 0

Tipos de Conexidade Para grafos orientados ou não Conexo ou não conexo (definição) Um grafo é não conexo (desconexo) se nele existir ao menos um par de vértices não unidos por uma cadeira a e g b f h Pares não unidos por uma cadeira: (a,e), (a,f), (a,g), (a,h), (b,e), (b,f), (b,g), (b,h), (c,e), (c,f), (c,g), (c,h), c d (d,e), (d,f), (d,g), (d,h); G 1

Tipos de Conectividade Em grafos orientados Os grafos G A, G B e G C são conexos, mas possuem diferenças fundamentais de atingibilidade... a b a b a b c d c d c d G A G B G C

Tipos de Conexidade Simplesmente conexo (s-conexo) s-conexo (simplesmente conexo): todo par de vértices é unido por ao menos uma cadeia a b d Não existe percurso de b para d e nem de d para b, mas estes vértices estão ligados por uma cadeia de arcos: (c,b); (c,d) c G s-conexo

Tipos de Conexidade Semi-fortemente conexo (sf-conexo) sf-conexo (semi-fortemente conexo): Em todo par de vértices, ao menos um dos vértices é atingível a partir do outro a b Não existe percurso de b para a, mas existe percurso de a para b. c d G sf-conexo

Tipos de Conexidade Fortemente conexo (f-conexo) f-conexo (fortemente conexo): Em todo par de vértices, os vértices são mutuamente atingíveis. a b e c d f g G 1 f-conexo G 2 f-conexo

Tipos de Conexidade Observações Nos grafos orientados, podemos notar que: Todo grafo f-conexo é também um grafo sf-conexo; Todo grafo sf-conexo é também um grafo s-conexo; f-conexo sf-conexo s-conexo desconexos

Tipos de Conexidade Aplicações f-conexo sf-conexo s-conexo desconexos Atenção especial para os conjuntos C 1 = (s-conexo) (sf-conexo) C 2 = (sf-conexo) (f-conexo) Os conjuntos C 1 e C 2 contem grafos cujos alguns vértices são privilegiados, em relação a outros. Muitas aplicações em redes, por exemplo, precisam desta representação

Componentes fortemente conectados Um componente fortemente conectado de um grafo orientado G = (V,A) é um conjunto máximo de vértices C V tal que, para todo par de vértices u e v em C, temos que os vértices u e v são acessíveis um a partir do outro. a b c d Componente 1 Componente 2 Componente 3 e f g h Componente 4

Componentes fortemente conexos Observação Todo grafo que possui apenas um componente conexo é fortemente conexo (f-conexo) Exemplo já visto anteriormente: a b Componente 1 c d

Grafos Reduzidos

Grafos Reduzidos Definição Define-se um grafo G r, obtido de G, através de uma seqüência de contrações de vértices, feitas de um critério predefinido. BH Minas Alfenas Varginha SP RJ Rio Niterói SP Grafo reduzido Santos Grafo Critério: Agrupar por estado da federação

Grafos Reduzidos Redução utilizando o critério de componentes fortemente conexos a b c d Componente 1 Componente 2 G e f g h Componente 3 Componente 4 Aplicações em redes!!! 2 Para montar tabelas de encaminhamento G r 1 3 4

Algoritmo Existem diferentes algoritmos para decomposição por conectividade. Uma implementação eficiente faz uso do algoritmo de busca em profundidade para identificar as componentes conexos.

1. Faça a pesquisa em profundidade em G e calcule o tempo de finalização em cada vértice u; 2. Gere o grafo transposto (grafo dual) do grafo G. 3. Faça a pesquisa em profundidade em, mas considerando os vértices acessíveis na ordem decrescente ao seu tempo de finalização encontrado no passo 1. Cada árvore da floresta primeiro em profundidade encontrada no passo 3, corresponde a um componente fortemente conexo de G. Vamos fazer um acompanhamento...

Retomando ao final do do passo 1 Passo 1: Aplique a DFS no grafo original G=(V,A) 1116 1215 110 89 1314 34 27 56 [ a, b, e, c, d, g, h, f ] Armazenar para usar no passo 3.

Passo 2: Gere [ a, b, e, c, d, g, h, f ]

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Capturando primeiro da lista de vértices disponíveis a ser explorado [ a, b, e, c, d, g, h, f ]

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice a é encontrado. 1 [ b, e, c, d, g, h, f ] Contador = 1

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice e é encontrado. 1 2 [ b, e, c, d, g, h, f ] Contador = 2

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice b é encontrado. 1 3 2 [ b, e, c, d, g, h, f ] Contador = 3

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice b é finalizado. 1 34 2 [ b, e, c, d, g, h, f ] Contador = 4

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice e é finalizado. 1 34 25 [ b, e, c, d, g, h, f ] Contador = 5

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice a é finalizado. 16 34 25 [ b, e, c, d, g, h, f ] Contador = 6

Passo 3: Efetue a busca em profundidade em ordem armazenada Neste momento a busca em não possui mais caminhamento, então os vértices encontrados com raiz no vértice a formam um componente fortemente conexo em G. 16 34 25 [ b, e, c, d, g, h, f ] Contador = 6

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: capturando o próximo vértice não visitado da lista. Vértice c. 16 34 25 [ b, e, c, d, g, h, f ] Contador = 6

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice c foi encontrado. 16 34 7 25 [ d, g, h, f ] Contador = 7

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice d foi encontrado. 16 34 7 8 25 [ d, g, h, f ] Contador = 8

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice d foi finalizado. 16 34 7 89 25 [ d, g, h, f ] Contador = 9

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice c foi finalizado. 16 34 710 89 25 [ d, g, h, f ] Contador = 10

Passo 3: Efetue a busca em profundidade em ordem armazenada Neste momento a busca em não possui mais caminhamento, então os vértices encontrados com raiz no vértice c formam um componente fortemente conexo em G. 16 34 710 89 25 [ b, e, c, d, g, h, f ] Contador = 10

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: capturando o próximo vértice não visitado da lista. Vértice g. 16 34 710 89 25 [ d, g, h, f ] Contador = 10

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice g foi encontrado. 16 34 710 89 25 11 [ h, f ] Contador = 11

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice f foi encontrado. 16 34 710 89 25 12 11 [ h, f ] Contador = 12

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice f foi finalizado. 16 34 710 89 25 1213 11 [ h, f ] Contador = 13

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice g foi finalizado. 16 34 710 89 25 1213 1114 [ h, f ] Contador = 14

Passo 3: Efetue a busca em profundidade em ordem armazenada Neste momento a busca em não possui mais caminhamento, então os vértices encontrados com raiz no vértice g formam um componente fortemente conexo em G. 16 34 710 89 25 1213 1114 [ h, f ] Contador = 14

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: capturando o próximo vértice não visitado da lista. Vértice h. 16 34 710 89 25 1213 1114 [ h, f ] Contador = 14

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice h foi encontrado. 16 34 710 89 25 1213 1114 15 [ f ] Contador = 15

Passo 3: Efetue a busca em profundidade em ordem armazenada Última ação: Vértice h foi finalizado. 16 34 710 89 25 1213 1114 1516 [ f ] Contador = 16

Passo 3: Efetue a busca em profundidade em ordem armazenada Neste momento a busca em não possui mais caminhamento, então os vértices encontrados com raiz no vértice h formam um componente fortemente conexo em G. 16 34 710 89 25 1213 1114 1516 [ f ] Contador = 16

Lembrete Os componentes encontrados são referentes a G, e não a. 16 34 710 89 25 1213 1114 1516 G a b c d Componente 1 Componente 2 Componente 3 e f g h Componente 4

Discussão da complexidade do algoritmo Busca em profundidade sobre G: ( V + A ) Cálculo de : ( V + A ) Busca em profundidade sobre : ( V + A ) Assim, a complexidade de tempo de todo o algoritmo é ( V + A )

Exercício Proponha um grafo com 12 vértices (qualquer), com no mínimo 4 componentes fortemente conexos e faça o acompanhamento do algoritmo apresentado.

49 Bibliografia CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; (2002). Algoritmos Teoria e Prática. Tradução da 2ª edição americana. Rio de Janeiro. Editora Campus. ZIVIANI, N. (2007). Projeto e Algoritmos com implementações em Java e C++. São Paulo. Editora Thomson;