CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

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

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

Aula 19 Conjuntos disjuntos (Union-find)

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

INF 1010 Estruturas de Dados Avançadas

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

Conjuntos disjuntos dinâmicos

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

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

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

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

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

Divisão-e-Conquista ( ) CAL ( ) MIEIC/FEUP. ./rr (1) Técnicas de Concepção de Algoritmos

Aula 08. Estruturas de dados Árvore e Grafo

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.

Estruturas de Dados Algoritmos de Ordenação

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

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

Árvores & Árvores Binárias

Classes, Herança e Interfaces

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

Matemática para Ciência de Computadores

AULA 22. Algoritmos p.793/823

Árvores & Árvores Binárias

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

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

Projeto e Análise de Algoritmos

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

CIC 111 Análise e Projeto de Algoritmos II

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

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

Universidade Federal de Mato Grosso Estrutura de Dados II

Estruturas de Dados II

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

Prof. Jesus José de Oliveira Neto

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. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

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

Árvores AVL e Árvores B. Jeane Melo

Árvores Binárias de Busca

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

INF 1010 Estruturas de Dados Avançadas

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

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

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

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

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

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

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

Algoritmos e Estruturas de Dados 2006/2007

Problemas de Fluxo em Redes

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

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

Árvores & Árvores Binárias

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

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

Pesquisa: operação elementar

Sub-grafo. Árvore Geradora Mínima

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

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

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

CAL ( ) MIEIC/FEUP Técnicas de Concepção de Algoritmos, CAL MIEIC/FEUP, Fev. de Técnicas de Concepção de Algoritmos. .

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

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

Complexidade de Algoritmos

CIC 110 Análise e Projeto de Algoritmos I

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Aula T13 BCC202 Árvores. Túlio Toffolo

Projeto e Análise de Algoritmos

Grupo 2 - Implementação de uma Classe Simples

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

Análise de Algoritmos

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

Árvores Binárias de Busca

Algoritmos probabilísticos

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

Análise de complexidade

Análise e Síntese de Algoritmos

Dois parâmetros essenciais t T tempo de transferência de um bloco. assume-se igual para operações de leitura e escrita

Algoritmos em Strings (compressão de texto)

6. Pesquisa e Ordenação

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

Árvores Binárias e Busca. Jeane Melo

Algoritmos de Pesquisa

Algoritmos de pesquisa. Tabelas de dispersão/hash

Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa

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

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

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

ANÁLISE DE ALGORITMOS

Algoritmos e Estruturas de Dados 2005/2006

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

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

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

Transcrição:

Conjuntos Disjuntos R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CPAL, 2010/2011 1 Conjuntos Disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Desempenho Uso análise complicada de avaliar para implementações mais complexas problemas de grafos equivalência de tipos em compiladores 2 Conjuntos Disjuntos./rr (1)

Conjuntos Disjuntos É uma colecção C=S 1, S 2,, S k de conjuntos dinâmicos distintos Cada conjunto é identificado por um dos seus elementos, chamado representativo Operações básicas sobre os conjuntos incluem: MAKE-SET(x): cria um novo conjunto com o elemento x apenas. Assume-se que x não existe noutro conjunto de C. UNION(x,y): combina dois conjuntos contendo x e y em um novo conj. único. Um novo representativo é seleccionado. FIND-SET(x): retorna o representativo do conjunto contendo x. 3 Relações de equivalência relação R (ou ~ ) definida num conjunto S se a R b = Verdadeiro ou a R b = Falso a, b S a R b ou a ~ b a está relacionado com b c g a h e b d f 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 4 Conjuntos Disjuntos./rr (2)

Relações de equivalência 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 Para decidir se a ~ b, é necessário apenas comprovar se a e b estão na mesma classe de equivalência 5 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 pretende-se obter esta conclusão rapidamente todos relacionados Observação: a ~ b a e b pertencem à mesma classe 6 Conjuntos Disjuntos./rr (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 ~ b à relação usa Busca em a e em b p/ verificar se pertencem já à mesma classe - se sim, o par é redundante - senã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 respondida 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 7 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; 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 Disjuntos./rr (4)

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 9 Exemplo inicial 1 2 3 4 5 6 7 após União(5, 6) 1 2 3 4 5 7 6 após União(7, ) 1 2 3 4 5 7 6 após União(5, 7) 1 2 3 4 5 6 7 representação implícita 0 0 0 0 0 5 5 7 1 2 3 4 5 6 7 10 Conjuntos Disjuntos./rr (5)

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 ] ); 11 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, - 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 12 Conjuntos Disjuntos./rr (6)

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) após União(4, 5) (altura 2) 1 2 3 4 5 6 7 13 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 9 13 4 6 7 10 11 14 15 12 16 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) 14 Conjuntos Disjuntos./rr (7)

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-por-Tamanho -1-1 -1 5-5 5 5 7 1 2 3 4 5 6 7 União-por-Altura 0 0 0 5-2 5 5 7 1 2 3 4 5 6 7 void União_por_Altura( int Root1, int Root2 ) if (S_Array [ Root2 ] < S_Array[ Root1] ) else S_Array[ Root1 ] = Root2; if (S_Array [ Root1 ] == S_Array[ Root2] ) S_Array [ Root1 ]--; S_Array [ Root2 ] = Root1; União (melhorado) 15 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 12 16 Conjuntos Disjuntos./rr ()

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 int Busca ( int X ) Busca com compressão if ( S_Array [ X ] <= 0 ) else return X; 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 17 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 1 Conjuntos Disjuntos./rr (9)

Lema (para resultados de complexidade *) 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. 19 Conjuntos Disjuntos./rr (10)