5COP096 TeoriadaComputação

Documentos relacionados
Grafos Árvores Geradoras Mínimas

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

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

Grafos Caminhos mais Curtos

5COP096 TeoriadaComputação

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

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

Árvore Geradora Mínima

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

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

Problema da Árvore Geradora Mínima

Algoritmos em Grafos: Caminho Mínimo

Sub-grafo. Árvore Geradora Mínima

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

INF 1010 Estruturas de Dados Avançadas

Teoria da Computação. Aula 9 Pesquisa em Memória Secundária 5COP096. Aula 9 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

5COP096 TeoriadaComputação

INF 1010 Estruturas de Dados Avançadas

Projeto e Análise de Algoritmos

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

Algoritmos de Ordenação: HeapSort

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

INF 1010 Estruturas de Dados Avançadas

Otimização em Grafos

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

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Complexidade de Algoritmos

Caminhos mínimos de única origem

Estruturas de Dados. Grafos VIII: Árvores Geradoras Mínimas. Prof. Ricardo J. G. B. Campello

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

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

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

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

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

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

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

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

Algoritmos e Estruturas de Dados II

Algoritmos de Ordenação: QuickSort

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

Sobre o Professor Dr. Sylvio Barbon Junior

Projeto e Análise de Algoritmos

GRAFOS Conceitos Básicos (Parte 1)

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

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

Estruturas de Dados Grafos

Universidade Federal de Alfenas

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

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

Heapsort Letícia Rodrigues Bueno

Ciclos hamiltonianos e o problema do caixeiro viajante

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

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

Universidade Federal de Alfenas

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

Busca em Profundidade e em Largura

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

Classes, Herança e Interfaces

Projeto de algoritmos: Algoritmos Gulosos

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

Algoritmos e Estruturas de Dados II

Tabelas Hash Endereçamento Direto

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

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.

CIC 110 Análise e Projeto de Algoritmos I

Quicksort Letícia Rodrigues Bueno

If969 - Algoritmos e Estruturas de Dados

Prof. Marco Antonio M. Carvalho

Grafos: aplicações. Grafos: árvore geradora mínima

MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO

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

APOSTILA DE MÉTODO GULOSO

Análise de Algoritmos

Algoritmos em Grafos. Motivação. Conceitos Básicos. Aplicações

Tecnicas Essencias Greedy e Dynamic

Teoria da Complexidade Computacional

BCC Projeto e Análise de Algoritmos Aula 0: Apresentação

Emparelhamentos Máximos em Grafos Bipartidos

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

Técnicas de Concepção de Algoritmos: Branch and Bound

GRAFOS BUSCAS E MENOR CAMINHO. Prof. André Backes

Hashing. ACH Introdução à Ciência da Computação II. Delano M. Beder

Otimização em Grafos

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

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

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

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

Solução de Recorrências

INF 1010 Estruturas de Dados Avançadas

QUESTÕES DE PROVAS ANTIGAS

Introdução a Grafos Letícia Rodrigues Bueno

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

Grafos Parte 1. Aleardo Manacero Jr.

Complexidade de Algoritmos

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

Transcrição:

Sylvio 1 Barbon Jr barbon@uel.br 5COP096 TeoriadaComputação Aula 12 Prof. Dr. Sylvio Barbon Junior

Sumário - Árvore Geradora Mínima - Teorema pare reconhecer arestas seguras; - Algoritmo de Prim; - Algoritmo de Kruskal; - Caminhos Mais Curtos - Algoritmo de Dijkstra

Árvore Geradora Mínima - Exemplo tradicional: Rede de comunicação entre diversas cidades, sendo um grafo não direcionado. - É um arranjo de n-1 conexões, contando duas localidades cada. - Desafio é encontrar a menor quantidade de cabos.

Árvore Geradora Mínima - Modelagem: - G = (V, A): Grafo conectado, não direcionado. - V = cidades. - A = conjunto de possíveis conexões; - p(u,v): peso da aresta (u,v) A e custo total de cabo para conexão. - Solução: Encontrar um subconjunto T que conecta todos os vértices de G, cujo peso total é minimizado como: p( T ) = p( u, v) ( u, v) T

Árvore Geradora Mínima - Como G = (V,T) é acíclico e conecta todos os vértices, T forma uma árvore geradora de G. - O problema para obtenção da árvore T é chamado de árvore geradora mínima (AGM) Exemplo: Árvore geradora mínima T cujo peso total é 12. T não é única, pode-se substituir a aresta (3, 5) pela aresta (2, 5) obtendo outra árvore geradora de custo 12.

Árvore Geradora Mínima - Uma estratégia GULOSA permite obter a AGM adicionando uma aresta de cada vez, vamos estudar os algoritmos guloso de Prim (1957) e Kruskal (1956). - Um algoritmo Genérico Guloso para obter a árvore geradora mínima, pode ser: void GenericoAGM 1 S = 0; 2 while (S não constitui uma árvore geradora mínima) 3 (u, v) = seleciona (A) ; 4 if (aresta (u, v) é segura para S ) S = S + {(u, v)} 5 return S ; - Um corte (V, V V ) de um grafo não direcionado G = (V,A) é uma partição de V. - Uma aresta (u, v) Acruza o corte (V, V V ) se um de seus vértices pertence a V e o outro vértice pertence a V V.

Árvore Geradora Mínima - Um corte respeita um conjunto S de arestas se não existirem arestas em S que o cruzem. - Uma aresta cruzando o corte que tenha custo mínimo sobre todas as arestas cruzando o corte é uma aresta leve.

