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

Documentos relacionados
CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

Conjuntos disjuntos. Relações de equivalência

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

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

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Conjuntos disjuntos dinâmicos

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

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

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

Aula 08. Estruturas de dados Árvore e Grafo

INF 1010 Estruturas de Dados Avançadas

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Estruturas de Dados Algoritmos de Ordenação

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

CIC 111 Análise e Projeto de Algoritmos II

Aula 19 Conjuntos disjuntos (Union-find)

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

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

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Árvores & Árvores Binárias

AULA 22. Algoritmos p.793/823

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

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

Classes, Herança e Interfaces

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

Matemática para Ciência de Computadores

Universidade Federal de Mato Grosso Estrutura de Dados II

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

Árvores. Prof. Byron Leite Prof. Tiago Massoni Prof. Fernando Buarque. Engenharia da Computação. Poli - UPE

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

Prof. Jesus José de Oliveira Neto

Árvores & Árvores Binárias

Algoritmos e Estruturas de Dados 2006/2007

Caminhos em Grafos. Grafos - Caminho Simples (1) (Cliente para M. de Adj.) static int visited[maxv];

Árvores Binárias de Busca

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Conjunto Quociente e Classe de Equivalência (Alguns Exemplos e Definições)

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

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

Árvores AVL e Árvores B. Jeane Melo

CIC 110 Análise e Projeto de Algoritmos I

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Estruturas de Dados II

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

AED - Algoritmos e Estruturas de Dados Licenciatura em Engenharia Electrónica

Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência

Algoritmos e Estruturas de Dados 2005/2006

ÁRVORES E ÁRVORES BINÁRIAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Projeto e Análise de Algoritmos

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

Pesquisa: operação elementar

Complexidade de Algoritmos

Árvores. Algoritmos e Estruturas de Dados I. José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP

Aula T13 BCC202 Árvores. Túlio Toffolo

Análise de Algoritmos

Árvores B. Prof. Márcio Bueno. / Fonte: Material da Prof a Ana Eliza Lopes Moura

Árvores B. Árvore B (ou melhor B+)

Fábio Protti - UFF Loana T. Nogueira - UFF Sulamita Klein UFRJ

Análise de complexidade

6. Pesquisa e Ordenação

Análise e Síntese de Algoritmos

Algoritmos de pesquisa. Tabelas de dispersão/hash

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Algoritmos e Estruturas de Dados 2007/2008. Ajusta a estrutura da árvore à frequência de acesso aos dados

AED2 - Aulas 06 e 07 Árvores AVL e rubro-negras

Árvores Binárias de Busca (ABB) 18/11

Prova 2 PMR3201 1o. semestre 2015 Prof. Thiago Martins

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Busca em Regiões Ortogonais

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Análise e Complexidade de Algoritmos

Métodos de Ordenação Parte 3

(a) todos os nós irmãos da árvore m-ária são interligados; (b) todas as conexões pai-filho são removidas, exceto a primeira de cada grupo.

Árvores Binárias e Busca. Jeane Melo

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Capítulo 6 Análise de Algoritmos Capítulo 6

Algoritmos probabilísticos

Árvores Binárias de Busca

1 Espaços Vectoriais

Árvores Vermelho-Preto

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Árvores Vermelho-Preto

Algoritmos de Pesquisa

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

4.1 Preliminares. No exemplo acima: Dom(R 1 ) = e Im(R 1 ) = Dom(R 2 ) = e Im(R 2 ) = Dom(R 3 ) = e Im(R 3 ) = Diagrama de Venn

Comparação com Divisão e Conquista

Transcrição:

Conjuntos disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Desempenho análise complicada Uso problemas de grafos equivalência de tipos em compiladores Conjuntos 1

Relações de equivalência relação R definida num conjunto S se a R b = V ou a R b = F a R b a está relacionado com b a, b S propriedades das relações de equivalência reflexiva a R a, a S simétrica a R b b R a transitiva a R b, b R c a R c exemplos de relações reflexiva, transitiva; não é simétrica não é de equivalência "pertencer ao mesmo país" (S é o conjunto das cidades) reflexiva, simétrica, transitiva relação de equivalência classe de equivalência de a S subconjunto de S que contém os elementos relacionados com a relação de equivalência induz uma partição de S: cada elemento pertence exactamente a uma classe c g a h e b d f Conjuntos 2

