0% acharam este documento útil (0 voto)
27 visualizações39 páginas

02 Heap

O documento aborda a estrutura de dados Heap, explicando suas definições, propriedades e implementações, incluindo inserção e remoção de elementos. Também descreve o algoritmo HeapSort, que utiliza a estrutura Heap para ordenar dados de forma eficiente. Além disso, apresenta exercícios práticos para reforçar o aprendizado sobre o tema.

Enviado por

Laura Cristina
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
27 visualizações39 páginas

02 Heap

O documento aborda a estrutura de dados Heap, explicando suas definições, propriedades e implementações, incluindo inserção e remoção de elementos. Também descreve o algoritmo HeapSort, que utiliza a estrutura Heap para ordenar dados de forma eficiente. Além disso, apresenta exercícios práticos para reforçar o aprendizado sobre o tema.

Enviado por

Laura Cristina
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Heap Implementação HeapSort Exercícios

Estruturas de Dados II
Heap

Prof. Leonardo C. R. Soares - [Link]@[Link]


Instituto Federal do Sudeste de Minas Gerais
30 de abril de 2025

1/35
Heap Implementação HeapSort Exercícios

Pensando um pouco

Você precisa representar a árvore binária abaixo em um vetor. Como


você faria? Qual seria a regra para determinar quem é o antecedente
direto de um determinado nó?

2/35
Heap Implementação HeapSort Exercícios

Heap

Definição
Heap é uma árvore binária que atende a duas propriedades básicas:
▶ O valor de um nó deve ser maior (ou menor) ou igual ao valor
de seus filhos;
▶ A árvore binária deve ser completa ou quase-completa da es-
querda para a direita.

3/35
Heap Implementação HeapSort Exercícios

Heap

Definição
Heap é uma árvore binária que atende a duas propriedades básicas:
▶ O valor de um nó deve ser maior (ou menor) ou igual ao valor
de seus filhos;
▶ A árvore binária deve ser completa ou quase-completa da es-
querda para a direita.
Caso o valor de um nó seja maior ou igual aos valor de seus filhos,
temos um heap máximo. Caso o valor seja menor ou igual aos dos
filhos, temos um heap mínimo.

3/35
Heap Implementação HeapSort Exercícios

Heap Máximo

4/35
Heap Implementação HeapSort Exercícios

Heap Máximo

5/35
Heap Implementação HeapSort Exercícios

Heap

Dada as propriedades de um Heap, sua altura é Θ(log n), visto ser


composto por uma árvore binária quase-completa. Essa característica
permite que as operações de inserção e remoção sejam eficientes.

6/35
Heap Implementação HeapSort Exercícios

Implementação

Utilizaremos um vetor para implementar o Heap. A raiz estará na


posição zero do vetor. O filho da esquerda de um nó no índice i
estará sempre na posição 2 ∗ i + 1. O filho da direita de um nó no
índice i estará sempre na posição 2 ∗ i + 2. O pai de um nó no índice
i estará sempre na posição ⌊(i − 1)/2⌋.

7/35
Heap Implementação HeapSort Exercícios

Heap

heap=[88, 87, 73, 47, 54, 6, 0, 43]

8/35
Heap Implementação HeapSort Exercícios

Heap

Inserção
A adição de um novo elemento no heap é sempre feita na próxima
posição livre do vetor. Após a inclusão, deve-se mover o nó inserido
de modo que a primeira propriedade do heap (o valor de um nó deve
ser maior ou igual ao valor de seus filhos) continue verdadeira.

9/35
Heap Implementação HeapSort Exercícios

Inserção
Considere que iremos inserir um nó com valor 100 no heap abaixo.

10/35
Heap Implementação HeapSort Exercícios

Inserção

A inserção é feita mantendo a árvore quase-completa.

11/35
Heap Implementação HeapSort Exercícios

Inserção
Como o nó inserido é maior que seu pai, trocamos os nós de lugar
para garantir a primeira propriedade do heap.

