Análise e Síntese de Algoritmos

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

description

Análise e Síntese de Algoritmos. Estruturas de Dados p/ Conjuntos DisjuntosCLRS, 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 - PowerPoint PPT Presentation

Transcript of Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos

Estruturas de Dados p/ Conjuntos Disjuntos CLRS, Cap. 21

2003/2004 Análise e Síntese de Algoritmos 2

Resumo

• Estruturas de dados para conjuntos disjuntos

2003/2004 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

2003/2004 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

2003/2004 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

2003/2004 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

2003/2004 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 TRUEelse

return FALSE

2003/2004 Análise e Síntese de Algoritmos 8

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

r s t

2003/2004 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)

2003/2004 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

2003/2004 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

2003/2004 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)

2003/2004 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

2003/2004 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

2003/2004 Análise e Síntese de Algoritmos 15

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

2003/2004 Análise e Síntese de Algoritmos 16

Pseudo Código

Make-Set(x)p[x] = xrank[x] = 0

Union(x,y)Link(Find-Set(x), Find-Set(y))

Link(x,y)if rank[x] > rank[y]

p[y] = xelse

p[x] = yif 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

2003/2004 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:

n1A:kminn k

1k sejA

0k se1jjA 1j

1kk 12jA 1j

2 1j2jA1

2003/2004 Análise e Síntese de Algoritmos 18

Tempos de Execução (Cont.)

75A1AAA1A1A 1111)3(

12

32A1AA1A1A 000)2(

01 54A3AA3A3A 000)2(

01

1An204842047n837n42

3n12n00

n

4

80

2)2048(

2

333)2(

34

102047A2047A2047A1AA1A1A

20471827A1AA1A1A

82

22)2(

23

n1A:kminn k

1k sejA

0k se1jjA 1j

1kk

2003/2004 Análise e Síntese de Algoritmos 19

Revisão

• Estruturas de dados para conjuntos disjuntos