Problema da equivalência dinâmica R: relação de equivalência Problema: dados a e b, determinar se a R b Solução: relação armazenada numa matriz bidimensional de booleanos resposta em tempo constante Dificuldade: relações definidas implicitamente {a1, a2, a3, a4, a5} (25 pares) a1 R a2, a3 R a4, a5 R a1, a4 R a2 todos relacionados pretende se obter esta conclusão rapidamente Observação: a R b a e b pertencem à mesma classe de equivalência Conjuntos 3

Algoritmo abstracto Entrada: colecção de n conjuntos, cada um com seu elemento disjuntos só propriedade reflexiva Duas operações Busca devolve o nome do conjunto que contém um dado elemento União dados dois conjuntos substitui os pela respectiva união (preserva a disjunção da colecção) Método: acrescentar o par a R b à relação usa Busca em a e em b para verificar se pertencem já à mesma classe se sim, o par é redundante se não, aplica União às respectivas classes algoritmo dinâmico (os conjuntos são alterados por União) e em linha (cada Busca tem que ser respondido antes de o algoritmo continuar) valores dos elementos irrelevantes basta numerá los com uma função de dispersão nomes concretos dos conjuntos irrelevantes basta que a igualdade funcione Conjuntos 4

Privilegiando a Busca Busca com tempo constante para o pior caso: implementação: vector indexado pelos elementos indica nome da classe respectiva Busca fica uma consulta de O(1) União(a, b): se Busca(a) = i e Busca(b) = j, pode se percorrer o vector mudando todos os i's para j custo Θ(n) para n 1 Uniões (o máximo até ter tudo numa só classe) tempo Θ(n^2) se houver Ω(n^2) Busca, o tempo é O(1) para operação elementar; se não é mau Melhoramentos: colocar os elementos da mesma classe numa lista ligada para saltar directamente de uns para os outros ao fazer a alteração do nome da classe (mantém o tempo do pior caso em O(n^2) ) registar o tamanho da classe de equivalência para alterar sempre a mais pequena; cada elemento é alterado no máximo log n vezes (cada fusão duplica a classe) com n 1 fusões e m Buscas O(n log n + m) Conjuntos 5

Privilegiando a União Representar cada conjunto como uma árvore a raiz serve como nome do conjunto as árvores podem não ser binárias: cada nó só tem um apontador para o pai as árvores são armazenadas implicitamente num vector p[i] contém o número do pai do elemento i se i for uma raiz p[i] = 0 União: fusão de duas árvores pôr a raiz de uma a apontar para a outra ( O(1) ) convenção: União(x, y) tem como raiz x Busca(x) devolve a raiz da árvore que contém x tempo proporcional à profundidade de x (n 1 no pior caso) m operações podem durar O(mn) no pior caso Não é possível ter tempo constante simultaneamente para União e Busca Conjuntos 6

Exemplo inicial 1 2 3 4 5 6 7 8 após União(5, 6) 1 2 3 4 5 7 8 6 após União(7, 8) 1 2 3 4 5 7 6 8 após União(5, 7) 1 2 3 4 5 representação implícita 0 0 0 0 0 5 5 7 1 2 3 4 5 6 7 8 6 7 8 Conjuntos 7

Implementação construtor Disj_Sets(int Num_Elements) { S_Size = Num_Elements; S_Array = new int [S_Size + 1]; for( int i=0; i <= S_Size; i++) S_Array[i] = 0; } União (fraco) Void Unir( int Root1, int Root2 ) { S_Array [ Root2 ] = Root1; } Busca simples int Busca( int X ) { if ( S_Array [ X ] <= 0 ) return X; else return Busca( S_Array[ X ] ); } Conjuntos 8

Análise no caso médio Como definir "médio" relativamente à operação União? depende do modelo escolhido (ver exemplo anterior; última situação) 1 como no exemplo restaram 5 árvores, há 5*4 = 20 resultados equiprováveis da próxima União 2/5 de hipóteses de envolver a árvore maior 2 considerando como equiprováveis as Uniões entre dois quaisquer elementos de árvores diferentes há 6 maneiras de fundir dois elementos de {1, 2, 3, 4} e 16 maneiras de fundir um elemento de {1, 2, 3, 4} e um de {5, 6, 7, 8} probabilidade de a árvore maior estar envolvida: 16/22 O tempo médio depende do modelo: Θ(m), Θ(m log n), Θ(m n) tempo quadrático é mau, mas evitável Conjuntos 9

União melhorada após União(4, 5) (altura 3) 1 2 3 4 5 6 7 União por Tamanho colocar a árvore menor como sub árvore da maior (arbitrar em caso de empate) 8 após União(4, 5) (altura 2) 1 2 3 4 5 6 7 8 Conjuntos 10

