heap de fibonacci alberto rodrigues costa junior - (arcj)

46
Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Upload: internet

Post on 18-Apr-2015

121 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Heap de FibonacciAlberto Rodrigues Costa Junior - (arcj)

Page 2: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Roteiro• Introdução• Estrutura• Operações• MAKE-HEAP• INSERT• MINIMUM• UNION• EXTRACT-MIN• DECREASE-KEY• DELETE

• Limite do grau máximo

Page 3: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Introdução

• Fredman e Tarjan em (Desenvolvido) 1984 / (Publicado)1987.

• Aplicações em problemas de Menor caminho, AGPM ...

Page 4: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Introdução

• Heaps binomiais suportam operações Minimum, Extract Minimum, Union, Delete e Decrease Key em tempo O(lgn) no pior caso.

• Heaps de Fibonacci suportam as mesmas operações acima que não envolvem exclusão em tempo amortizado O(1).

Page 5: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Introdução

Page 6: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Introdução

• Não foi desenvolvido para dar suporte eficiente a operação de Search.

• Do ponto de vista prático, os fatores constantes e a complexidade a tornam pouco desejável para a maioria dos problemas.

Page 7: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Estrutura

• Semelhante ao HB, mas tem uma estrutura bem menos rígida.• HB: Consolida árvores depois de cada Insert.

• HF: Adia a consolidação até a próxima exclusão

Page 8: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Estrutura• Como HB, o HF é uma coleção de árvores.• Também é coleção de heaps mínimos.

Page 9: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Estrutura• Lista de raízes (circular e duplamente ligada).• Ponteiro Min[H] apontado pra raiz que tiver menor valor.• Cada nó x tem um ponteiro p[x] pro seu pai. E um ponteiro

child[x] pra um de seus filhos.• Cada filho y esta em lista duplamente ligada e circular(left[y]

e right[y]).

Page 10: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Estrutura• degree[x] - número de filhos de x.• mark[x] - indica se o nó x perdeu um filho desde a ultima vez

que se tornou filho de outro nó.• n[H] - número de nós em H.

Page 11: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Função Potencial

• Usada para analisar o desempenho de operações de HF.• t(H) o número de árvores.•m(H) o número de nós marcados.

φ(H) = t(H) + 2m(H)

Page 12: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Operações

• Operações de heaps intercaláveis• Make Heap• Insert•Minimum• Union• Extract Min

Page 13: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Operações

• Árvores Binomiais Não Ordenadas• Uma árvore binomial não ordenada é

como uma arvore binomial:• U0 consiste de apenas um nó• Uk consiste de duas árvores binomiais não

ordenadas Uk-1, onde a raiz de uma delas se torna filho da outra

Page 14: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Operações

• Propriedades de árvores binomiais não ordenadas• Para uma árvore binomial não ordenada U vale:• Há 2^k nós em Uk.• A altura é k.• Há exatamente nós de profundidade i para i

= 0 ,1,...,k • A raiz tem grau k, que é o maior grau de qualquer

outro nó. Os filhos da raiz são raízes de árvores U0,U1, . . . Uk−1 emqualquer ordem

Page 15: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Operações

• Grau Máximo• D(n) é o grau máximo de qualquer nó em um HF

com n nós• Logo, se o HF é uma coleção de árvores binomiais

não ordenadas, então D(n) = lgn.

Page 16: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Make-HeapMake-Heap()1) n[H] = 02) min[H] = NIL3) Retorna H

• t(H) = 0• m(H) = 0• Então φ(H) = 0+ 2*0 = 0• Custo amortizado é igual ao custo real O(1)

Page 17: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Insert

Page 18: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Insert

Page 19: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Insert

• Seja H o heap de entrada e H’ heap resultante t(H’) = t(H) + 1 e m(H’) = m(H) então o aumento do potencial é :

((t(H) + 1) + 2m(H)) – (t(H) + 2m(H)) = 1

Como o custo real é O (1), o custo amortizado é (1) + 1 = Θ (1)

Page 20: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Minimum