12/35
Heap Implementação HeapSort Exercícios

Inserção

Repetimos o passo anterior enquanto for necessário.

13/35
Heap Implementação HeapSort Exercícios

Inserção

A inserção de um elemento no heap é O(log n)

14/35
Heap Implementação HeapSort Exercícios

Heap

Remoção
A remoção de um elemento do heap é sempre feita na raiz. Para
manter a propriedade de ser uma árvore quase-completa, troca-se o
valor da raiz com a última folha e remove-se a folha. Depois disso,
devemos corrigir a posição dos elementos do vetor para garantir que
a primeira propriedade heap volte a ser verdadeira. Este processo
denomina-se heapify.

15/35
Heap Implementação HeapSort Exercícios

Remoção
Usaremos o heap abaixo para ilustrar o processo de remoção de um
nó.

16/35
Heap Implementação HeapSort Exercícios

Remoção
Primeiro trocamos a raiz com a última folha.

17/35
Heap Implementação HeapSort Exercícios

Remoção
Remove-se a última folha.

18/35
Heap Implementação HeapSort Exercícios

Remoção
O processo de heapify é aplicado à raiz para garantir a primeira
propriedade do heap. A raiz é trocada pelo maior de seus filhos. O
processo se repete recursivamente até que o heap esteja correto.

19/35
Heap Implementação HeapSort Exercícios

Remoção

A remoção de um elemento no heap é O(log n)

20/35
Heap Implementação HeapSort Exercícios

Dúvidas?

21/35
Heap Implementação HeapSort Exercícios

Dúvidas?

Mais alguém?

21/35
Heap Implementação HeapSort Exercícios

Dúvidas?

Mais alguém? Não?

21/35
Heap Implementação HeapSort Exercícios

Dúvidas?

Mais alguém? Não? Então ótimo. Implemente o método de inserção


e remoção!

21/35
Heap Implementação HeapSort Exercícios

Heap

22/35
Heap Implementação HeapSort Exercícios

Heap

23/35
Heap Implementação HeapSort Exercícios

Heap

24/35
Heap Implementação HeapSort Exercícios

Heap

25/35
Heap Implementação HeapSort Exercícios

Heap

26/35
Heap Implementação HeapSort Exercícios

Heap

27/35
Heap Implementação HeapSort Exercícios

Heap

28/35
Heap Implementação HeapSort Exercícios

Heap

29/35
Heap Implementação HeapSort Exercícios

HeapSort

Definição
Utilizando-se a estrutura de dados heap é possível implementar um
algoritmo eficiente de ordenação O(n log n). O algoritmo é extre-
mamente simples:
1. Construa o heap à partir do vetor original;
2. Troque a raiz com a última folha;
3. Diminua o tamanho do heap em uma unidade;
4. Reconstrua o heap com o método heapfy;
5. Repita os passos 2 a 4 até o heap ter tamanho 1.

30/35
Heap Implementação HeapSort Exercícios

HeapSort

31/35
Heap Implementação HeapSort Exercícios

HeapSort

32/35
Heap Implementação HeapSort Exercícios

HeapSort

33/35
Heap Implementação HeapSort Exercícios

Exercícios
1. Implemente os exemplos apresentados.
2. Implemente um Heap Mínimo.
3. Como ficariam as fórmulas para definir os filhos de um heap
cujo índice inicial do vetor fosse 1?
4. Em qual nível pode estar o segundo maior elemento de um heap
máximo?
5. Escreva um método que verifique se um determinado vetor é
um heap máximo.
6. Implemente todos os métodos eficientes de ordenação apresen-
tados (desconsidere o método de ordenação por contagem).
Gere um vetor de números inteiros suficientemente grande para
que o processo de ordenação não seja trivial. Execute cada um
dos métodos (para a mesma entrada) e compare os resultados.
Repita o experimento pelo menos 10 vezes. Algum método do-
minou o experimento?
34/35
Heap Implementação HeapSort Exercícios

35/35

Você também pode gostar