Você está na página 1de 50

Heaps binomiais

Gabriel Pedro de Castro

20 de setembro de 2007

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Heaps binomiais so formados por uma lista ligada de rvores a a binomiais. Denio ca Arvores binomiais so denidas recursivamente da seguinte forma: a

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Heaps binomiais so formados por uma lista ligada de rvores a a binomiais. Denio ca Arvores binomiais so denidas recursivamente da seguinte forma: a B0 :

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Heaps binomiais so formados por uma lista ligada de rvores a a binomiais. Denio ca Arvores binomiais so denidas recursivamente da seguinte forma: a B0 :

Bk :

B (k1) B (k1)

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais

Alguns exemplos de rvores binomiais a B0 B1 B2 B3

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Mais um exemplo: B4

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais

Propriedades das rvores binomiais a Uma rvore binomial Bk : a

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais

Propriedades das rvores binomiais a Uma rvore binomial Bk : a Possui 2k ns; o Prova: Induo em k. Para B0 : 20 = 1. ca Bk possui duas subrvores Bk1 : a Bk = Bk1 + Bk1 = 2k1 + 2k1 = 2k .

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais

Propriedades das rvores binomiais a Uma rvore binomial Bk : a Possui 2k ns; o Prova: Induo em k. Para B0 : 20 = 1. ca Bk possui duas subrvores Bk1 : a Bk = Bk1 + Bk1 = 2k1 + 2k1 = 2k . Tem altura k; Prova: Tambm por induo em k. Para B0 : k = 0. e ca Para Bk : Uma rvore Bk formada por duas subrvores a e a Bk1 , sendo que a ra de uma se torna lha da ra da outra; z z portanto a altura da rvore aumentada de 1 em relao as a e ca lhas. h(k) = h(k 1) + 1 = k.

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Propriedades das rvores binomiais continuao a ca

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Propriedades das rvores binomiais continuao a ca O n i possui exatamente k , i = 0, 1, . . . , k, ns. vel o i Prova: Seja D(k, i) o nmero de ns na profundidade i da u o rvore Bk . Como Bk composta de duas Bk1 , na a e profundidade i de Bk aparecem os ns da profundidade i de o uma Bk1 e i 1 da outra. Assim, D(k, i) = D(k 1, i) + D(k 1, i 1). Pela hiptese de o induo, D(k, i) = k1 + k1 = k . ca i i1 i

Gabriel Pedro de Castro

Heaps binomiais

Arvores binomiais
Propriedades das rvores binomiais continuao a ca O n i possui exatamente k , i = 0, 1, . . . , k, ns. vel o i Prova: Seja D(k, i) o nmero de ns na profundidade i da u o rvore Bk . Como Bk composta de duas Bk1 , na a e profundidade i de Bk aparecem os ns da profundidade i de o uma Bk1 e i 1 da outra. Assim, D(k, i) = D(k 1, i) + D(k 1, i 1). Pela hiptese de o induo, D(k, i) = k1 + k1 = k . ca i i1 i A ra tem grau k, maior que de todos os outros ns, e cada z o lho i, i = k 1, k 2, . . . , 0, raiz de uma subrvore Bi . e a Prova: A ra de Bk tem o grau aumentado em um em z relao a Bk1 justamente por estar ligada a outra Bk1 . ca Ainda por induo, como a raiz de Bk1 est ligada a ca a subrvores B0 , B1 , . . . , Bk2 , ento Bk tambem o estar, a a a assim como estar ligada a uma outra ra Bk1 , pois a z e formada pela unio das duas subrvores. a a
Gabriel Pedro de Castro Heaps binomiais

Denio ca

Um heap binomial H um conjunto de rvores binomiais que e a satisfaz as seguintes propriedades:

Gabriel Pedro de Castro

Heaps binomiais

Denio ca

Um heap binomial H um conjunto de rvores binomiais que e a satisfaz as seguintes propriedades: Toda rvore binomial de H tem estrutura de heap, i.e., a a chave de um n maior ou igual a chave de seu pai. Assim, oe sabemos que a ra possui a menor chave da rvore. z a

Gabriel Pedro de Castro

Heaps binomiais

Denio ca

Um heap binomial H um conjunto de rvores binomiais que e a satisfaz as seguintes propriedades: Toda rvore binomial de H tem estrutura de heap, i.e., a a chave de um n maior ou igual a chave de seu pai. Assim, oe sabemos que a ra possui a menor chave da rvore. z a H no mximo uma rvore binomial em H com uma ra de a a a z um determinado grau. Assim, para um heap de n ns h, no o a mximo, lg n + 1 rvores binrias. Para ver isto basta a a a pensar na representao binria do nmero de elementos do ca a u lg n heap: < b lg n , b lg n 1 , . . . , b0 >, com n = i=0 bi 2i .

Gabriel Pedro de Castro

Heaps binomiais

Exemplo
A gura um heap binomial com as rvores B0 , B2 e B3 , com e a (1101)2 = 13 elementos:

Gabriel Pedro de Castro

Heaps binomiais

