Your SlideShare is downloading. ×
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Heaps Binomiais
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Heaps Binomiais

1,604

Published on

Trabalho de Heaps Binomiais apresentado ao Centro Universitário da FEI na disciplina de Análise e Complexidade de Algoritmos

Trabalho de Heaps Binomiais apresentado ao Centro Universitário da FEI na disciplina de Análise e Complexidade de Algoritmos

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,604
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
25
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. CENTRO UNIVERSITÁRIO DA FEI ORLANDO DA SILVA JUNIOR HEAPS BINOMIAIS São Bernardo do Campo 2010
  • 2. 2 SUMÁRIO1 INTRODUÇÃO ..................................................................................................................... 32 REPRESENTAÇÃO DE HEAPS BINOMIAIS ................................................................. 63 OPERAÇÕES EM HEAPS BINOMIAIS ........................................................................... 6 3.1 Criação de um heap binomial ........................................................................................... 6 3.2 Inserção de um novo elemento ......................................................................................... 6 3.3 União de dois heaps .......................................................................................................... 7 3.4 Eliminação de um elemento .............................................................................................. 8 3.5 Algoritmo de decremento de chaves ................................................................................. 8 3.6 Algoritmo de extração de chaves ...................................................................................... 94 APLICAÇÕES ..................................................................................................................... 10 4.1 Algoritmo de escalonamento por prioridades ................................................................. 10REFERÊNCIAS ..................................................................................................................... 12
  • 3. 31 INTRODUÇÃO Um heap binominal é uma estrutura de dados computacional do tipo intercalável. Essaestrutura é formada a partir de um conjunto de árvores binomiais que possuem as seguintespropriedades (CORMEN ET AL, 2002):  Cada árvore binomial obedece à propriedade de heap mínimo, ou seja, a chave de um nó é maior ou igual à chave de seu pai; e  Pode existir no máximo uma árvore binomial para cada ordem na árvore maior. Em 1978, o francês Jean Vuillemin publicou um artigo que apresentava um eficientealgoritmo para a manipulação de filas de prioridade, uma estrutura de dados que associa cadavalor contido em um conjunto a uma chave. Através do estudo de árvores binomiais, essetrabalho permitiu que se conhecesse, anos mais tarde, a estrutura e a aplicação de heapsbinomiais. Sobre filas de prioridade, o pesquisador diz (tradução minha): Uma fila de prioridades é um conjunto; cada elemento desse conjunto tem um nome, que é usado para singularmente identificar o elemento, e uma etiqueta, ou prioridade, elaborada a partir de um conjunto totalmente ordenado. Os elementos da fila de prioridade podem ser pensados como um serviço de espera de atendimento, onde o item com a menor etiqueta será sempre o próximo a ser servido. Pilhas e filas são casos especiais de filas de prioridade (VUILLEMIN, 1978).
  • 4. 42 REPRESENTAÇÃO DE HEAPS BINOMIAIS Por heap binomial entende-se um conjunto de árvores binomiais que satisfazem aspropriedades de heaps binomiais. Apresentadas no capítulo 1, essas propriedades limitam aforma de representar uma estrutura que agrega muitas outras. As árvores binomiais sãoárvores ordenadas recursivamente que apresentam as seguintes propriedades (CORMEN ETAL, 2002):  Para uma árvore binomial Ak, existem 2k nós;  A altura da árvore é igual a k;  Existem exatamente nós na profundidade i, para i de 0 a k; e  A raiz da árvore tem grau k, o qual é maior que o de qualquer outro nó. Cada nó de uma árvore binomial possui: uma chave, que é um número representativopara os algoritmos que operam na árvore; um grau (degree), indicando, numericamente,quantos filhos tem o nó; e três referências: uma para seu pai, outra para seu filho mais àesquerda e a última para seu irmão mais à direita. Contudo, vale lembrar que essa regra égenérica e não vale para todos os tipos de construção de algoritmos. Outras informaçõespodem (e geralmente fazem) fazer parte do nó. As árvores binomiais que contém os nós representados na regra geral descrita acimasão armazenadas em uma lista ligada. Comumente chamada de lista de raízes, essa listaguarda a referência de todas as raízes das árvores que a ela pertencem. O conjunto que agregatodas essas árvores é o heap binomial em estudo no momento. Algumas outras considerações sobre árvores binomiais devem ser feitas, tais como:  Se o nó é uma raiz, ele não tem pai;  Se o nó não tem nenhum filho, não há referência para o filho mais à esquerda;  Se o nó é o filho mais à direita, então o nó não tem irmão. A Figura 1 apresentada abaixo exemplifica as regras definidas para a construção deum heap binomial.
  • 5. 5Figura 1 - Exemplo de um heap binomialFonte: Autor “adaptado de” Stergiopoulos A partir de uma sequência de elementos, o algoritmo montará as árvores binomiaisrecursivamente. Observando uma das árvores do heap da Figura 1, nota-se que os númerosestão dispostos de modo crescente na visão top-down. Esta ordenação visa criar uma estruturaque permita que uma série de operações básicas utilizadas no desenvolvimento de estruturasde dados possam ser aplicadas sobre ela.
  • 6. 63 OPERAÇÕES EM HEAPS BINOMIAIS Conforme mencionado no final do capítulo 2, a utilização de heaps binomiais condizdiretamente com algumas operações que são comumente utilizadas em demais estruturas dedados. Este capítulo apresentará as principais operações sobre heaps binomiais, bem como osprincipais algoritmos que influem diretamente sobre essa operações. Vale lembrar que para toda e qualquer estrutura de dados as operações de inserção,remoção e busca são as consideradas essenciais. Todos os demais algoritmos apresentadosneste capítulo fazem parte dessas três operações básicas.3.1 Criação de um heap binomial Para que as operações de inserção, busca e remoção possam ser estudadas e, naverdade, aplicadas sobre um heap binomial, é necessário que antes ele seja criado. Porque essa operação define apenas uma cabeça para o heap e a inicializa, seu custo éigual a Θ(1).3.2 Inserção de um novo elemento Inserir um novo elemento numa estrutura de heap binomial significa adicionar umnovo nó a essa estrutura. Esta operação básica trabalha com alguns algoritmos internos queauxiliam na entrada correta do nó e na reestruturação do heap. Esses algoritmos serãodescritos neste e nos seguintes sub-capítulos. Para que um novo nó possa ser acrescentado a um heap já existente, considerar-se-áaqui que esse nó já esteja alocado e sua chave já possua um valor. As etapas para a inserção de um elemento em um heap binomial são: 1. Alocar um nó (heap) temporário; 2. Definir como zero o grau desse nó; 3. Atribuir o nó que se deseja inserir à cabeça do nó temporário; e 4. Unir o heap temporário ao heap binomial principal. A última etapa descrita acima merece uma explicação detalhada de seufuncionamento, já que é o cerne do algoritmo de inserção.
  • 7. 73.3 União de dois heaps Como visto anteriormente, o procedimento que une dois heaps é o mais importante doalgoritmo de inserção. Assim como inserir um novo nó envolve mais de um algoritmo, oprocesso de união de dois heaps está centrado nos algoritmo de ligação e união de nós. O algoritmo de ligação trata dois nós de modo que um deles seja a nova cabeça dooutro. Para que esse algoritmo funcione sem perda de referências e dados, todos os nós queutilizarem-no obrigatoriamente satisfarão as propriedades de heaps binomiais, descritas noCapítulo 2. Dado dois nós, A e B, a ligação entre eles – ou seja, A é a cabeça dos filhos de B –seguirá, a Ο(1), as etapas abaixo.  A cabeça de A recebe o nó B;  O filho de B é o novo irmão de A;  O filho de B é A;  É somado um ao grau de B. A Listagem 1 apresenta o pseudocódigo do algoritmo.Listagem 1 - Pseudocódigo de ligação de heaps O algoritmo de união de nós tem a função de intercalar as listas de raízes de dois nósem uma única lista ligada que é ordenada por grau em ordem monotonicamente crescente(CORMEN, 2002). Por realizar a junção de duas listas de modo intercalado, esse algoritmoassemelha-se ao popular algoritmo de ordenação MergeSort. Em suma, o algoritmo de união de heaps, primeiramente, junta dois heaps que atentamàs propriedades de heaps binomiais e percorre a lista dessa junção enquanto todos oselementos não estiverem intercalados e ordenados segundo a definição de heap binomial. Emoutras palavras, o algoritmo de união de heaps é executado para garantir que a estrutura nãoperca suas propriedades que a definem como heap binomial.
  • 8. 8 Neste momento, vale comentar que a estrutura de dado estudada neste trabalho utilizamenos armazenamento de dados que outras estruturas, como árvores AVL, 2-3 e leftist.Todavia, por uma análise técnica, é possível notar que as operações básicas programadasdessas árvores se equiparam no pior caso com as mesmas operações do heap estudado(VUILLEMIN, 1978).3.4 Eliminação de um elemento Sendo a chave a identificação do nó de uma estrutura, eliminar um elemento dessamesma estrutura significa eliminar sua chave. Para que a chave seja removida, o nó que dela é proprietário deverá ter apenas umachave mínima em toda a sua sub-árvore, ou seja, o algoritmo de eliminação iterará naestrutura até que todas as chaves da sub-árvore do nó a ser removido estejam atentando àspropriedades de heaps binomiais. Vale lembrar que um nó está de acordo com a definição deheap binomial quando a chave de sua raiz é menor que de suas folhas. O algoritmo de eliminação de elementos é composto por duas partes: 1. Algoritmo de diminuição de chaves: decrementa a chave de um nó agregado em um heap até que essa chave seja igual a passada por parâmetro; e 2. Algoritmo de extração da chave mínima: busca a raiz com chave mínima, remove-a da lista de raízes e une o heap a outro criado temporariamente para apontar para a cabeça do heap principal. Os próximos dois sub-capítulos demonstrarão e analisarão o funcionamento dessesalgoritmos.3.5 Algoritmo de decremento de chaves A Listagem 2 apresenta o algoritmo que decrementa a chave de um nó. Inicialmente, énecessário verificar se a nova chave não é maior que a chave atual. Caso não seja, a chaveantiga é substituída pela nova. O funcionamento do algoritmo se dá na iteração. Nessa iteração, toda chave écomparada com a chave de seu pai. Se as chaves forem iguais, a árvore é ordenada como heapmínimo; senão, a chave principal é trocada com a de seu pai, bem como demais informações.
  • 9. 9 Como a profundidade da árvore é, no máximo, o piso de log2n, o algoritmo demora otempo de Ο(log2n).Listagem 2 - Algoritmo de diminuição de chave3.6 Algoritmo de extração de chaves Este algoritmo é um pouco mais simples que o anterior porque já utiliza os demaisalgoritmos citados para suas funções elementares. Para que a chave mínima seja extraída de um nó é necessário que a raiz com esse nóseja encontrada e alocada temporariamente a fim de que o nó possa ser excluído da lista denós do heap. Em seguida, a ordem da lista ligada dos filhos desse nó deverá ser invertida eatribuída como cabeça de um novo heap temporário. O algoritmo finaliza sua execução com oalgoritmo de união de dois heaps: os heaps principal e temporário são passados para essafunção, que retornará o endereço de memória do novo heap gerando com essa união.
  • 10. 104 APLICAÇÕES Como dito na introdução deste trabalho, o francês Jean Vuillemin desenvolveu oalgoritmo mais eficiente para a manipulação de filas de prioridade. Desta pesquisa, Vuilleminacabou por descobrir os heaps binomiais. A aplicabilidade de um heap binomial estáintimamente ligada com a utilização de heaps genéricos. Sendo o heap binomial uma estruturaparticular do heap genérico, supõe-se que as aplicações deste valham para aquele. Contudo, omodo inverso pode não ser percebido, já que o heap particular binomial é a forma maisobjetivada de se processar um problema específico. Heaps genéricos são utilizados em algoritmos de inserção e ordenação de listas. Nestaúltima operação, o clássico algoritmo HeapSort utiliza a estrutura de heap para ordenar oselementos de uma lista de modo que ela fique em ordem crescente (ou descrescente, conformeo desejado). Segundo Feofiloff (2010), o segredo do funcionamento desse algoritmo é o heap. Além de o heap binomial desenvolvido por Vuillemin possuir quase todas asaplicações do heap genérico, ele também é utilizado, como uma forma opcional, nosalgoritmos de escalonamento de processos round-robin (IOANNOU; KATEVENIS, 2006) efila de prioridades (TANEMBAUM, 2010) e na gerência de agendamento de redes de altavelocidade (IOANNOU; KATEVENIS, 2006). Ademais, os heaps binomiais deram origem aoutra estrutura semelhante, os heaps de Fibonacci (FREDMAN, 2004), deveras conhecida naciência da computação por ser utilizada nos algoritmos de Prim, Kruskal, Cheriton-Tarjan eDijkstra.4.1 Algoritmo de escalonamento por prioridades O escalonamento por prioridades é um algoritmo utilizado na área de SistemasOperacionais interativos para auxiliar a CPU no gerenciamento dos processos em execução. Aideia do escalonamento por prioridades é atribuir uma prioridade a cada processo,privilegiando o processo com a maior prioridade o uso da CPU. Basicamente, a cada tique do relógio do computador, o algoritmo reduz a prioridadede um processo até que ele seja executado por completo ou possa dar lugar a outro processocuja prioridade é maior. Em termos de programação, esse algoritmo pode utilizar um heapbinomial para gerenciar a fila de processos para o processador. Com a definição e aspropriedades de heaps binomiais definidas no capítulo 1, o algoritmo de escalonamento por
  • 11. 11prioridades se utilizaria da chave como campo de prioridade para informar à CPU o estado deum processo.
  • 12. 12REFERÊNCIASCORMEN, Thomas et al. Algoritmos: teoria e prática. Rio de Janeiro: Elsevier, 2002. cap.19. pag. 111, 365-280.FEOFILOFF, Paulo. Heapsort. In: Projeto de Algoritmos em C. Disponível em:<http://www.ime.usp.br/~pf/algoritmos/aulas/hpsrt.html>. Acesso em: 26 abr 2010.FREDMAN, Michael L. Binomial, Fibonacci, and Pairing Heaps. In: MEHTA, Dinesh P. ;SAHNI, Sartaj (Org.). Handbook of data structures and applications. USA: Chapman &Hall/CRC, 2004.IOANNOU, Anggelos; KATEVENIS, Manolis. Pipelined Heap (Priority Queue)Management for Advanced Scheduling in HighSpeed Networks. Crete [2006] Disponívelem: <http://archvlsi.ics.forth.gr/muqpro/pipeHeap_ioan_icc01.pdf>MOH, Christopher. Application of Data Structures: notas de aula. MIT: Massachusetts,2005. Disponível em:<http://www.comp.nus.edu.sg/~tantc/ioi_training/2005/ApplicationofDataStructures.ppt>.Acesso em: 26 abr 2010.STERGIOPOULOS, Sotirios. Binomial Heap. In: MIRZAIAN, Andy (Org.). AlgorithmicsAnimation Workshop. Disponível em:<http://www.cse.yorku.ca/~aaw/Sotirios/BinomialHeap.html>. Acesso em: 18 abr 2010.TANEMBAUM, Andrew. Sistemas Operacionais Modernos. Pearson Prentice Hall: SãoPaulo, 2010. 3. ed.VUILLEMIN, JEAN. A data structure for manipulating priority queues. Communicationsof the ACM, 21(4), 1978.

×