Binary Heap
Marcos Castro
Binary Heap
• Uma Binary Heap é uma árvore binária completa ou quase completa.
• Exemplo de árvore binária completa:
Todos os níveis (exceto possivelmente o
último) estão completamente preenchidos.
2
Binary Heap
• Tem-se a Min-Heap e Max-Heap.
• Min-Heap:
• O valor de cada nó é maior ou igual do que o valor do seu pai, o menor valor
está na raiz.
• Max-Heap:
• O valor de cada nó é menor ou igual do que o valor do seu pai, o maior valor
está na raiz.
• Os elementos estão dispostos na heap de forma que o pai sempre
tem prioridade maior ou igual do que a prioridade de seus filhos.
3
Binary Heap
• Cada posição do array é considerado pai de outras duas posições que
são os filhos.
• A posição “i” passa a ser pai das posições:
• 2i + 1 (filho à esquerda)
• 2i + 2 (filho à direita)
4
Binary Heap
• Para inserir um novo elemento, basta inserir na primeira posição vaga
do array, ou seja, ao final do array.
• Inserir ao final do array quer dizer que inicialmente o novo elemento
é uma folha.
• Feito isso, precisa-se levar o elemento inserido para a sua respectiva
posição na heap de acordo com a sua prioridade (“subir” na árvore).
5
Binary Heap
• Vamos construir uma Min-Heap.
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 12...
12
6
Array: 12
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 7...
12
7
Violou a propriedade da min-heap!
7
Array: 12, 7
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Corrigindo:
12
7
7
12
8
Array: 7, 12
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 6...
7
12 6
Violou a propriedade da min-heap, pois o 6
é menor do que o seu pai: 7.
9
Array: 7, 12, 6
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Corrigindo...
6
12 7
10
Array: 6, 12, 7
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 10...
6
12 7
10 Violou a propriedade da min-heap, pois
o 10 é menor que o seu pai: 12.
11
Array: 6, 12, 7, 10
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Corrigindo...
6
10 7
12
12
Array: 6, 10, 7, 12
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 8...
6
10 7
12 8
Violou a propriedade da min-heap, pois
o 8 é menor que o seu pai: 10.
13
Array: 6, 10, 7, 12, 8
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Corrigindo...
6
8 7
12 10
14
Array: 6, 8, 7, 12, 10
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
• Inserindo o 20...
6
8 7
12 10 20
15Array: 6, 8, 7, 12, 10, 20
Binary Heap
• Exemplo: 12, 7, 6, 10, 8, 20
6
8 7
12 10 20
16Array: 6, 8, 7, 12, 10, 20
Binary Heap
• Para remover, remove-se o elemento que está no topo da heap, ou
seja, no início do array.
• Copia-se o elemento do final para o início do array.
• Leva-se o elemento que foi colocado no topo da heap para a sua
respectiva posição de acordo com a sua prioridade.
17
Binary Heap
• Removendo o 6...
6
8 7
12 10 20
18Array: 6, 8, 7, 12, 10, 20
Binary Heap
• Removendo o 6...
8 7
12 10 20 O 20 é o último elemento do array.
19Array: 8, 7, 12, 10, 20
Binary Heap
• Removendo o 6...
8 7
12 10
20
20Array: 20, 8, 7, 12, 10
Binary Heap
• Removendo o 6...
8 7
12 10
20
Troca o 20 com o 7 para refazer a heap.
21
Binary Heap
• Heap refeita!
8 20
12 10
7
22
Array: 7, 8, 20, 12, 10
Binary Heap - Custo
• A inserção e remoção é O(logN).
• Tanto na remoção como na inserção, precisa-se verificar e corrigir (se
necessário) violações das propriedades da heap.
23
Binary Heap
• Simulação da Binary Heap:
• http://visualgo.net/heap.html (max heap)
• https://www.cs.usfca.edu/~galles/visualization/Heap.html (min heap)
24
Contato
mcastrosouza@live.com
www.twitter.com/mcastrosouza
www.geeksbr.com
http://youtube.com/c/marcoscastrosouza
http://marcoscastro.me
https://github.com/marcoscastro
25

