heaps binomiais rômulo de almeida bruno mestrando em ciência da computação professora liliane...
TRANSCRIPT
![Page 1: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/1.jpg)
Heaps BinomiaisHeaps BinomiaisRômulo de Almeida Bruno
Mestrando em Ciência da ComputaçãoProfessora Liliane Salgado
Disciplina - Algoritmos
![Page 2: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/2.jpg)
AgendaAgenda
HistóricoVisão GeralÁrvores BinomiaisHeap BinomialOperações em Heaps BinomiaisAplicaçõesReferências
![Page 3: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/3.jpg)
HistóricoHistórico
“A Data Structure for Manipulating Priority Queues”, Jean Vuillemin, 1978 – Université de Paris-sud, Orsay, France. ◦ABSTRACT: A data structure is described which can
be used for representing a collection of priority queues. The primitive operations are insertion, deletion, union, update, and search for an item of earliest priority.
“Implementation and analysis of binomial queue algorithms” , Brown, M.R.
![Page 4: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/4.jpg)
Visão GeralVisão Geral
Estrutura de dados que faz parte das mergeable heaps (Fibonacci heaps e Soft heaps) e suporta as seguintes operações:◦MAKE-HEAP()◦INSERT(H,x)◦MINIMUM(H)◦EXTRACT-MIN(H)◦UNION(H1,H2)◦DECREASE-KEY(H,x,k)◦DELETE(H,x)
![Page 5: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/5.jpg)
Visão Geral (Análise Assintótica)Visão Geral (Análise Assintótica)
Procedimento Heap Binária (pior caso)
Heap Binomial (pior caso)
Heap de Fibonacci (amortizado)
MAKE-HEAP Θ(1) Θ(1) Θ(1)INSERT Θ(lg n) O(lg n) Θ(1)MINIMUM Θ(1)* O(lg n)* Θ(1)EXTRACT-MIN Θ(lg n) Θ(lg n) O(lg n)UNION Θ(n) O(lg n) Θ(1)DECREASE-KEY Θ(lg n) Θ(lg n) Θ(1)DELETE Θ(lg n) Θ(lg n) O(lg n)
Estrutura de Prioridades => Ruim para Busca
![Page 6: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/6.jpg)
Árvores BinomiaisÁrvores Binomiais
Uma Árvore Binomial Bk é uma árvore ordenada definida recursivamente:◦k = 0, um único nó◦Senão, duas árvores Bk-
1 ligadas: a raiz de uma é a filha mais a esquerda da outra.
![Page 7: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/7.jpg)
Árvores BinomiaisÁrvores Binomiais
Propriedades de Bk:◦possui 2k nós,◦a altura da árvore é k,◦há exatamente nós na profundidade i, onde
i = 0,...,k◦a raiz tem grau k (maior grau); se os nós filhos da
raiz fossem numerados da esquerda para a direita por k-1, k-2, ..., 0, um dado nó i é a raiz de uma sub-árvore Bi.
Corolário: O grau máximo de qualquer nó de uma árvore binomial de n nós é lg n.
ik
![Page 8: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/8.jpg)
Heap BinomialHeap Binomial
Um Heap Binomial H é um conjunto de árvores binomiais com as seguintes propriedades:◦cada árvore é ordenada como um heap mínino (ou
máximo)◦Há no máximo uma árvore binomial em H com uma
raíz de um determinado grau. Se H tem n nós, então ela contém no máximo lg n +
1 árvores binomiais. Prova: observe que, em binário, n tem lg n + 1 bits. Como cada árvore binomial de ordem k tem 2k nós, teríamos uma árvore para cada bit de n que fosse igual a 1.
![Page 9: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/9.jpg)
• Heaps são representadas como listas ordenadas (por grau/altura) de árvores binomiais
• Exemplo: Uma heap binomial com 13 (=1011B) nós
Heap BinomialHeap Binomial
![Page 10: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/10.jpg)
Criar novo Heap BinomialEncontrar chave mínimaUnir dois Heaps BinomiaisInserir nóExtrair nó com chave mínimaDecrementar chaveApagar chave
Operações em Heaps BinomiaisOperações em Heaps Binomiais
![Page 11: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/11.jpg)
MAKE-BINOMIAL-HEAP() - O(1)◦Cria um heap binomial vazio onde o nó inicial é
igual a null
BINOMIAL-HEAP-MINIMUM(H)- O(lgn)◦Retorna o menor valor
Operações em Heaps BinomiaisOperações em Heaps Binomiais
y := NIL x := H.inicio min := infinitywhile x <> NIL do if x.chave < min then min := x.chave y := x x := x.irmao return y
H.inicio = NIL return H
![Page 12: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/12.jpg)
BINOMIAL-HEAP-UNION(H1,H2) - O(lgn)◦2 partes:
Criar um heap resultante com o merge (H1, H2). Executar um laço até que esse novo heap tenha
todas as sub árvores em ordem crescente por grau e que nenhuma sub árvore tenha mesmo grau que outra.
Operações em Heaps BinomiaisOperações em Heaps Binomiais
![Page 13: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/13.jpg)
BINOMIAL-HEAP-UNION(H1,H2) ◦4 casos (x = nó inicial do heap):
1 (x.degree != next-x.degree): os ponteiros se deslocam uma posiçao mais baixo na lista de raízes. Ou seja, x passa a apontar para seu irmao.
2 (x.degree = next-x.degree = next-x.irmao.degree): os ponteiros se movem uma posição mais abaixo na lista, e a próxima iteração executa o caso 3 ou o caso 4.
3 (x.degree = next-x.degree != next-x.irmao.degree & x.key <= next-x.key): remove-se next-x da lista de raízes e a liga-se a x, criando uma árvore B k + 1
4 (x.degree = next-x.degree != next-x.irmao.degree & x.key > next-x.key): remove-se x da lista de raízes e a liga-se a next-x, criando uma árvore B k + 1
Operações em Heaps BinomiaisOperações em Heaps Binomiais
![Page 14: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/14.jpg)
BINOMIAL-HEAP-UNION(H1,H2)
Operações em Heaps BinomiaisOperações em Heaps Binomiais
H:=make-binomial-Heap()H.inicio := Binomial-Heap-Merge(H1,H2)if H.inicio = NIL then return Hx.ant := NILx.prox := x.irmaowhile x.prox <> NIL do if (x.grau <> x.prox.grau) or (x.prox.irmao <> NIL and x.prox.irmao.grau = x.grau) then x.ant := x x := x.prox else if x.chave <= x.prox.chave then x.irmao := x.prox.irmao Binomial-Link(x.prox,x) else if x.ant = NIL then H.inicio = x.prox else x.ant.irmao := x.prox Binomial-Link(x,x.prox) x := x.prox x.prox := x.irmao return H
![Page 15: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/15.jpg)
BINOMIAL-HEAP-MERGE(H1,H2)
BINOMIAL-LINK(Y,Z)
Operações em Heaps BinomiaisOperações em Heaps Binomiais
y.pai := zy.irmao := z.filhoz.filho := yz.grau := z.grau + 1
a = H1.iniciob = H2.inicio H1.inicio = minimoGrau(a, b)if H1.inicio = NIL returnif H1.inicio = b then b = aa = H1.inicio while b <> NIL do if a.irmao = NIL then a.irmao = b return else if a.irmao.grau < b.grau then a = a.irmao else c = b.irmao b.irmao = a.irmao a.irmao = b a = a.irmao b = c
![Page 16: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/16.jpg)
BINOMIAL-HEAP-UNION(H1,H2)
Operações em Heaps BinomiaisOperações em Heaps Binomiais
APPLET
IMG 1 IMG 2
![Page 17: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/17.jpg)
BINOMIAL-HEAP-INSERT(H,x) - O(lgn)
BINOMIAL-HEAP-EXTRACT-MIN(H) - O(lgn)
Operações em Heaps BinomiaisOperações em Heaps Binomiais
H' := makeHeap() x.pai := NILx.filho := NILx.irmao := NILx.grau := 0H'.inicio := xH := uniao(H,H‘)
//encontrar a raiz x com a chave mínima em H e remover x da lista H':= makeHeap() //inverter a ordem da lista ligada de filhos de x, e definir H' apontando //para o inicio da lista resultanteH:= Uniao(H,H')return x
EXEMPLO
EXEMPLO
![Page 18: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/18.jpg)
BINOMIAL-HEAP-DECREASE-KEY(H,x,k) - O(lgn)
BINOMIAL-HEAP-DELETE(H,x) - O(lgn)
Operações em Heaps BinomiaisOperações em Heaps Binomiais
if k > x.chave then error “new key is greater than current key" x.chave := k y := x z := y.paiwhile z <> NIL and y.chave < z.chave do troca y.chave e z.chave if y and z have satellite fields, exchange them, too. y := z z := y.pai
BINOMIAL-HEAP-DECREASE-KEY(H,x,-∞)BINOMIAL-HEAP-EXTRACT-MIN(H)
EXEMPLO
![Page 19: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/19.jpg)
AplicaçõesAplicações
Artigo de Vuillemin:◦Job scheduling◦Discrete simulation languages, where labels
represent the time at which events are to occur, ◦Various sorting problems ◦Optimal code constructions◦Chartre's prime number generator◦Brown's power series multiplication◦Numerical analysis algorithms and in graph
algorithms for such problems as finding shortest paths and minimum cost spanning tree.
![Page 20: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/20.jpg)
ReferênciasReferências
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Chapter 19: Binomial Heaps, pp.455–475.
Vuillemin, J. (1978). A data structure for manipulating priority queues. Communications of the ACM 21, 309-314. Disponível: http://portal.acm.org/citation.cfm?id=359478
http://www.cse.yorku.ca/~aaw/Sotirios/BinomialHeap.html
![Page 21: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/21.jpg)
DúvidasDúvidas
?
![Page 22: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/22.jpg)
VOLTAR
![Page 23: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/23.jpg)
VOLTAR
![Page 24: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/24.jpg)
VOLTAR
![Page 25: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/25.jpg)
VOLTAR
![Page 26: Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos](https://reader036.vdocuments.pub/reader036/viewer/2022070507/570638461a28abb8238f2da8/html5/thumbnails/26.jpg)
VOLTAR