Heaps Binomiais

26
Heaps Binomiais Heaps Binomiais Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos

description

Heaps Binomiais. Rômulo de Almeida Bruno Mestrando em Ciência da Computação Professora Liliane Salgado Disciplina - Algoritmos. Histórico Visão Geral Árvores Binomiais Heap Binomial Operações em Heaps Binomiais Aplicações Referências. Agenda. - PowerPoint PPT Presentation

Transcript of Heaps Binomiais

Page 1: Heaps  Binomiais

Heaps BinomiaisHeaps BinomiaisRômulo de Almeida Bruno

Mestrando em Ciência da ComputaçãoProfessora Liliane Salgado

Disciplina - Algoritmos

Page 2: Heaps  Binomiais

AgendaAgenda

HistóricoVisão GeralÁrvores BinomiaisHeap BinomialOperações em Heaps BinomiaisAplicaçõesReferências

Page 3: Heaps  Binomiais

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

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

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

Á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

Á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

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

• 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

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

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

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

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

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

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

BINOMIAL-HEAP-UNION(H1,H2)

Operações em Heaps BinomiaisOperações em Heaps Binomiais

APPLET

IMG 1 IMG 2

Page 17: Heaps  Binomiais

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

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

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

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

DúvidasDúvidas

?

Page 22: Heaps  Binomiais

VOLTAR

Page 23: Heaps  Binomiais

VOLTAR

Page 24: Heaps  Binomiais

VOLTAR

Page 25: Heaps  Binomiais

VOLTAR

Page 26: Heaps  Binomiais

VOLTAR