Binary heap

  • 1.
  • 2.
    Binary Heap • UmaBinary Heap é uma árvore binária completa ou quase completa. • Exemplo de árvore binária completa: Todos os níveis (exceto possivelmente o último) estão completamente preenchidos. 2
  • 3.
    Binary Heap • Tem-sea Min-Heap e Max-Heap. • Min-Heap: • O valor de cada nó é maior ou igual do que o valor do seu pai, o menor valor está na raiz. • Max-Heap: • O valor de cada nó é menor ou igual do que o valor do seu pai, o maior valor está na raiz. • Os elementos estão dispostos na heap de forma que o pai sempre tem prioridade maior ou igual do que a prioridade de seus filhos. 3
  • 4.
    Binary Heap • Cadaposição do array é considerado pai de outras duas posições que são os filhos. • A posição “i” passa a ser pai das posições: • 2i + 1 (filho à esquerda) • 2i + 2 (filho à direita) 4
  • 5.
    Binary Heap • Parainserir um novo elemento, basta inserir na primeira posição vaga do array, ou seja, ao final do array. • Inserir ao final do array quer dizer que inicialmente o novo elemento é uma folha. • Feito isso, precisa-se levar o elemento inserido para a sua respectiva posição na heap de acordo com a sua prioridade (“subir” na árvore). 5
  • 6.
    Binary Heap • Vamosconstruir uma Min-Heap. • Exemplo: 12, 7, 6, 10, 8, 20 • Inserindo o 12... 12 6 Array: 12
  • 7.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Inserindo o 7... 12 7 Violou a propriedade da min-heap! 7 Array: 12, 7
  • 8.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Corrigindo: 12 7 7 12 8 Array: 7, 12
  • 9.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Inserindo o 6... 7 12 6 Violou a propriedade da min-heap, pois o 6 é menor do que o seu pai: 7. 9 Array: 7, 12, 6
  • 10.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Corrigindo... 6 12 7 10 Array: 6, 12, 7
  • 11.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Inserindo o 10... 6 12 7 10 Violou a propriedade da min-heap, pois o 10 é menor que o seu pai: 12. 11 Array: 6, 12, 7, 10
  • 12.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Corrigindo... 6 10 7 12 12 Array: 6, 10, 7, 12
  • 13.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Inserindo o 8... 6 10 7 12 8 Violou a propriedade da min-heap, pois o 8 é menor que o seu pai: 10. 13 Array: 6, 10, 7, 12, 8
  • 14.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Corrigindo... 6 8 7 12 10 14 Array: 6, 8, 7, 12, 10
  • 15.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 • Inserindo o 20... 6 8 7 12 10 20 15Array: 6, 8, 7, 12, 10, 20
  • 16.
    Binary Heap • Exemplo:12, 7, 6, 10, 8, 20 6 8 7 12 10 20 16Array: 6, 8, 7, 12, 10, 20
  • 17.
    Binary Heap • Pararemover, remove-se o elemento que está no topo da heap, ou seja, no início do array. • Copia-se o elemento do final para o início do array. • Leva-se o elemento que foi colocado no topo da heap para a sua respectiva posição de acordo com a sua prioridade. 17
  • 18.
    Binary Heap • Removendoo 6... 6 8 7 12 10 20 18Array: 6, 8, 7, 12, 10, 20
  • 19.
    Binary Heap • Removendoo 6... 8 7 12 10 20 O 20 é o último elemento do array. 19Array: 8, 7, 12, 10, 20
  • 20.
    Binary Heap • Removendoo 6... 8 7 12 10 20 20Array: 20, 8, 7, 12, 10
  • 21.
    Binary Heap • Removendoo 6... 8 7 12 10 20 Troca o 20 com o 7 para refazer a heap. 21
  • 22.
    Binary Heap • Heaprefeita! 8 20 12 10 7 22 Array: 7, 8, 20, 12, 10
  • 23.
    Binary Heap -Custo • A inserção e remoção é O(logN). • Tanto na remoção como na inserção, precisa-se verificar e corrigir (se necessário) violações das propriedades da heap. 23
  • 24.
    Binary Heap • Simulaçãoda Binary Heap: • http://visualgo.net/heap.html (max heap) • https://www.cs.usfca.edu/~galles/visualization/Heap.html (min heap) 24
  • 25.