Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

Documentos relacionados
Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Tópico 5 Algoritmos de Ordenação. Parte I - métodos de ordenação: inserção, mergesort, heapsort e quicksort.

Análise de algoritmos

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Análise de algoritmos

PAA-DCC-UFAM. Árvores. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

Algoritmos de ordenação Heapsort

Árvores binárias de pesquisa

Algoritmo de Dijkstra Estudo e Implementação

Exemplo Árvore Binária

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

ESTRUTURA DE DADOS E ALGORITMOS. Árvores Binárias de Busca. Cristina Boeres

O problema da busca (ou pesquisa) - Dado um conjunto de elementos, onde cada um é identificado por uma chave, o objetivo da busca é localizar, nesse

O conjunto de registros pode ser: Um vetor de registros Uma lista encadeada Uma árvore Etc.

DAINF - Departamento de Informática

Sub-grafo. Árvore Geradora Mínima

Árvores. Árvores M-Vias. Métodos de Pesquisa de Dados. de Pesquisa (ANP) VANTAGENS EXEMPLO

Mo:vação. Árvore AVL. Caracterís:cas. Origem. Exemplo. Exercício 1 Qual é a altura dos nodos 50 e 44?

Estruturas de Dados 2

Estruturas de Dados. Árvores. Onde Estamos? Introdução à estrutura de dados. Alocação dinâmica de memória. Pilhas. Filas.

Análise e Síntese de Algoritmos

Caminhos mínimos de única origem

CES-11. Algoritmos e Estruturas de Dados. Representação. A estrutura heap. Heap é uma árvore binária com duas propriedades:

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Árvore Binária de Busca

Análise de algoritmos

AED2 - Aulas 06 e 07 Árvores AVL e rubro-negras

Algoritmos e Estrutura de Dados

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

ESTRUTURAS DE DADOS E ALGORITMOS ÁRVORE BINÁRIA

Árvores Vermelho-Preto

Árvores Vermelho-Preto

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Estruturas de Dados II

3. Conteúdo de um vértice v é conteúdo dos filhos de v.

AED2 - Aula 04 Vetores ordenados e árvores de busca

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Aula 16: Pesquisa em Memória Primária - Árvores de Busca. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

AULA 20. Algoritmos p.725/759

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Árvores. Prof. César Melo DCC/ICE/UFAM

Comparação com Divisão e Conquista

Aula T13 BCC202 Árvores. Túlio Toffolo

Árvores. Prof. César Melo DCC/ICE/UFAM

O termo Programação Dinâmica é um bocado infeliz.

Universidade Federal de Mato Grosso Estrutura de Dados II

INF 1010 Estruturas de Dados Avançadas

Árvores de pesquisa. Árvores de pesquisa equilibradas

Árvores de Pesquisa (Parte I)

Árvore Binária de Busca. Prof. César Melo

INF 1010 Estruturas de Dados Avançadas

Algoritmos e Estruturas de Dados 2006/2007

Filas de Prioridade & Heaps

Arvores binárias. Fonte: PF 14 pf/algoritmos/aulas/bint.html

Heap Sort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Prof. Jesus José de Oliveira Neto

Árvores. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford. O problema tem subestrutura óptima

Acesso Sequencial Indexado

Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Caminho mais curto a partir de um nó Algoritmos de Dijkstra e Bellman-Ford

Estruturas de Dados. Profº Carlos Alberto Teixeira Batista

Árvores Binárias de Busca

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Estruturas de dados para listas arrays e listas ligadas

Árvore Binária de Busca. Algoritmos e Estrutura de Dados II. Operações Busca e Sucessor. Árvore Binária de Busca. Árvores Rubro-Negras

Estruturas Discretas

Métodos de Ordenação Parte 3

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Análise e Complexidade de Algoritmos

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Bubble Sort. Tempo total O(n 2 )

Árvores Binária de Busca. Prof. César Melo DCC/ICE/UFAM

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