Representao ca
Representamos um heap binomial com uma lista de rvores a binomiais. Cada n possui um apontador para o n pai, uma para o o seu lho esquerdo e um para uma lista ligada de seus irmos. a
10 head[H] 0 1 2

p key degree child 12 1 25 0

18 0

sibling

Gabriel Pedro de Castro

Heaps binomiais

Algoritmos

Gabriel Pedro de Castro

Heaps binomiais

Algoritmos

Criando um novo heap. Para criar um novo heap apenas alocamos e retornamos uma estrutura H tal que head[h] = NIL. Este algoritmo tem complexidade (1).

Gabriel Pedro de Castro

Heaps binomiais

Algoritmos

Criando um novo heap. Para criar um novo heap apenas alocamos e retornamos uma estrutura H tal que head[h] = NIL. Este algoritmo tem complexidade (1). Encontrando a menor chave. Para encontrar o menor elemento basta percorrer as ra das rvores buscando o zes a menor elemento. Como vimos, h no mximo lg n + 1 ra a a zes para checarmos o que nos d um algoritmo de complexidade a O(lg n).

Gabriel Pedro de Castro

Heaps binomiais

Busca pela menor chave

Algoritmo para busca o menor elemento Binomial-Heap-Minimum(H) 1. y NIL 2. x head[H] 3. min 4. while x = NIL do 5. if key [x] < min then 6. min key [x] 7. y x 8. x sibling [x] 9. return y

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Gabriel Pedro de Castro

Heaps binomiais

Unio a
Uma vantagem dos heaps binomiais em relao aos heaps ca binrios a unio. Esta operao pode ser feita em tempo a e a ca O(lg n).

Gabriel Pedro de Castro

Heaps binomiais

Unio a
Uma vantagem dos heaps binomiais em relao aos heaps ca binrios a unio. Esta operao pode ser feita em tempo a e a ca O(lg n). Nesta operao vamos utilizar uma funo auxiliar que junta ca ca duas rvores Bk1 . A ra z ser tambm ra da nova rvore a z a e z a Bk . Binomial-Link(y , z) 1. p[y ] z 2. sibling [y ] child[z] 3. child[z] y 4. degree[z] degree[z] + 1

Gabriel Pedro de Castro

Heaps binomiais

Unio a
Uma vantagem dos heaps binomiais em relao aos heaps ca binrios a unio. Esta operao pode ser feita em tempo a e a ca O(lg n). Nesta operao vamos utilizar uma funo auxiliar que junta ca ca duas rvores Bk1 . A ra z ser tambm ra da nova rvore a z a e z a Bk . Binomial-Link(y , z) 1. p[y ] z 2. sibling [y ] child[z] 3. child[z] y 4. degree[z] degree[z] + 1 Precisamos tambm de um procedimento e Binomial-Heap-Merge, que junta dois heaps binomiais em ordem monotonicamente crescente do grau das ra zes.
Gabriel Pedro de Castro Heaps binomiais

Unio a
Algoritmo de unio a Binomial-Heap-Union(H1 , H2 ) 1. H Make-Binomial-Heap() 2. head[H] Binomial-Heap-Merge(H1 , H2 ) 3. if head[H] = NIL then 4. return H 5. prevx NIL 6. x head[H] 7. nextx sibling [x] 8. while nextx = NIL do 9. if (degree[x] = degree[nextx ]) or (sibling [nextx ] = NIL and degree[sibling [nextx ]] = degree[x]) then 10. prevx x /* Casos 1 e 2 */ 11. x nextx
Gabriel Pedro de Castro Heaps binomiais

Unio a
Algoritmo de unio - continuao a ca 12. else if key [x] key [nextx ] then 13. sibling [x] sibling [nextx ] /* Caso 3 */ 14. Binomial-Link(nextx , x) 15. else 16. if prevx = NIL then /* Caso 4 */ 17. head[H] nextx 18. else 19. sibling [prevx ] nextx 20. Binomial-Link(x, nextx ) 21. x nextx 22. nextx sibling [x] 23. return H

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Gabriel Pedro de Castro

Heaps binomiais

Unio a

O caso 1 ocorre quando no h rvores de mesmo grau a aa consecutivas.

Gabriel Pedro de Castro

Heaps binomiais

Unio a

O caso 1 ocorre quando no h rvores de mesmo grau a aa consecutivas. No caso 2 h trs rvores com o mesmo grau em seguida, a e a formadas aps a unio de duas rvores. Exemplo: cada um o a a dos heaps originais possu uma B1 e uma B2 . Ao unir-se as a rvores B1 camos com trs B2 a e

Gabriel Pedro de Castro

Heaps binomiais

Unio a

O caso 1 ocorre quando no h rvores de mesmo grau a aa consecutivas. No caso 2 h trs rvores com o mesmo grau em seguida, a e a formadas aps a unio de duas rvores. Exemplo: cada um o a a dos heaps originais possu uma B1 e uma B2 . Ao unir-se as a rvores B1 camos com trs B2 a e O Caso 3 as duas vores Bk1 so somadas para formar uma a a Bk , sendo que a que possui a ra com menor chave aparece z primeiro na lista.

