Binární halda v poli

Pro reprezentaci binární haldy se hodí pole:

type TArray = array[1..MAXHEAP] of longint;
var halda: TArray;

K tomu abychom s ním mohli snadno pracovat potřebujeme pouze správně počítat s indexy. Předpokládejme, že prvek, se kterým pracujeme leží v haldě pod indexem x. Potom:

  • Rodič tohoto prvku leží pod indexem x div 2. Pro kořen haldy vyjde 0 - podle toho ho můžeme poznat.
  • Potomci tohoto prvku jsou na indexech x*2 a x*2+1. Přitom listy poznáme tak, že oba jejich potomci mají index větší, než je celkový počet prvků v haldě.

Stavba haldy v O(n)

Přímočará metoda konstrukce haldy pomocí opakovaného vkládání N prvků je zbytečně neefektivní. Můžeme haldu postavit od posledního prvku s tím, že pro každý prvek zavoláme metodu down. Zkuste si s haldou experimentovat sami.

Hledání K-tého nejmenšího prvku

Opakování z přednášky.

Domácí úkol

Úloha Generování kombinací byla zadána za 30 bodů. Slouží na procvičení rekurze.