ÁRVORE BINÁRIA DE BUSCA

Árvores Equilibradas. Sumário

Árvores Binárias de Busca

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Aula 06: Análise matemática de algoritmos recursivos

UNIVERSIDADE DA BEIRA INTERIOR

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

Universidade Federal do ABC Avaliação Disciplina Turma Professor Data Instruções para a prova (leia antes de começar): SelectionSort selectonsortrec

HeapSort Filas de Prioridade Heap. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Prova 2 PMR2300 1o. semestre 2015 Prof. Thiago Martins

Eduardo Camponogara. DAS-9003: Introdução a Algoritmos

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Transcrição:

20 de setembro de 2007

Árvores binomiais são formados por uma lista ligada de á r v o r e s binomiais. Definição Árvores binomiais são definidas recursivamente da seguinte forma:

Árvores binomiais são formados por uma lista ligada de á r v o r e s binomiais. Definição Árvores binomiais são definidas recursivamente da seguinte forma: B 0 :

Árvores binomiais são formados por uma lista ligada de á r v o r e s binomiais. Definição Árvores binomiais são definidas recursivamente da seguinte forma: B 0 : B k : B (k 1) B (k 1)

Árvores binomiais Alguns exemplos de árvores binomiais B 0 B 1 B 2 B 3

Árvores binomiais Mais um exemplo: B 4

Árvores binomiais Propriedades das árvores binomiais Uma árvore binomial B k :

Árvores binomiais Propriedades das árvores binomiais Uma árvore binomial B k : Possui 2 k nós; Prova: Indução em k. ParaB 0 :2 0 = 1. B k possui duas subárvores B k 1 : B k = B k 1 + B k 1 =2 k 1 +2 k 1 =2 k.

Árvores binomiais Propriedades das árvores binomiais Uma árvore binomial B k : Possui 2 k nós; Prova: Indução em k. ParaB 0 :2 0 = 1. B k possui duas subárvores B k 1 : B k = B k 1 + B k 1 =2 k 1 +2 k 1 =2 k. Tem altura k; Prova: Também por indução em k. ParaB 0 : k = 0. Para B k : Uma árvore B k é formada por duas subárvores B k 1, sendo que a raíz de uma se torna filha da raíz da outra; portanto a altura da árvore é aumentada de 1 em relação as filhas. h(k) =h(k 1) + 1 = k.

Árvores binomiais Propriedades das árvores binomiais continuação

Árvores binomiais Propriedades das árvores binomiais continuação O nível i possui exatamente ( ) k i, i =0, 1,...,k, nós. Prova: Seja D(k, i) o número de nós na profundidade i da á r v o r e B k. Como B k é composta de duas B k 1,na profundidade i de B k aparecem os nós da profundidade i de uma B k 1 e i 1 da outra. Assim, D(k, i) =D(k 1, i)+d(k 1, i 1). Pela hipótese de indução, D(k, i) = ( ) ( k 1 i + k 1 ( i 1) = k ) i.

Árvores binomiais Propriedades das árvores binomiais continuação O nível i possui exatamente ( ) k i, i =0, 1,...,k, nós. Prova: Seja D(k, i) o número de nós na profundidade i da á r v o r e B k. Como B k é composta de duas B k 1,na profundidade i de B k aparecem os nós da profundidade i de uma B k 1 e i 1 da outra. Assim, D(k, i) =D(k 1, i)+d(k 1, i 1). Pela hipótese de indução, D(k, i) = ( ) ( k 1 i + k 1 ( i 1) = k ) i. A raíz tem grau k, maior que de todos os outros nós, e cada filho i, i = k 1, k 2,...,0, é raiz de uma subárvore B i. Prova: A raíz de B k tem o grau aumentado em um em relação a B k 1 justamente por estar ligada a outra B k 1. Ainda por indução, como a raiz de B k 1 está ligada a subárvores B 0, B 1,...,B k 2,entãoB k tambem o estará, assim como estará ligada a uma outra raíz B k 1, pois é formada pela união das duas subárvores.

