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



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

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

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

Árvores de Suporte de Custo Mínimo

Análise e Síntese de Algoritmos

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

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DA REPESCAGEM DO 1 o TESTE

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

Análise e Síntese de Algoritmos

Análise de Algoritmos

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos

Projeto e Análise de Algoritmos

Fluxo Máximo a Custo Mínimo

Sub-grafo. Árvore Geradora Mínima

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Árvores Binárias e Busca. Jeane Melo

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

BCC204 - Teoria dos Grafos

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

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

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

EAD Árvore - representação usando listas ligadas

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos e Estruturas de Dados

EAD Árvore árvore binária

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

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Otimização em Grafos

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

ESTRUTURAS DE DADOS II

Sumário. Comunicação Multicast. Soluções. Multicast. Application-Level Multicast. October 20, 2008 Algoritmos Epidémicos

Introdução ao Estudo sobre Árvore Geradora Mínima em Grafos com Parâmetros Fuzzy

Aula 21: Roteamento em Redes de Dados

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura Exemplo de um grafo linear.

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Conjuntos disjuntos dinâmicos

CAPÍTULO 2. Grafos e Redes

Busca. Pesquisa sequencial

Análise e Síntese de Algoritmos. Fluxos Máximos em Grafos CLRS, Cap. 26

Problema da Árvore Geradora Mínima

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

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

Linguagem C: Árvores Binarias

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.

Resolução de Problemas

Árvore Binária de Busca. Algoritmos e Estrutura de Dados II. Operações Busca e Sucessor. Árvore Binária de Busca. Árvores Rubro-Negras

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

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

Filas com prioridade - Introdução (1)

APOSTILA DE MÉTODO GULOSO

Análise e Síntese de Algoritmos

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

5COP096 TeoriadaComputação

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

5. Generics, Iterators e Comparable em Java. Tipos de Dados Abstractos Generics em Java

CTC-17 Inteligência Artificial Problemas de Busca. Prof. Paulo André Castro

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

Aula 19 Conjuntos disjuntos (Union-find)

Estruturas de Dados Árvores

Listas Duplamente Encadeadas

Otimização em Grafos

INF 1010 Estruturas de Dados Avançadas

Análise e Síntese de Algoritmos. Fluxos Máximos em Grafos CLRS, Cap. 26

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Métodos de Pesquisa 472

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Teoria da Computação - Programação OCaml Ficha de exercícios

Algoritmos Eficientes de Ordenação

Grafos Procura (1) AED (IST/DEEC) 44. Grafos Procura (2) Procurar em grafos é equivalente a percorrer labirintos

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Técnicas de Computação Paralela Capítulo III Design de Algoritmos Paralelos

FILAS DE PRIORIDADE e HEAPS

01/05/2016. Danillo Tourinho Sancho da Silva, MSc ROTEIRIZAÇÃO TEORIA DOS GRAFOS MOTIVAÇÃO

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

IES-300. Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br

INSTITUTO SUPERIOR TÉCNICO Análise e Síntese de Algoritmos. RESOLUÇÃO DO 2 o TESTE

Árvores Binárias de Busca

Balanceamento de linhas de produção

Projeto e Análise de Algoritmos

Árvores Balanceadas. Árvore binária completamente balanceada. Ocorre quando a árvore está cheia ou quase cheia com o nível n-1 completo

1. Introdução Definição Conceitos relacionados... 2

Teoria dos Grafos. Edson Prestes

Árvores Binárias Balanceadas

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

Estruturas de Dados Pilhas, Filas e Deques

Árvores. Algoritmos e Estruturas de Dados 2005/2006

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Algoritmos de pesquisa. Tabelas de dispersão/hash

Árvores e Árvores Binárias

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

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

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

INF 1010 Estruturas de Dados Avançadas

Busca em Espaço de Estados

Teoria dos Grafos Aula 8

Análise e Síntese de Algoritmos

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

Transcrição:

Análise e Síntese de Algoritmos Árvores Abrangentes de Menor Custo CLRS, Cap. 23

Resumo Árvores Abrangentes de Menor Custo Minimum-Spanning Trees (MSTs) Algoritmo (greedy) genérico Prova de optimalidade Algoritmo de Kruskal Algoritmo de Borůvka Algoritmo de Prim Exemplo 2006/2007 Análise e Síntese de Algoritmos 2

Definições Um grafo não dirigido G = (V, E), diz-se ligado se para qualquer par de vértices existe um caminho que liga os dois vértices Dado grafo não dirigido G = (V, E), ligado, uma árvore abrangente é sub-conjunto acíclico T E, que liga todos os vértices T = V - 1 2006/2007 Análise e Síntese de Algoritmos 3

Árvores Abrangente de Menor Custo Dado grafo G = (V, E), ligado, não dirigido, com uma função de pesos w : E R, identificar uma árvore abrangente T, tal que a soma dos pesos dos arcos de T é minimizada min w ( T) = w( u,v ) ( u,v ) T 2006/2007 Análise e Síntese de Algoritmos 4

Construção de uma MST Abordagem Greedy: Manter conjunto A que é um subconjunto de uma MST T A cada passo do algoritmo identificar arco (u,v) que pode ser adicionado a A sem violar a invariante A {(u,v)} é sub-conjunto de uma MST T (u,v) é declarado um arco seguro para A Algoritmo: function MST-Genérico(G,w) A = while A não forma árvore abrangente identificar arco seguro (u,v) para A A = A {(u,v)} return A 2006/2007 Análise e Síntese de Algoritmos 5

Optimalidade Definições Um corte (S,V-S) de um grafo não dirigido G=(V,E) é uma partição de V Um arco (u,v) E cruza o corte (S,V-S) se um dos extremos está em S e o outro está em V-S Um corte respeita um conjunto de arcos A se nenhum arco de A cruza o corte Um arco diz-se um arco leve que cruza um corte se o seu peso é o menor de todos os arcos que cruzam o corte 2006/2007 Análise e Síntese de Algoritmos 6