União por Tamanho profundidade de cada nó nunca superior a log n um nó começa por ter profundidade 0 cada aumento de profundidade resulta de uma união que produz uma árvore pelo menos com o dobro do tamanho logo, há no máximo log n aumentos de profundidade Busca é O( log n ); m operações é O(m log n) Pior caso para n=16 (União entre árvores de igual tamanho) 1 2 3 5 4 6 7 8 9 10 11 12 13 14 15 registar a dimensão de cada árvore (na raiz respectiva e com sinal negativo) o resultado de uma União tem dimensão igual à soma das duas anteriores para m operações, dá O(m) 16 Conjuntos 11

União por Altura em vez da dimensão, regista se a altura coloca se a árvore mais baixa como subárvore da mais alta altura só se altera quando as árvores a fundir têm a mesma altura representação vectorial da situação após União(4, 5) União (melhorado) União por Tamanho 1 1 1 5 5 5 5 7 1 2 3 4 5 6 7 8 União por Altura 0 0 0 5 2 5 5 7 1 2 3 4 5 6 7 8 void União_por_Altura( int Root1, int Root2 ) { if (S_Array [ Root2 ] < S_Array[ Root1] ) S_Array[ Root1 ] = Root2; else { if (S_Array [ Root1 ] == S_Array[ Root2] ) S_Array [ Root1 ] ; S_Array [ Root2 ] = Root1; } } Conjuntos 12

Compressão algoritmo descrito é linear na maior parte das situações; mas no pior caso é O(m log n) já não é fácil melhorar o União : actuar na Busca Compressão do caminho ao executar Busca(x), todos os nós no caminho de x até à raiz ficam com a raiz como pai Compressão após Busca_e_Compressão( 15 ) 1 2 3 5 4 6 7 9 10 11 13 14 15 16 8 12 Conjuntos 13

Busca modificada profundidade de vários nós diminui com União arbitrária, a compressão garante m operações, no pior caso, em tempo O(m log n) desconhece se qual é, em média, o comportamento só da compressão Busca com compressão int Busca ( int X ) { if ( S_Array [ X ] <= 0 ) return X; else return S_Array[ X ] = Busca ( S_Array[ X ] ); } a compressão é compatível com União por Tamanho não é completamente compatível com União por Altura: não é fácil computar eficientemente as alturas modificadas pela compressão não se modificam os valores: passam a ser entendidos como estimativas da altura, designados por nível ambos os métodos de União garantem m operações em tempo linear: não é evidente que a compressão traga vantagem em tempo médio: melhora o tempo no pior caso; a análise é complexa, apesar da simplicidade do algoritmo Conjuntos 14

Aplicação rede de computadores com uma lista de ligações bidireccionais; cada ligação permite a transferência de ficheiros de um computador para o outro é possível enviar um ficheiro de um qualquer nó da rede para qualquer outro? o problema deve ser resolvido em linha, com as ligações apresentadas uma de cada vez o algoritmo começa por pôr cada computador em seu conjunto o invariante é que dois computadores podem transferir ficheiros se estiverem no mesmo conjunto esta capacidade determina uma relação de equivalência à medida que se lêem as ligações vão se fundindo os conjuntos o grafo da capacidade de transferência é conexo se no fim houver um único conjunto com m ligações e n computadores o espaço requerido é O(n) com União por Tamanho e compressão de caminho obtém se um tempo no pior caso praticamente linear Conjuntos 15

Lema (para resultados de complexidade Rever) Ao executar uma sequência de Uniões, um nó de nível r tem que ter 2^r descendentes (incluindo o próprio) Prova por indução a base, r = 0 é verdadeira: 2^0 = 1, e uma folha só tem um descendente (o próprio nó) seja T uma árvore de nível r com o mínimo número de descendentes e seja x a raiz de T suponha se que a última União que envolveu x foi entre T1 e T2 e que x era a raiz de T1 se T1 tivesse nível r, T1 seria uma árvore de altura r com menos descendentes do que T, o que contradiz o pressuposto de T ser uma árvore com o número mínimo de descendentes. Portanto, o nível de T1 r 1. O nível de T2 nível de T1. Uma vez que o nível de T é r e o nível só pode aumentar devido a T2, segue se que nível de T2 = r 1. Então também o nível de T1 = r 1. pela hipótese de indução, cada uma das árvores tem 2^(r 1) descendentes, dando um total de 2^r e estabelecendo o lema. Conjuntos 16