Definição Um heap binomial H é um conjunto de árvores binomiais que satisfaz as seguintes propriedades:

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

Definição Um heap binomial H é um conjunto de árvores binomiais que satisfaz as seguintes propriedades: Toda árvore binomial de H tem estrutura de heap, i.e., a chave de um nó é maior ou igual a chave de seu pai. Assim, sabemos que a raíz possui a menor chave da árvore. Há no máximo uma árvore binomial em H com uma raíz de um determinado grau. Assim, para um heap de n nós há, no máximo, lg n +1árvoresbinárias. Paraveristobasta pensar na representação binária do número de elementos do heap: < b lg n, b lg n 1,...,b 0 >, com n = lg n i=0 b i 2 i.

Exemplo A figura é um heap binomial com as árvores B 0, B 2 e B 3, com (1101) 2 = 13 elementos:

Representação Representamos um heap binomial com uma lista de árvores binomiais. Cada nó possui um apontador para o nó pai, uma para seu filho esquerdo e um para uma lista ligada de seus irmãos. head[h] 10 0 1 2 p key degree child 12 1 25 0 18 0 sibling

Algoritmos

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).

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ízes das árvores buscando o menor elemento. Como vimos, há no máximo lg n + 1 raízes para checarmos o que nos dá um algoritmo de complexidade O(lg n).

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 NILdo 5. if key[x] < min then 6. min key[x] 7. y x 8. x sibling[x] 9. return y

União

União Uma vantagem dos heaps binomiais em relação aos heaps binários é a união. Esta operação pode ser feita em tempo O(lg n).

União Uma vantagem dos heaps binomiais em relação aos heaps binários é a união. Esta operação pode ser feita em tempo O(lg n). Nesta operação vamos utilizar uma função auxiliar que junta duas árvores B k 1. A raíz z será também raíz da nova árvore B k. Binomial-Link(y, z) 1. p[y] z 2. sibling[y] child[z] 3. child[z] y 4. degree[z] degree[z] +1

União Uma vantagem dos heaps binomiais em relação aos heaps binários é a união. Esta operação pode ser feita em tempo O(lg n). Nesta operação vamos utilizar uma função auxiliar que junta duas árvores B k 1. A raíz z será também raíz da nova árvore B k. Binomial-Link(y, z) 1. p[y] z 2. sibling[y] child[z] 3. child[z] y 4. degree[z] degree[z] +1 Precisamos também de um procedimento Binomial-Heap-Merge, que junta dois heaps binomiais em ordem monotonicamente crescente do grau das raízes.

União Algoritmo de união Binomial-Heap-Union(H 1, H 2 ) 1. H Make-Binomial-Heap() 2. head[h] Binomial-Heap-Merge(H 1, H 2 ) 3. if head[h] =NILthen 4. return H 5. prev x NIL 6. x head[h] 7. next x sibling[x] 8. while next x NILdo 9. if (degree[x] degree[next x ]) or (sibling[next x ] NIL and degree[sibling[next x ]] = degree[x]) then 10. prev x x /* Casos 1 e 2 */ 11. x next x

União Algoritmo de união - continuação 12. else if key[x] key[next x ] then 13. sibling[x] sibling[next x ] /* Caso 3 */ 14. Binomial-Link(next x, x) 15. else 16. if prev x =NILthen /* Caso 4 */ 17. head[h] next x 18. else 19. sibling[prev x ] next x 20. Binomial-Link(x, next x ) 21. x next x 22. next x sibling[x] 23. return H

União

União O caso 1 ocorre quando não há árvores de mesmo grau consecutivas.

União O caso 1 ocorre quando não há árvores de mesmo grau consecutivas. No caso 2 há três árvores com o mesmo grau em seguida, formadas após a união de duas árvores. Exemplo: cada um dos heaps originais possuía uma B 1 e uma B 2. Ao unir-se as á r v o r e s B 1 ficamos com três B 2

