Please enable JavaScript.
Coggle requires JavaScript to display documents.
Mapa Mental 10 - Coggle Diagram
Mapa Mental 10
Heaps
-
Nas heaps, cada nó possui um valor/chave, de acordo com duas condições:
1) Uma heap deve ser, no mínimo, uma árvore quase completa, onde pode faltar algumas folhas nas extremidades direitas (Shape property)
2) A chave de um nó deve ser maior do que a chave de ambos seus filhos, tanto do direito, como do esquerdo (Parental dominance)
Propriedades
Sempre vai existir apenas uma árvore binária completa com n nós, e sua altura é igual a ⌊log₂ n⌋
-
-
Uma heap de n nós pode ser implementada via array de n+1 itens, guardando os elementos em ordem top-down e left-right. Quando isso acontece...
Recomenda-se que os nós da heap comecem do índice 1 e termine no índice n; enquanto no índice 0, ou fica vazio, ou é colocado um valor maior que o da raiz
Os nós parentais vão ocupar os primeiros ⌊n/2⌋ índices, enquanto as folhas vão ocupar os últimos ⌈n/2⌉ índices
Os filhos de uma chave com índice i na array vão ter índices iguais a 2i e 2i+1.
Enquanto o índice do pai de uma chave com índice i será ⌊i/2⌋
Com isso pode-se dizer que uma heap H[1,...,n] implementada por uma array, que os itens com índice i da primeira metade da array, sempre serão maiores, ou iguais, aos itens de índices 2i e 2i+1
- Implementação por árvores binárias favorece o entendimento dos algoritmos para heaps;
- Implementação por array facilita a implementação desses algoritmos;
Operações
Construção/
Inserção
Top-down
-
Basicamente, você adiciona uma nova chave como uma folha da heap, depois disso você "heapifica" a árvore, para que o a chave inserida fique na posição certa da árvore. Isso se repete até que todas as chaves tenham sido inseridas
heapify é uma operação que visa manter a parental dominance em uma heap que teve um elemento novo inserido, trocando as chaves entre um pai e um filho(a chave nova), até que essa condição seja atingida
- Eficiência de pior-caso de inserção: O(log(n))
- Eficiência de pior-caso de criação: O(n log(n))
Usado tanto para inserção de elemento, como criação de uma heap
Bottom-up
Basicamente, vai do último (H[n]) até o elemento H[x] da array, fazendo os seguintes passos:
1) Vê se o pai tem dois filhos, ou não
1.5) Se tiver, verifica e escolhe qual criança tem a maior chave para continuar com o processo
-
3) Se ele for menor, então troca a posição das duas chaves; caso contrário, deixa como está
-
Tal que x será o primeiro índice a ter o resultado 1 = ⌊x/2⌋, pois esse será o primeiro filho da raiz da heap
-
-
Remoção
(da maior chave)
Para isso, você precisa fazer os seguintes passos:
-
-
-
-
-