Optimalidade Seja G=(V,E) um grafo não dirigido, ligado, com função de pesos w. Seja A um sub-conjunto de E incluído numa MST T, seja (S,V-S) qualquer corte de G que respeita A, e seja (u,v) um arco leve que cruza (S,V-S). Então (u,v) é um arco seguro para A Prova: MST T, com A T, e arco leve (u,v) T Objectivo: Construir outra MST T que inclui A {(u,v)} (u,v) é um arco seguro para A 2006/2007 Análise e Síntese de Algoritmos 7

Optimalidade (Cont.) O arco (u,v) forma ciclo com arcos do caminho p, definido em T, que liga u a v Dado u e v estarem nos lados opostos do corte (S,V-S), então existe pelo menos um arco do caminho p em T que cruza o corte Arco (x,y) (x,y) A, porque (S, V-S) respeita A Remoção de (x,y) divide T em dois componentes Inclusão de (u,v) permite formar T = T - {(x,y)} {(u,v)} Dado que (u,v) é um arco leve que cruza o corte (S,V-S), e porque (x,y) também cruza o corte: w(u,v) w(x,y) 2006/2007 Análise e Síntese de Algoritmos 8

Optimalidade (Cont.) Conclusão: w(t ) = w(t) - w(x,y) + w(u,v) w(t) Mas T é MST, pelo que w(t) w(t ) w(t ) = w(t), e T também é MST (u,v) é seguro para A: Verifica-se A T, dado que por construção A T, e (x,y) A Assim, verifica-se também A {(u,v)} T T é MST, pelo que (u,v) é seguro para A 2006/2007 Análise e Síntese de Algoritmos 9

Algoritmo de Kruskal Algoritmo mantém floresta (de árvores) A Utilização de uma estrutura de dados para representar conjuntos disjuntos Cada conjunto representa uma sub-árvore de uma MST A cada passo é escolhido arco leve, seguro para A 2006/2007 Análise e Síntese de Algoritmos 10

Algoritmo de Kruskal (Cont.) function MST-Kruskal(G,w) A = foreach v V[G] Make_Set(v) // Criar conjunto para v Ordenar arcos de E por ordem de peso não decrescente foreach (u,v) E[G], por ordem não decrescente de w if Find_Set(u) Find_Set(v) // (u,v) é arco leve, seguro para A A = A {(u,v)} Union (u,v) return A 2006/2007 Análise e Síntese de Algoritmos 11

Algoritmo de Kruskal (Cont.) Complexidade: Depende da implementação das operações sobre conjuntos disjuntos Inicialização: O(E lg E) devido à ordenação dos arcos Construção: Utilizando listas para representar conjuntos obtém-se O(E V) União das listas que definem conjuntos de cada vértice Obs: Com estruturas para conjuntos disjuntos adequadas é possível estabelecer O(E lg* E) ou O(E α(e,v)) É possível assegurar O(E lg E) Dado que E < V 2, obtém-se também O(E lg V) Exemplo 2006/2007 Análise e Síntese de Algoritmos 12

Algoritmo de Borůvka Começar com um N conjuntos de vértices (N árvores) Noção de arco marcado A cada passo do algoritmo, Para cada árvore T seleccionar arco de menor peso incidente em T marcar arco seleccionado (passa a estar incluído em T) arco pode ser duplamente seleccionado Juntar em árvores individuais árvores ligadas por arcos marcados Algoritmo termina quando existir apenas uma árvore 2006/2007 Análise e Síntese de Algoritmos 13

Algoritmo de Borůvka (Cont.) Complexidade: O(E lg V) Número de passos do algoritmo: O(lg V) Número de arcos analisados em cada passo: O(E) Manutenção das árvores em cada passo: O(E) Algoritmo correcto apenas se pesos com valores distintos Escolha de dois arcos de peso igual que ligam duas árvores! Com pesos iguais é necessário estabelecer relação de ordem (artificial) entre todos os arcos (e.g. ordem lexicográfica) Exemplo 2006/2007 Análise e Síntese de Algoritmos 14

Algoritmo de Prim MST construída a partir de um vértice raíz r Algoritmo mantém sempre uma árvore A Extendida a partir do vértice r A cada passo é escolhido arco leve, seguro para A Utilização de fila de prioridade Q key[v]: menor peso de qualquer arco que ligue v a um vértice na árvore π[v]: antecessor de v na árvore 2006/2007 Análise e Síntese de Algoritmos 15

Algoritmo de Prim (Cont.) function MST-Prim(G,w,r) Q = V[G] // Fila de prioridade Q foreach u Q // Inicialização key[u] = key[r] = 0 π[r] = NIL // Permite manter árvore A while Q u = Extract_Min(Q) O(E) O(V) // (u,v) que é arco leve, seguro para A foreach v Adj[u] O(lg V) if v Q and w(u,v) < key[v] π[v] = u key[v] = w(u,v) // Q é actualizada! O(lg V) 2006/2007 Análise e Síntese de Algoritmos 16

Algoritmo de Prim (Cont.) Complexidade: O(E lg V) Fila de prioridade baseada em amontoado (heap) Para cada arco (i.e. O(E)) existe no pior-caso uma actualização de Q (em O(lg V)) Exemplo 2006/2007 Análise e Síntese de Algoritmos 17

Revisão Árvores abrangentes de menor custo (MSTs) Algoritmo de Kruskal Algoritmo de Boruvka Algoritmo de Prim A seguir: Caminhos Mais Curtos (CLRS, Cap. 24) 2006/2007 Análise e Síntese de Algoritmos 18