Escolar Documentos
Profissional Documentos
Cultura Documentos
20 de setembro de 2007
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
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 :
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)
Heaps binomiais
Arvores binomiais
Heaps binomiais
Arvores binomiais
Mais um exemplo: B4
Heaps binomiais
Arvores binomiais
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 .
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.
Heaps binomiais
Arvores binomiais
Propriedades das rvores binomiais continuao a ca
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
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
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
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 .
Heaps binomiais
Exemplo
A gura um heap binomial com as rvores B0 , B2 e B3 , com e a (1101)2 = 13 elementos:
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
18 0
sibling
Heaps binomiais
Algoritmos
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).
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).
Heaps binomiais
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
Heaps binomiais
Unio a
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).
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
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
Heaps binomiais
Unio a
Heaps binomiais
Unio a
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
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.
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
Heaps binomiais
Unio a
25
28
33
37
29
10
44
41
30
23
22
48
31
17
45
32
24
50
55
Heaps binomiais
Unio a
25
37
28
33
29
10
44
41
30
23
22
48
31
17
45
32
24
50
55
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
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
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
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
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
Heaps binomiais
Insero ca
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
Heaps binomiais
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 .
Heaps binomiais
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
Heaps binomiais
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).
Heaps binomiais
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
Heaps binomiais
18
37
29
10
44
30
23
22
48
31
17
45
32
24
50
55
Heaps binomiais
18
44
10
29
37
17
48
31
30
23
22
50
45
32
24
55
Heaps binomiais
18
44
29
10
37
30
23
22
48
31
17
45
32
24
50
55
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)
Heaps binomiais