Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouIlda Igrejas Esteves Alterado mais de 9 anos atrás
1
Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21
2
2003/2004Análise e Síntese de Algoritmos2 Resumo Estruturas de dados para conjuntos disjuntos
3
2003/2004Análise e Síntese de Algoritmos3 Estruturas de Dados para Conjuntos Disjuntos Resumo –Definições Operações –Estruturas baseadas em listas –Estruturas baseadas em árvores –Aplicações
4
2003/2004Análise e Síntese de Algoritmos4 Definições Estrutura de Dados para Conjuntos Disjuntos: –Permite manter uma colecção de conjuntos dinâmicos disjuntos Cada conjunto caracterizado por representante, um elemento do conjunto Representante não alterado devido a consultas à estrutura de dados
5
2003/2004Análise e Síntese de Algoritmos5 Operações Sobre Conjuntos Disjuntos Cada elemento da estrutura é representado por objecto x Make-Set(x) –Cria novo conjunto que apenas inclui elemento apontado por x x aponta para único elemento do conjunto, o representante do conjunto Union(x,y) –Realiza a união dos conjuntos que contêm x e y, S x e S y : Novo conjunto criado: S x S y S x e S y eliminados (conjuntos disjuntos) Find-Set(x) –Retorna apontador para o representante do conjunto que contém x
6
2003/2004Análise e Síntese de Algoritmos6 Exemplo Algoritmo de Kruskal (CLRS, Cap. 23): –Make-Set: Cria cada conjunto (disjunto) que representa conjunto de vértices –Find-Set: Identifica conjunto a que pertence um dado vértice –Union: Coloca conjuntos de vértices num mesmo conjunto
7
2003/2004Análise e Síntese de Algoritmos7 Exemplo Elementos ligados de um grafo não dirigido G = (V,E): Connected-Components(G) for v V[G] Make-Set(v) for (u,v) E[G] if Find-Set(u) Find-Set(v) Union(u,v) Same-Component(u,v) if Find-Set(u) = Find-Set(v) return TRUE else return FALSE
8
2003/2004Análise e Síntese de Algoritmos8 Utilização de Lista Ligada Organização: –Elementos de cada conjunto em lista (simplesmente) ligada –Primeiro elemento é o representante do conjunto –Todos os elementos incluem apontador para o representante do conjunto rst
9
2003/2004Análise e Síntese de Algoritmos9 Tempos de Execução Sequência de m operações é O(m 2 ) Union(x,y): –Colocar elementos de x no fim da lista de y Operações: (n = m/2 + 1; q = m/2 -1; m = n + q) –n operações Make-Set –Sequência de q operações Union(x i-1,x i ), para i = 2, …, q Cada operação Union(x i-1,x i ) actualiza i-1 elementos Custo de q operações: (q 2 ) –Tempo total de m operações é (n+q 2 ), o que representa (m 2 )
10
2003/2004Análise e Síntese de Algoritmos10 Heurística União Pesada A cada conjunto associar o número de elementos Para cada operação Union: –Juntar lista com menor número de elementos à lista com maior número de elementos Custo total de m operações é melhorado
11
2003/2004Análise e Síntese de Algoritmos11 Tempos de Execução (com Heurística) Sequência de m operações (que incluem n operações Union) é: O(m + n lg n) Prova: –Para cada objecto num conjunto com n elementos, calcular limite superior do número de vezes que ponteiro para representante é actualizado
12
2003/2004Análise e Síntese de Algoritmos12 Tempo de Execução (Cont.) –Sempre que ponteiro de x é actualizado, x encontra-se em conjunto com menor número de elementos Da 1ª vez, conjunto resultante com pelo menos 2 elementos Da 2ª vez, conjunto resultante com pelo menos 4 elementos … Após representante de x ter sido actualizado lg k vezes, conjunto resultante tem pelo menos k elementos –Maior conjunto tem n elementos Cada ponteiro actualizado não mais do que lg n vezes –Tempo total para actualizar n objectos é O(n lg n) –Make-Set e Find-Set têm tempos de execução O(1) –Tempo total para m operações (com n Union) é O(m + n lg n)
13
2003/2004Análise e Síntese de Algoritmos13 Utilização de Árvores Organização: –Cada conjunto representado por uma árvore –Cada elemento aponta apenas para antecessor –Representante da árvore é a raiz Antecessor da raiz é a própria raiz Find-Set: Percorrer antecessores até raiz ser encontrada Union: Raiz de uma árvore aponta para raiz da outra árvore Complexidade: sequência de O(m) operações é O(m n) –Uma árvore que é apenas lista dos n elementos
14
2003/2004Análise e Síntese de Algoritmos14 Heurística - União por Categoria Numa união de dois conjuntos, colocar árvore com menos elementos a apontar para árvore com mais elementos –Utilizar estimativa do número de elementos em cada sub- árvore categoria (rank): aproxima logaritmo do tamanho da sub- árvore e é um limite superior na altura da sub-árvore facilita análise dos tempos de execução –Numa união, raiz da árvore com menor rank aponta para raiz da árvore com maior rank
15
2003/2004Análise e Síntese de Algoritmos15 Heurística - Compressão de Caminhos Em cada operação Find-Set coloca cada nó visitado a apontar directamente para a raiz da árvore (representante do conjunto) y x w z yxw z
16
2003/2004Análise e Síntese de Algoritmos16 Pseudo Código Make-Set(x) p[x] = x rank[x] = 0 Union(x,y) Link(Find-Set(x), Find-Set(y)) Link(x,y) if rank[x] > rank[y] p[y] = x else p[x] = y if rank[x] = rank[y] rank[y] = rank[y] + 1 Find-Set(x) if x p[x] p[x] = Find-Set(p[x]) return p[x] path compression union by rank
17
2003/2004Análise e Síntese de Algoritmos17 Tempos de Execução Execução de m operações sobre n elementos: –O(m (n)) –Onde:
18
2003/2004Análise e Síntese de Algoritmos18 Tempos de Execução (Cont.)
19
2003/2004Análise e Síntese de Algoritmos19 Revisão Estruturas de dados para conjuntos disjuntos
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.