1 / 19

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos. Estruturas de Dados p/ Conjuntos Disjuntos CLRS, Cap. 21. Resumo. Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Resumo Definições Operações Estruturas baseadas em listas Estruturas baseadas em árvores

lily
Télécharger la présentation

Análise e Síntese de Algoritmos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Resumo • Estruturas de dados para conjuntos disjuntos Análise e Síntese de Algoritmos

  3. Estruturas de Dados para Conjuntos Disjuntos • Resumo • Definições • Operações • Estruturas baseadas em listas • Estruturas baseadas em árvores • Aplicações Análise e Síntese de Algoritmos

  4. 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 Análise e Síntese de Algoritmos

  5. 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, Sx e Sy: • Novo conjunto criado: Sx Sy • Sx e Sy eliminados (conjuntos disjuntos) • Find-Set(x) • Retorna apontador para o representante do conjunto que contém x Análise e Síntese de Algoritmos

  6. 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 Análise e Síntese de Algoritmos

  7. 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 Análise e Síntese de Algoritmos

  8. r s t 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 Análise e Síntese de Algoritmos

  9. Tempos de Execução • Sequência de m operações é O(m2) • 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(xi-1,xi), para i = 2, …, q • Cada operação Union(xi-1,xi) actualiza i-1 elementos • Custo de q operações: (q2) • Tempo total de m operações é (n+q2), o que representa (m2) Análise e Síntese de Algoritmos

  10. 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 Análise e Síntese de Algoritmos

  11. 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 Análise e Síntese de Algoritmos

  12. 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) Análise e Síntese de Algoritmos

  13. 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 Análise e Síntese de Algoritmos

  14. 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 Análise e Síntese de Algoritmos

  15. y x w z y x w z 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) Análise e Síntese de Algoritmos

  16. Pseudo Código Make-Set(x) p[x] = x rank[x] = 0 Find-Set(x) if x  p[x] p[x] = Find-Set(p[x]) return p[x] path compression 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 union by rank Análise e Síntese de Algoritmos

  17. Tempos de Execução • Execução de m operações sobre n elementos: • O(m (n)) • Onde: Análise e Síntese de Algoritmos

  18. Tempos de Execução (Cont.) Análise e Síntese de Algoritmos

  19. Revisão • Estruturas de dados para conjuntos disjuntos Análise e Síntese de Algoritmos

More Related