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
ax*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.