Gabriel Pedro de Castro

Heaps binomiais

Unio a

O caso 1 ocorre quando no h rvores de mesmo grau a aa consecutivas. No caso 2 h trs rvores com o mesmo grau em seguida, a e a formadas aps a unio de duas rvores. Exemplo: cada um o a a dos heaps originais possu uma B1 e uma B2 . Ao unir-se as a rvores B1 camos com trs B2 a e O Caso 3 as duas vores Bk1 so somadas para formar uma a a Bk , sendo que a que possui a ra com menor chave aparece z primeiro na lista. Por ultimo, temos o caso anlogo ao 3, porm quando a a e rvore que possui a menor chave aparece depois na lista. a

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Os dois heaps iniciais.


12 7 15 18 3 6

25

28

33

37

29

10

44

41

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Aps Binomial-Heap-Merge. Temos o caso 3. o


x 12 next-x 18 7 3 15 6

25

37

28

33

29

10

44

41

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Caso 2
x 12 next-x 7 3 15 6

18

25

37

28

33

29

10

44

41

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Caso 4
prev-x 12 x 7 next-x 3 15 6

18

25

37

28

33

29

10

44

41

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Caso 3
prev-x 12 x 3 next-x 15 6

18

37

28

33

29

10

44

25

41

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

Caso 1
prev-x 12 x 3 next-x 6

18

15

37

29

10

44

28

33

25

30

23

22

48

31

17

41

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Unio a

A complexidade do algoritmo de unio O(lg n) a e Prova. Se H1 possui n1 ns e H2 possui n2 , ento o nmero total o a u de rvores binomiais lg n1 + lg n2 + 2 2 lg n + 2 = O(lg n), a e que a complexidade de Binomial-Heap-Merge. Cada iterao do e ca lao while consome tempo constante, e tambm executado para c e e cada rvore do heap, e portanto tem complexidade O(lg n). a

Gabriel Pedro de Castro

Heaps binomiais

Insero ca

Gabriel Pedro de Castro

Heaps binomiais

Insero ca
Para inserir um n basta criarmos um novo heap contendo o apenas este elemento e uni-lo ao heap em que queremos inserir-lo. Como vimos, a criar um novo heap consome tempo constante e a unio O(lg n). Portanto, inserir um novo a e elemento tem complexidade O(lg n). Algoritmo de insero ca Binomial-Heap-Insert(H, x) 1. H Make-Binomial-Heap() 2. p[x] NIL 3. child[x] NIL 4. sibling [x] NIL 5. degree[x] 0 6. head[H ] x 7. H Binomial-Heap-Union(H, H )
Gabriel Pedro de Castro Heaps binomiais

Extraindo o menor elemento

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

Para extrair o menor elemento do heap buscamos sua posio ca (em O(lg n)) e extra mos a rvore em que ele ra digamos a e z, Bk .

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

Para extrair o menor elemento do heap buscamos sua posio ca (em O(lg n)) e extra mos a rvore em que ele ra digamos a e z, Bk . Criamos um novo heap H a partir das subrvores deste a elemento, B0 , B1 , . . . , Bk1 e fazemos a unio de H e H . a Esta operao tem complexidade O(lg n). ca

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

Para extrair o menor elemento do heap buscamos sua posio ca (em O(lg n)) e extra mos a rvore em que ele ra digamos a e z, Bk . Criamos um novo heap H a partir das subrvores deste a elemento, B0 , B1 , . . . , Bk1 e fazemos a unio de H e H . a Esta operao tem complexidade O(lg n). ca Assim, conclu mos que a operao de extrair o menor ca elemento do heap tem complexidade O(lg n).

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

Algoritmo para extrair o menor elemento Binomial-Heap-Extract-Min() 1. Encontre a ra x com a menor chave em H e a remova da lista z de ra de H zes 2. H Make-Binomial-Heap() 3. Inverta a ordem da lista ligada de lhos de x e a atribua a H 4. H Binomial-Heap-Union(H,H ) 5. return x

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

18

37

29

10

44

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

18

44

10

29

37

17

48

31

30

23

22

50

45

32

24

55

Gabriel Pedro de Castro

Heaps binomiais

Extraindo o menor elemento

18

44

29

10

37

30

23

22

48

31

17

45

32

24

50

55

Gabriel Pedro de Castro

Heaps binomiais

Concluso a

Os heaps binomiais so ecientes na operao de unio. a ca a Complexidades dos algoritmos para trs tipos de heap e Procedimento Make-heap Insert Minimum Extract-Min Union Decrease-key Delete Heap binrio a (pior caso) (1) (lg n) (1) (lg n) (n) (lg n) (lg n) Heap binomial (pior caso) (1) O(lg n) O(lg n) (lg n) O(lg n) (lg n) (lg n) Heap de Fibonacci (amortizado) (1) (1) (1) O(lg n) (1) (1) O(lg n)

Gabriel Pedro de Castro

Heaps binomiais

Você também pode gostar