AULA 22. Algoritmos p.793/823

Documentos relacionados
Conjuntos disjuntos dinâmicos

Melhores momentos AULA 22. Algoritmos p.824/855

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

Aula 19 Conjuntos disjuntos (Union-find)

Análise de Algoritmos

Projeto e Análise de Algoritmos

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

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

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

Análise de Algoritmos

Árvores de Suporte de Custo Mínimo

Melhores momentos AULA 24. Algoritmos p.906/953

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

AULA 21. Algoritmos p.760/792

Sub-grafo. Árvore Geradora Mínima

AULA 24. Algoritmos p.856/905

Análise de Algoritmos

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

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

INF 1010 Estruturas de Dados Avançadas

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

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

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

Conjuntos disjuntos. Relações de equivalência

Algoritmos gulosos (greedy)

Teoria dos Grafos Aula 5

Análise de Algoritmos

Árvores de Suporte de Custo Mínimo

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

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

Árvores: Conceitos Básicos e Árvore Geradora

Melhores momentos AULA PASSADA. Complexidade Computacional p. 205

Algoritmos gulosos (greedy) CLRS

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

Abordagens para Resolução de Problemas

Melhores momentos AULA 3. Algoritmos p.148/188

Teoria dos Grafos Aula 8

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

INF 1010 Estruturas de Dados Avançadas

MATEMÁTICA DISCRETA PARA ENGENHARIA DE COMPUTAÇÃO

CI065 CI755 Algoritmos e Teoria dos Grafos

AULA 20. Algoritmos p.725/759

Introdução à Teoria dos Grafos

Teoria dos Grafos. Edson Prestes

Teoria dos Grafos Aula 18

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

Prof. Marco Antonio M. Carvalho

Algoritmos de aproximação - Problema do caixeiro viajante

1.2 Grau de um vértice

Algoritmos de aproximação - Problema de cobertura por conjuntos

Árvore Geradora Mínima

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO DEPARTAMENTO DE CIÊNCIAS DA COMPUTAÇÃO. 5 a Lista de Exercícios

Análise amortizada CLRS 17. Algoritmos p. 1

Teoria dos Grafos Aula 6

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

Teoria dos Grafos Aula 26

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

Otimização em Grafos

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

Problema de escalonamento

Redução polinomial. Permite comparar o grau de complexidade de problemas diferentes.

Estruturas de Dados. Cristina Gomes Fernandes. Estruturas de Dados p. 1

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

Notas 1 / 14. Notas. todos os pares de pontos devem ser ligados por ao menos um percurso; usaremos um mínimo possível de ligações. 2 / 14.

Melhores momentos AULAS 1-8

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

Grafos Árvores Geradoras Mínimas

Complexidade computacional

Alguns comentários. Segunda prova. Programação dinâmica em grafos. Guloso em grafos. Algoritmos p. 1

Exercícios: Alg Gulosos. Eduardo Laber

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

Complexidade de Algoritmos. Edson Prestes

ANÁLISE DE ALGORITMOS

Cortes (cut sets) 2010/2 Teoria dos Grafos (INF 5037/INF2781) CC/EC/UFES

Algoritmos em Grafos

5COP096 TeoriadaComputação

O grau de saída d + (v) de um vértice v é o número de arcos que tem

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

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

Algoritmos e Estruturas de Dados II Grafos conceitos gerais. Thiago A. S. Pardo Profa. M. Cristina Material de aula da Profa. Josiane M.

Algoritmos de Aproximação para o Problema do Caixeiro Viajante

Teoria dos Grafos Aula 22

Algoritmos e Estruturas de Dados II

Introdução a Grafos Letícia Rodrigues Bueno

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

Teoria dos Grafos Aula 8

Análise de Algoritmos

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

Grafos aula 3. Relembrando... Rede de eventos e atividades. Rede de eventos e atividades

CI065 CI755 Algoritmos e Teoria dos Grafos

Projeto e Análise de Algoritmos

Teoria dos Grafos Aula 8

Complexidade de Algoritmos. Edson Prestes

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

Teoria dos Grafos Aula 27

Grafos Parte 1. Aleardo Manacero Jr.

Teoria dos Grafos. Edson Prestes

Teoria dos Grafos. Edson Prestes

Processamento de Imagens usando Grafos (MAC6903)

Transcrição:

AULA 22 Algoritmos p.793/823

Conjuntos disjuntos dinâmicos CLR 22 CLRS 21 Algoritmos p.794/823

Conjuntos disjuntos Seja S = {S 1, S 2,..., S n } uma coleção de conjuntos disjuntos, ou seja, S i S j = para todo i j. Algoritmos p.795/823