União O caso 1 ocorre quando não há árvores de mesmo grau consecutivas. No caso 2 há três árvores com o mesmo grau em seguida, formadas após a união de duas árvores. Exemplo: cada um dos heaps originais possuía uma B 1 e uma B 2. Ao unir-se as á r v o r e s B 1 ficamos com três B 2 OCaso3asduasávoresB k 1 são somadas para formar uma B k, sendo que a que possui a raíz com menor chave aparece primeiro na lista.

União O caso 1 ocorre quando não há árvores de mesmo grau consecutivas. No caso 2 há três árvores com o mesmo grau em seguida, formadas após a união de duas árvores. Exemplo: cada um dos heaps originais possuía uma B 1 e uma B 2. Ao unir-se as á r v o r e s B 1 ficamos com três B 2 OCaso3asduasávoresB k 1 são somadas para formar uma B k, sendo que a que possui a raíz com menor chave aparece primeiro na lista. Por ultimo, temos o caso análogo ao 3, porém quando a árvore que possui a menor chave aparece depois na lista.

União Os dois heaps iniciais. 12 7 15 18 3 6 25 28 33 37 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

União Após Binomial-Heap-Merge. Temos o caso 3. x next-x 12 18 7 3 15 6 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

União Caso 2 x next-x 12 7 3 15 6 18 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

União Caso 4 prev-x x next-x 12 7 3 15 6 18 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

União Caso 3 prev-x x next-x 12 3 15 6 18 7 37 28 33 8 29 10 44 25 41 30 23 22 48 31 17 45 32 24 50 55

União Caso 1 prev-x x next-x 12 3 6 18 15 7 37 8 29 10 44 28 33 25 30 23 22 48 31 17 41 45 32 24 50 55

União A complexidade do algoritmo de união é O(lg n) Prova. Se H 1 possui n 1 nós e H 2 possui n 2, então o número total de árvores binomiais é lg n 1 + lg n 2 +2 2 lg n +2=O(lg n), que é a complexidade de Binomial-Heap-Merge. Cada iteração do laço while consome tempo constante, e também é executado para cada árvore do heap, e portanto tem complexidade O(lg n).

Inserção

Inserção Para inserir um nó basta criarmos um novo heap contendo 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 união é O(lg n). Portanto, inserir um novo elemento tem complexidade O(lg n). Algoritmo de inserção 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 )

Extraindo o menor elemento

Extraindo o menor elemento Para extrair o menor elemento do heap buscamos sua posição (em O(lg n)) e extraímos a árvore em que ele é raíz, digamos B k.

Extraindo o menor elemento Para extrair o menor elemento do heap buscamos sua posição (em O(lg n)) e extraímos a árvore em que ele é raíz, digamos B k. Criamos um novo heap H apartirdassubárvoresdeste elemento, B 0, B 1,...,B k 1 e fazemos a união de H e H. Esta operação tem complexidade O(lg n).

Extraindo o menor elemento Para extrair o menor elemento do heap buscamos sua posição (em O(lg n)) e extraímos a árvore em que ele é raíz, digamos B k. Criamos um novo heap H apartirdassubárvoresdeste elemento, B 0, B 1,...,B k 1 e fazemos a união de H e H. Esta operação tem complexidade O(lg n). Assim, concluímos que a operação de extrair o menor elemento do heap tem complexidade O(lg n).

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

Extraindo o menor elemento 18 3 1 37 8 29 10 44 30 23 22 48 31 17 45 32 24 50 55

Extraindo o menor elemento 18 3 44 10 29 8 37 17 48 31 30 23 22 50 45 32 24 55

Extraindo o menor elemento 18 3 44 8 29 10 37 30 23 22 48 31 17 45 32 24 50 55

Conclusão Os heaps binomiais são eficientes na operação de união. Complexidades dos algoritmos para três tipos de heap Heap binário Heap binomial Heap de Fibonacci Procedimento (pior caso) (pior caso) (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)