Teorema para Reconhecer Arestas Seguras Seja G = (V,A) um grafo conectado, não direcionado, com pesos p sobre as arestas V. Seja S um subconjunto de V que está incluído em alguma AGM para G. Seja (V 0, V V 0) um corte qualquer que respeita S. Seja (u, v) uma aresta leve cruzando (V, V V ). Satisfeitas essas condições, a aresta (u, v) é uma aresta segura para S.

Algoritmo de Prim O algoritmo de Prim para obter uma AGM pode ser derivado do algoritmo genérico. O subconjunto S forma uma única árvore, e a aresta segura adicionada a S é sempre uma aresta de peso mínimo conectando a árvore a um vértice que não esteja na árvore. A árvore começa por um vértice qualquer (no caso 0) e cresce até que gere todos os vértices em V. A cada passo, uma aresta leve é adicionada à árvore S, conectando S a um vértice de G S = (V, S). De acordo com o teorema anterior, quando o algoritmo termina, as arestas em S formam uma árvore geradora mínima.. O tempo total para executar o algoritmo de Prim é O ( A log V )

Algoritmo de Prim

Algoritmo de Kruskal Pode ser derivado do algoritmo genérico. S é uma floresta e a aresta segura adicionada a S é sempre uma aresta de menor peso que conecta dois componentes distintos. Considera as arestas ordenadas pelo peso. O tempo total para executar o algoritmo de Kruskal é O ( A log V )

Algoritmo de Kruskal

Exercício Encontre a árvore geradora mínima para o seguinte grafo:

Caminhos mais curtos Trata do problema de encontrar o caminho mais curto entre dois vértices de um grafo direcionado e ponderado G = (V, A). Dado um grafo direcionado ponderado G = (V, A), e o peso de um caminho c = (V 0, V 1,..., V k ) é a soma de todos os pesos das arestas do caminho: p( c) = k i= 1 p( v v i i, ) 1 A busca em largura obtém o caminha mais curto, porém os pesos das arestas são todos iguais.

Caminhos mais curtos O problema de caminhos mais curtos a partir de uma origem possuem as seguintes variações: a) Caminhos mais curtos com destino único: reduzido ao problema origem única invertendo a direção de cada aresta do grafo. b) Caminhos mais curtos entre um par de vértices:o algoritmo para origem única é a melhor opção conhecida. c) Caminhos mais curtos entre todos os pares de vértices:resolvido aplicando o algoritmo origem única V vezes, uma vez para cada vértice origem A representação de caminhos mais curtos em um grafo G = (V,A) pode ser realizada por um vetor chamado antecessor. Para cada vértice v V o antecessor [v] é um outro vértice u V ou null ( 1).

Caminhos mais curtos O algoritmo atribui ao antecessor os rótulos de vértices de uma cadeia de antecessores com origem em v e que anda para trás ao longo de um caminho mais curto até o vértice origem s. Os valores em antecessor [v], em um passo intermediário, não indicam necessariamente caminhos mais curtos. Entretanto, ao final do processamento, antecessor contém uma árvore de caminhos mais curtos definidos em termos dos pesos de cada aresta de G, ao invés do número de arestas. Caminhos mais curtos não são necessariamente únicos.

Dijkstra Mantém um conjunto S de vértices cujos caminhos mais curtos até um vértice origem já são conhecidos. Produz uma árvore de caminhos mais curtos de um vértice origem s.

Dijkstra Utiliza a técnica de relaxamento: Para cada vértice v V o atributo p[v] é um limite superior do peso de um caminho mais curto do vértice origem s até v. O vetor p[v] contém uma estimativa de um caminho mais curto. O primeiro passo do algoritmo é inicializar os antecessores e as estimativas de caminhos mais curtos: antecessor[v] = null para todo vértice v V, p[u] = 0, para o vértice origem s, e p[v] = 1 para v V {s}.

Dijkstra O relaxamento de uma aresta (u, v) consiste em verificar se é possível melhorar o melhor caminho até v obtido até o momento se passarmos por u. Se isto acontecer, p[v] e antecessor[v] devem ser atualizados. dijkstra (Grafo grafo, int raiz ) 1. for ( int v = 0; v < grafo.numvertices ( ) ; v++) 2. p[v] = Inf ini to ; 3. antecessor [v] = 1; 4. p[ raiz ] = 0; 5. Constroi heap sobre vértices do grafo; 6 S = 0; 7. while (!heap. vazio ( ) ) 8. u = heap. retiramin ( ) ; 9 S = S + u; 10. for (v grafo.listaadjacentes (u) ) 11. if (p[v] > p[u] + peso da aresta (u,v) ) 12. p[v] = p[u] + peso da aresta (u,v) ; 13. antecessor [v] = u;

Dijkstra Exemplo:

Dijkstra Exemplo:

Dijkstra Para realizar de forma eficiente a seleção de uma nova aresta, todos os vértices que não estão na árvore de caminhos mais curtos residem no heap A baseada no campo p. Para cada vértice v, p[v] é o caminho mais curto obtido até o momento, de v até o vértice raiz. O heap mantém os vértices, mas a condição do heap é mantida pelo caminho mais curto estimado até o momento através do arranjo p[v], o heap é indireto. O arranjo pos[v] fornece a posição do vértice v dentro do heap, permitindo assim que o vértice v possa ser acessado a um custo O(1) para a operação diminuichave. Complexidade no pior caso: O ( E + V log V )

Referências Ziviani, Nivio. Projeto de algoritmos: com implementações em Java e C. Thomson Learning, 2007. Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein. Introduction to algorithms. Ed. Thomas H. Cormen. The MIT press, 2001.

Solução do exercício