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

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

Sub-grafo. Árvore Geradora Mínima

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

Caminhos mínimos de única origem

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

Otimização em Grafos

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

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

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de todos os pares

Projeto e Análise de Algoritmos

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

Ciclos hamiltonianos e o problema do caixeiro viajante

Projeto e Análise de Algoritmos. Método Guloso

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

Árvores de Suporte de Custo Mínimo

Otimização em Grafos

APOSTILA DE MÉTODO GULOSO

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

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

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

Caminhos mínimos de todos os pares

Algoritmo de Kruskal. Algoritmo de Kruskal. Floresta geradora 26. Subfloresta S 20.3

Problema da Árvore Geradora Mínima

Algoritmo Floyd-Warshall. Problema dos caminhos mínimos entre todos os pares. Programação dinâmica

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

2006/2007 Análise e Síntese de Algoritmos 2

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

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

Análise de Algoritmos

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

GRAFOS Aula 08 Árvore Geradora Mínima: Algoritmos de Kruskal e Prim-Jarnik Max Pereira

Análise de algoritmos

Problema da Árvore Geradora Mínima (The Minimum Spanning Tree Problem-MST)

Análise e Síntese de Algoritmos

Grafos Msc. Daniele Carvalho Oliveira. Doutoranda em Computação UFU Mestre em Computação - UFU Bacharel em Computação - UFJF 1

Análise de algoritmos

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

Algoritmo de Dijkstra Estudo e Implementação

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

Grafos Árvores Geradoras Mínimas

Árvores Árvores Geradoras de Custo Mínimo 0/16

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.

INSTITUTO FEDERAL DO ESPÍRITO SANTO CURSO BACHARELADO EM SISTEMAS DE INFORMAÇÃO

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

Teoria dos Grafos Aula 6

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

Análise e Síntese de Algoritmos

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

Árvores: Conceitos Básicos e Árvore Geradora

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

Árvore Geradora Mínima

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (5)

Grafos e Algoritmos de Busca

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

Estruturas de Dados Grafos

Tecnicas Essencias Greedy e Dynamic

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

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

Complexidade de Algoritmos

Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

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

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

AULA 22. Algoritmos p.793/823

Departamento de Engenharia de Produção UFPR 57

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

Algoritmos de ordenação Heapsort

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

ESTRUTURAS DISCRETAS (INF 1631) GRAFOS. 1. O que é um grafo? Defina um grafo orientado. Defina um grafo não-orientado.

Algoritmo de Prim Wikipédia, a enciclopédia livre

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

MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO

apenas os caminhos que passam só por vértices em C, exceto, talvez, o próprio v A Figura 1 a seguir ilustra o significado do conjunto C edovalordist.

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

PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Capítulo 5: Grafos Conexos. Departamento de Matemática Aplicada

Parte B Teoria dos Grafos

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

2 Definição do Problema

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

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

Programa. 1 Parte 1 - Conjuntos e Aplicações. 1 Conjuntos. 4 Indução matemática e divisibilidade. 5 Congruências lineares

Distâncias Mínimas. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Distâncias Mínimas 2014/ / 27

QUESTÕES DE PROVAS ANTIGAS

Introdução a Grafos Letícia Rodrigues Bueno

Conjuntos disjuntos dinâmicos

Análise e Síntese de Algoritmos. Caminhos Mais Curtos para Todos os Pares CLRS, Cap. 25

INF 1010 Estruturas de Dados Avançadas

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

Algoritmos gulosos (greedy) CLRS

CI065 CI755 Algoritmos e Teoria dos Grafos

INF 1010 Estruturas de Dados Avançadas

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

Teoria dos Grafos Aula 5

Busca em Profundidade e em Largura

Transcrição:

Grafos Árvores espalhadas mínimas Conteúdo Introdução Como construir uma árvore geradora miníma Algoritmos Referências Introdução Dado um grafo conectado não orientado G = (V, E) e uma função peso w : E R, queremos encontrar um subconjunto acíclico T E que conecte todos os vértices e cujo peso total w(t ) = w(u, v) seja minimizado (u,v) T Como T é acíclico e conecta todos os vértices, T forma uma árvore, que chamamos de árvore geradora mínima (MST) Chamamos o problema de determinar T de problema da árvore geradora mínima Veremos dois algoritmos gulosos para resolver este problema 3 / 24 Exemplo de árvore geradora mínima Propriedades de uma MST Tem V 1 arestas Não tem ciclos Pode não ser única 4 / 24

