A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21.

Apresentações semelhantes


Apresentação em tema: "Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21."— Transcrição da apresentação:

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


Carregar ppt "Análise e Síntese de Algoritmos Estruturas de Dados p/ Conjuntos DisjuntosCLRS, Cap. 21."

Apresentações semelhantes


Anúncios Google