heaps binomiais rômulo de almeida bruno mestrando em ciência da computação professora liliane...

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

Upload: stephanie-alexandre

Post on 07-Apr-2016

214 views

Category:

Documents


1 download

TRANSCRIPT

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

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

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

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

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

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

Á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

Á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

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

• 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

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

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

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

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

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

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

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

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

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

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

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

DúvidasDúvidas

?

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

VOLTAR

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

VOLTAR

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

VOLTAR

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

VOLTAR

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

VOLTAR