Zlé tvary haldy

Haldy rôznych degenerovaných tvarov nám príliš nepomôžu. Napr. je nanič halda, ktorá je tvorená jedným koreňom a $n−1$ listami. A takisto je nanič halda-had, v ktorej má každý vrchol najviac jedného syna.

V čom je problém?

Pozrime sa najskôr na prvú spomínanú haldu. Keby sme v našom programe používali haldu, ktorá vyzerá takto, príliš by nám to nepomohlo. Zjavne do takejto haldy vieme ľahko vkladať ďalšie prvky -- stačí pridať nový list a ak treba, tak hodnotu v ňom vymeniť s hodnotou v koreni. Avšak do problémov sa dostávame v okamihu, keď by sme chceli najmenší prvok z haldy vybrať. Vtedy by sme totiž na to, aby sme zistili, ktorú hodnotu presunúť do koreňa, museli prezrieť úplne všetky prvky v halde. Vieme teda robiť push v konštantnom čase, ale na pop potrebujeme až lineárny čas. (Takáto halda v podstate zodpovedá ukladaniu prvkov v neusporiadanom poli, až na to, že aktuálne maximum máme akoby v samostatnej premennej.)

A o nič lepšie na tom nie je ani druhá spomínaná halda. Vždy, keď vložíme nový prvok, ho pridáme ako nový list do najhlbšej úrovne a následne hodnotou z neho bubleme dohora, až kým sa nezastaví. V najhoršom možnom prípade (ktorý nastane, ak budeme vkladať prvky v poradí od najmenšieho po najväčší) teda každý prvok postupne prebuble hore celou reťazou až do koreňa. Teda druhý vložený prvok bude bublať dohora $1$-krát, tretí $2$-krát, \dots, a ak ich vložíme postupne $n$, tak posledný bude bublať dohora až $(n−1)$-krát. Tu teda operácia push môže trvať až lineárne dlho. A niet divu: ľahko nahliadneme, že takáto halda čítaná zhora dole je vlastne obyčajným usporiadaným poľom.