Como construir uma árvore geradora mínima Como construir uma árvore geradora mínima? Uma aresta de cada vez! Começamos com um conjunto vazio A Em cada etapa, determinamos um aresta (u, v) que pode ser adicionada a A, de forma a manter a seguinte invariante Antes de cada iteração, A é um subconjunto de alguma árvore geradora mínima A aresta (u, v) é chamada de aresta segura para A generic-mst(g, w) 1 A = 2 while A não forma uma árvore geradora 3 encontre uma aresta (u, v) que seja segura para A 4 A = A {(u, v)} 5 return A 5 / 24 Como construir uma árvore geradora mínima Vamos fornecer uma regra para reconhecer arestas seguras, mas antes precisamos de algumas definições Seja S V e A E Um corte (S, V S) de um grafo não orientado G = (V, E) é uma partição de V Uma aresta (u, v) E cruza o corte (S, V S) se um de seus extremos está em S e o outro em V S Um corte respeita o conjunto A de arestas se nenhuma aresta em A cruza o corte Uma aresta é uma aresta leve cruzando um corte se seu peso é o mínimo de qualquer aresta que cruza o corte 6 / 24 Como construir uma árvore geradora mínima 7 / 24 Como construir uma árvore geradora mínima Teorema 23.1 Seja G = (V, E) um grafo conectado não orientado com uma função peso de valor real w definido em E. Seja A um subconjunto de E que está incluído em alguma árvore geradora mínima correspondente a G, seja (S, V S) qualquer corte de G que respeita A e seja (u, v) uma aresta leve cruzando (S, V S). Então a aresta (u, v) é segura para A Ideia da prova Seja T uma MST que inclui A Se T contém (u, v), é claro que (u, v) é segura para A Se T não contém (u, v), construímos outra MST T que inclui A {(u, v)} (veja o livro) 8 / 24

Como construir uma árvore geradora mínima Corolário 23.2 Seja G = (V, E) um grafo conectado não orientado com uma função peso de valor real w definido em E. Seja A um subconjunto de E que está incluído em alguma árvore geradora mínima correspondente a G, e seja C = (V C, E C ) um componente conectado (árvore) na floresta G A = (V, A). Se (u, v) é uma aresta leve conectando C a algum outro componente em G A, então (u, v) é segura para A Prova Tomamos S = V C no teorema 23.1 9 / 24 Se baseia diretamente no algoritmo genérico apresentado Inicialmente cada vértice está em sua própria componente (árvore) De todas as arestas que conectam duas árvores quaisquer na floresta, uma aresta (u, v) de peso mínimo é escolhida. A aresta (u, v) é segura para alguma das duas árvores Utiliza uma estrutura de dados de conjuntos disjuntos Cada conjunto contém os vértices de uma árvore da floresta atual 10 / 24 11 / 24 12 / 24

mst-kruskal(g, w) 1 A = 0 2 for cada vértice v em G.V 3 make-set(v) 4 ordenar por peso as arestas de E 5 for cada aresta (u, v) em E, em ordem de peso 6 if find-set(u)!= find-set(v) 7 A = A U {(u, v)} 8 union(u, v) 9 return A 13 / 24 Análise do algoritmo de Kruskal Depende da implementação da estrutura de conjunto disjuntos A ordenação das arestas na linha 4 demora O(E lg E) O laço das linhas 5 a 8 executa O(E) find-set e union. Juntamente com as V operações make-set, elas demoram O((V + E)α(V )), onde α é uma função de crescimento muito lento Pelo fato de G ser supostamente conectado, E V 1 Como α( V ) = O(lg V ) = O(lg E), o tempo total de execução do algoritmo é O(E lg E) Observando que E < V 2, temos que lg E = O(lg V ), e portanto, o tempo de execução do algoritmo é O(E lg V ) 14 / 24 Se baseia diretamente no algoritmo genérico apresentado As arestas do conjunto A formam uma única árvore A árvore começa com uma raiz arbitrária r e aumenta até alcançar todos os vértices em V Para cada vértice v, v.chave é o peso mínimo de qualquer aresta que conecta v a um vértice da árvore; v.chave = se não existe nenhuma aresta deste tipo A chave para implementar o algoritmo de Prim de forma eficiente é tornar fácil a seleção de uma nova aresta a ser adicionada à árvore 15 / 24 16 / 24