• O nó mínimo é dado pelo ponteiro min[H]. Tempo real O(1) e tendo em vista que o potencial não muda o custo amortizado desta operação é igual ao seu custo real.

Page 21: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Union

Page 22: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Union

•Mudança de potencial:

φ(H) = φ(H1) + φ(H2) = (t(H) + 2m(H)) - ((t(H1) + 2m(H1)) + (t(H2) + 2m(H2)) ) = 0

Desse modo o custo amortizado de Union é igual ao custo real Θ(1).

Page 23: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Extract-min• O processo de extrair o nó minimo é mais complicado.• Onde a consolidação das árvores finalmente ocorre.

Page 24: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Extract-min

Page 25: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Extract-min

Page 26: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Extract-min

Page 27: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)
Page 28: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Extract-min

• O(D(n)+ t(H)) + ((D(n)+1) + 2m(H)) – (t(H) +2m(H)) = O(D(n)) + O(t(h)) – t(h) = O(D(n))

Page 29: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Decrease-key

• Aqui mostramos como a redução de uma chave de um nó em um HF pode ser realizada com custo amortizado O(1).• Mais adiante, mostraremos que a deleção de um nó

pode ser executada em tempo amortizado O(D(n)).• Essas operações não preservam a propriedade de que

todas as árvores no HF são árvores binomiais não ordenadas.• Estas árvores são “próximas” o suficiente para se limitar

o grau máximo D(n) por o(lgn).

Page 30: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Decrease-key

Page 31: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Decrease-key

Page 32: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Decrease-key

Page 33: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Decrease-key

Page 34: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Delete

Page 35: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Para mostrar que a análise amortizada de Extract-Min e Delete

executam em tempo amortizado O(lgn), temos que mostrar que D(n) (grau máximo de um nó em heap com n chaves) é da ordem O(lgn).• Se todas as árvores são árvores binomiais não ordenadas, então

D(n) = floor(lg(n)). • Os cortes que ocorrem em Decrease Key, entretanto, podem fazer

com que as árvores do HF deixem de ser binomiais

• Mostrar que, em virtude de cortarmos um nó x do seu pai y sempre que ele perde dois filhos, teremos D(n) é O(lgn)

Page 36: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Para cada nó x de um HF, defina size(x) como o número de

nós, incluindo x, que pertencem à árvore com raiz em x.• Vamos mostrar que size(x) é exponencial em degree[x].

• Lema• Seja x um nó de um HF e suponha que degree[x] = k.• Sejam y1, y2, . . . , yk os filhos de x na ordem que eles foram ligados

a x, a partir do primeiro ao último (mais recente).• Então, degree[y1] >= 0 e degree[yi ]>= i −2, para i = 2, 3, . . . , k

Page 37: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo

• Prova• Obviamente, degree[y1] >= 0.• Para i >= 2, quando yi se tornou filho de x os

elementos y1, . . . , yi−1 eram filhos de x, logo devemos ter degree[x] = i − 1.• Note que yi é ligado a x apenas se degree[x] =

degree[yi ], portanto devemos ter degree[yi ] = i − 1 no momento da ligação.• Dai concluímos que degree[yi ] >= i − 2.

Page 38: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Finalmente atingimos a parte da análise que explica o nome

“Heap de Fibonacci”.• Lembramos que a série Fibonacci é definida por:

• Lema:

Page 39: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Prova por indução

caso base k = 0

= 1 + F0

= 1 + 0

= 1 = F2

Page 40: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Hipótese indutiva que Fk +1 = 1+

• F2 + k = Fk +1 + Fk +1

= Fk +(1 +) = 1 +

Page 41: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Lema:

Page 42: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo

Page 43: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Lema:• Seja x um nó de um HF• Seja k = degree[x] o grau de x.• Então

• Prova• Sk é o menor valor possível size(x) de todos os nós z tais que

degree[z] = k• Sk é no máximo size(x), e o valor de sk aumenta monotonicamente

com k

Page 44: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo

Page 45: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo

Page 46: Heap de Fibonacci Alberto Rodrigues Costa Junior - (arcj)

Limitando o grau Máximo• Corolário: