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