mst-prim(g, w, r) 1 for cada u em G.V 2 u.chave = infinito 3 u.pai = NIL 4 r.chave = 0 5 Q = G.V 6 while Q!= 0 7 u = extract-min(q) 8 for cada v em u.adj 9 if v em Q e w(u, v) < v.chave 10 v.pai = u 11 v.chave = w(u, v) 17 / 24 Análise do algoritmo de Prim Depende de como a fila de prioridade é implementada Se a fila é implementada como um heap mínimo, o algoritmo build-min-heap é utilizado na inicialização nas linhas 1 a 5 no tempo O(V ) O corpo do laço while é executado V vezes, como cada operação extract-min demora O(lg V ), o tempo total para todas as chamadas de extract-min é O(V lg V ) O laço for das linhas 8 a 11 é executado completamente O(E) vezes O teste de pertinência da linha 9 pode ser implementa em tempo constante A atribuição na linha 11 envolve uma operação impĺıcita de decrease-key, que demora O(lg V ) Portanto, o tempo total do algoritmo é (V lg +E lg V ) = O(E lg V ) 18 / 24 Análise do algoritmo de Prim Se heaps de Fibonacci forem usando o tempo de execução assintótico pode ser melhorado extract-min é executado em tempo amortizado de O(lg V ) decrease-key é executado em tempo amortizado de O(1) Tempo total do algoritmo melhora para O(E + V lg V ) 19 / 24 Exercícios 23.1-1 Seja (u, v) uma aresta de peso mínimo em um grafo G. Mostre que (u, v) pertence a alguma árvore geradora miníma de G 23.1-2 O professor Sabatier supõe a recíproca do teorema 23.1 dada a seguir. Seja G = (V, E) um grafo conectado não orientado com uma função peso de valor real w definida em E. Seja A um subconjunto de E que está incluído em alguma árvore geradora miníma para G, seja (S, V S) qualquer conjunto corte de G que respeita A, e seja (u, v) uma aresta segura para A que cruza (S, V S). Então (u, v) é uma aresta leve para o corte. Mostre que a hipótese do professor é incorreta, fornecendo um contra-exemplo. 20 / 24

Exercícios 23.1-3 Mostre que, se uma aresta (u, v) está contida em alguma árvore espalhada mínima, então ela é uma aresta leve que cruza algum corte do grafo. 23.1-4 Forneça um exemplo simples de um grafo conectado tal que o conjunto de arestas {(u, v) : existe um corte (S, V S) tal que (u, v) é uma aresta leve cruzando (S, V S)} não forma uma árvore geradora miníma. 21 / 24 Exercícios 23.2-2 Suponha que o grafo G = (V, E) seja representado por uma matriz de adjacências. Forneça uma implementação simples do algoritmo de Prim para esse caso que seja executada no tempo O(V 2 ). 23.2-3 A implementação do heap de Fibonacci do algoritmo de Prim é assintoticamente mais rápida que a implementação de heap binário para um grafo esparso G = (V, E), onde E = Θ(V )? E no caso de um grafo denso, onde E = Θ(V 2 )? De que modo E e V devem estar relacionados para que a implementação de heap de Fibonacci seja assintoticamente mais rápida que a implementação de heap binário? 22 / 24 Exercícios 23.2-4 Suponha que todos os pesos de arestas de um grafo sejam inteiros no intervalo de 1 a V. Com que rapidez é possível executar o algoritmo de Kruskal? E se os pesos de arestas forem inteiros no intervalo de 1 a W para alguma constante W? 23.2-5 Suponha que todos os pesos de arestas de um grafo sejam inteiros no intervalo de 1 a V. Com que rapidez é possível executar o algoritmo de Prim? E se os pesos de arestas forem inteiros no intervalo de 1 a W para alguma constante W? 23 / 24 Referências Thomas H. Cormen et al. Introdução a Algoritmos. 2 a edição em português. Capítulo 23. 24 / 24