Conjuntos disjuntos Seja S = {S 1, S 2,..., S n } uma coleção de conjuntos cements disjuntos, ou seja, S i S j = para todo i j. Exemplo de coleção disjunta de conjuntos: componentes conexos de um grafo a b e f h j G c d g i componentes = conjuntos disjuntos de vértices {a, b, c, d} {e, f, g} {h, i} {j} Algoritmos p.795/823

Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta componentes {a} {b} {c} {d} {e} {f} {g} {h} {i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (b, d) componentes {a} {b, d} {c} {e} {f} {g} {h} {i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (e, g) componentes {a} {b, d} {c} {e, g} {f} {h} {i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (a, c) componentes {a, c} {b, d} {e, g} {f} {h} {i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (h, i) componentes {a, c} {b, d} {e, g} {f} {h, i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (a, b) componentes {a, b, c, d} {e, g} {f} {h, i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (e, f) componentes {a, b, c, d} {e, f, g} {h, i} {j} Algoritmos p.796/823

nts Coleção disjunta dinâmica Conjuntos são modificados ao longo do tempo Exemplo: grafo dinâmico a b e f h j G c d g i aresta (b, c) componentes {a, b, c, d} {e, g} {f} {h, i} {j} Algoritmos p.796/823

Operações básicas S coleção de conjuntos disjuntos. Cada conjunto tem um representante. MAKESET (x): UNION (x, y): FINDSET (x): x é elemento novo S S {x} x e y em conjuntos diferentes S S {S x, S y } {S x S y } x está em S x e y está em Sy devolve representante do conjunto que con Algoritmos p.797/823

Connected-Componets Recebe um grafo G e contrói uma representação dos componentes conexos. CONNECTED-COMPONENTS (G) 1 para cada vértice v de G faça 2 MAKESET (v) 3 para cada aresta (u, v) de G faça 4 se FINDSET (u) FINDSET (v) 5 então UNION (u, v) Algoritmos p.798/823

Consumo de tempo n := número de vértices do grafo m := número de arestas do grafo linha consumo de todas as execuções da linha 1 = Θ(n) 2 = n consumo de tempo MAKESET 3 = Θ(m) 4 = 2m consumo de tempo FINDSET 5 n consumo de tempo UNION total Θ(n + m) + n consumo de tempo MAKESET +2m consumo de tempo FINDSET +n consumo de tempo UNION Algoritmos p.799/823

Same-Component Decide se u e v estão no mesmo componente: SAME-COMPONENT (u, v) 1 se FINDSET (u) = FINDSET (v) 2 então devolva SIM 3 senão devolva NÃO Algoritmos p.800/823

Algoritmo de Kruskal Encontra uma árvore geradora mínima (CLRS 23). MST-KRUSKAL (G, w) G conexo 1 A 2 para cada vértice v faça 3 MAKESET (v) 4 coloque arestas em ordem crescente de w 5 para cada aresta uv em ordem crescente de w faça 6 se FINDSET (u) FINDSET (v) 7 então A A {uv} 8 UNION (u, v) 9 devolva A Avô de todos os algoritmos gulosos. Algoritmos p.801/823

Conjuntos disjuntos dinâmicos Seqüência de operações MAKESET, UNION, FINDSET M M M U F U U F U F F F U F } {{ } } n {{ } m Que estrutura de dados usar? Compromissos (trade-off s) Algoritmos p.802/823

lacements G Estrutura lista ligada b d a c h i j e g f cada conjunto tem um representante (início da lista) cada nó x tem um campo repr repr[x] é o representante do conjunto que contém x Algoritmos p.803/823

G Estrutura lista ligada h i j b d a c e g f UNION (a, e) : atualiza apontador para o representante. Algoritmos p.804/823

Consumo de tempo Operação número de objetos atualizados MAKESET(x 1 ) 1 MAKESET(x 2 ) 1. 1 MAKESET(x n ) 1 UNION(x 1, x 2 ) 1 UNION(x 2, x 3 ) 2.. UNION(x n 1, x n ) n 1 total = Θ(n 2 ) = Θ(m 2 ) Algoritmos p.805/823

Consumo de tempo MAKESET UNION FINDSET Θ(1) O(n) Θ(1) Uma seqüência de m operações pode consume tempo Θ(m 2 ) no pior caso. Consumo de tempo amortizado de cada operação é O(m). Algoritmos p.806/823

Melhoramento: weighted-union h i j b d a c e g f cada representante armazena o comprimento da lista a lista menor é concatenada com a maior Cada objeto x é atualizado lg n: cada vez que x é atualizado o tamanho da lista dobra. Algoritmos p.807/823

Conclusão Se conjuntos disjuntos são representados através de listas ligadas e weighted-union é utilizada, então uma seqüência de m operações MAKESET, UNION e FINDSET, sendo que n são MAKESET, consome tempo O(m + n lg n). Algoritmos p.808/823

Estrutura disjoint-set forest a b e f h j G c d g i cada conjunto tem uma raiz, que é o seu representate cada nó x tem um pai pai[x] = x se e só se x é uma raiz Algoritmos p.809/823

Estrutura disjoint-set forest b e h j a d g f i c cada conjunto tem uma raiz cada nó x tem um pai pai[x] = x se e só se x é uma raiz Algoritmos p.809/823

MakeSet 0 e FindSet 0 b e h j a d g f i c MAKESET 0 (x) 1 pai[x] x FINDSET 0 (x) 1 enquanto pai[x] x faça 2 x pai[x] 3 devolva x Algoritmos p.810/823

FindSet 1 b e h j a d g f i c FINDSET 1 (x) 1 se pai[x] = x 2 então devolva x 3 senão devolva FINDSET 1 (pai[x]) Algoritmos p.811/823

Union 0 b e h j a d g f i c UNION 0 (x, y) 1 x FINDSET 0 (x) 2 y FINDSET 0 (y) 3 pai[y ] x Algoritmos p.812/823

Union 0 b x UNION 0 (a, f) h j a d e y i c g f UNION 0 (x, y) 1 x FINDSET 0 (x) 2 y FINDSET 0 (y) 3 pai[y ] x Algoritmos p.812/823

Union 0 b x UNION 0 (a, f) h j a d e y i c g f UNION 0 (x, y) 1 x FINDSET 0 (x) 2 y FINDSET 0 (y) 3 pai[y ] x Algoritmos p.812/823

MakeSet 0, Union 0 e FindSet 1 MAKESET 0 (x) 1 pai[x] x UNION 0 (x, y) 1 x FINDSET 0 (x) 2 y FINDSET 0 (y) 3 pai[y ] x FINDSET 1 (x) 1 se pai[x] = x 2 então devolva x 3 senão devolva FINDSET 1 (pai[x]) Algoritmos p.813/823

Consumo de tempo MAKESET 0 UNION 0 FINDSET 0 Θ(1) O(n) O(n) M M M U F U U F U F F F U F } {{ } } n {{ } m Custo total da seqüência: n Θ(1) + n O(n) + m O(n) = O(mn) Algoritmos p.814/823

ments Melhoramento 1: union by rank 2 x 1 y 1 0 1 0 0 0 0 0 rank[x] = posto do nó x MAKESET (x) 1 pai[x] x 2 rank[x] 0 Algoritmos p.815/823

Melhoramento 1: union by rank 2 x UNION (x, y) 1 0 1 0 1 y 0 0 0 0 rank[x] = posto do nó x MAKESET (x) 1 pai[x] x 2 rank[x] 0 Algoritmos p.816/823

Melhoramento 1: union by rank 2 x UNION (x, y) 1 0 1 0 1 y 0 0 0 0 rank[x] = posto do nó x MAKESET (x) 1 pai[x] x 2 rank[x] 0 Algoritmos p.817/823

Melhoramento 1: union by rank rank[x] > rank[y] rank[x] rank[y] nts rank[x] = rank[y] rank[x] + 1 rank[y] Algoritmos p.818/823

Melhoramento 1: union by rank UNION (x, y) com union by rank 1 x FINDSET (x) 2 y FINDSET (y) supõe que x y 3 se rank[x ] > rank[y ] 4 então pai[y ] x 5 senão pai[x ] y 6 se rank[x ] = rank[y ] 7 então rank[y] rank[y] + 1 Algoritmos p.819/823

Melhoramento 1: estrutura rank[x] rank[pai[x]] para cada nó x rank[x] = rank[pai[x]] se e só se x é raiz rank[pai[x]] é uma função não-descrente do tempo número de nós de uma árvore de raiz x é 2 rank[x]. número de nós de posto k é n/2 k. altura(x) = rank[x] lg n para cada nó x altura(x) := comprimento do mais longo caminho que vai de x até uma folha Algoritmos p.820/823

Melhoramento 1: custo Seqüência de operações MAKESET, UNION, FINDSET M M M }{{} U F U U F U F F F U F n }{{} m altura(x) lg n para cada nó x Consumos de tempo: MAKESET Θ(1) UNION O(lg n) FINDSET O(lg n) Consumo de tempo total da seqüência: O(m lg n) Algoritmos p.821/823

Melhoramento 2: path compression e d c acements x b FINDSET(x) Algoritmos p.822/823

Melhoramento 2: path compression e acements a b c d FINDSET(x) Algoritmos p.822/823

Melhoramento 2: path compression FINDSET (x) com path compression 1 se x pai[x] 2 então pai[x] FINDSET (pai[x]) 3 devolva pai[x] rank[x] rank[pai[x]] para cada nó x rank[x] = rank[pai[x]] se e só se x é raiz rank[pai[x]] é uma função não-descrente do tempo número de nós de uma árvore de raiz x é 2 rank[x]. número de nós de posto k é n/2 k. altura(x) rank[x] lg n para cada nó x Algoritmos p.823/823