Binární halda (binary heap) je úplný binární strom, ve kterém platí, že každý potomek vrcholku má nižší nebo stejnou hodnotu nežli vrcholek sám. V případě, že není poslední hladina haldy zaplněna, jsou uzly ukládány do haldy zleva.
Další důležitou vlastností je, že pokud indexujeme (od čísla 1) prvky haldy od shora dolů, zleva doprava, pak potomci každého vrcholu jsou na indexu a , tato vlastnost je zajištěna tím, že v haldě nevynecháváme mezery. Graficky si tedy haldu můžeme představit jako pyramidu s useknutou základnou.
Vlastnost býti haldou je rekurzivní - všechny podstromy haldy jsou také haldy. Díky této vlastnosti máme zajištěno, že se halda chová jako prioritní fronta - na vrcholek haldy vždy musí vystoupit prvek s nejvyšší prioritou (čehož se využívá u heapsortu – řazení haldou).
V případě, že považujeme za vyšší prioritu nižší hodnotu klíče, hovoříme o min-heap, při opačném uspořádání o max-heap.
Mějme haldu, u níž víme, že její vrchol nerespektuje uspořádání. Pomocná procedura repairTop přesune tento vrchol na odpovídající pozici, čímž obnoví požadované vlastnosti haldy. Samotná implementace je jednoduchá – algoritmus porovnává uzel otce s jeho syny, pokud má některý ze synů vyšší prioritu, tak jej prohodí s otcem, pokud mají oba synové vyšší prioritu, tak prohodí otce se synem s nejvyšší prioritou. Algoritmus dále iterativně pokračuje o úroveň níže, dokud buď nenarazí na nejspodnější úroveň haldy, nebo dokud není priorita otce vyšší než obou jeho synů (vlastnost býti haldou je obnovena).
Asymptotická složitost procedury repairTop je , protože halda má maximálně logaritmickou hloubku.
Pomocná procedura heapify zkonstruuje v zadaném poli haldu. Jelikož je vlastnost býti haldou rekurzivní, tak pro konstrukci haldy musíme opravit všechny její netriviální podhaldy. Postupujeme proto po vrcholech všech netriviálních podhald (indexy ) a voláme operaci repairTop. Po ukončení výše zmíněné smyčky zadané pole reprezentuje haldu. Asymptotická složitost procedury heapify je .
Operace vkládání (insert) funguje přesně naopak než operace repairTop. Nový prvek je přidán na konec haldy a probublává vzhůru tak dlouho, dokud má vyšší prioritu než jeho otec. Asymptotická složitost vkládání je .
Operace top vrátí hodnotu prvku s nejvyšší prioritou – tj. vrcholu. Jelikož se jedná o návrat prvního prvku pole, tak má operace top konstantní asymptotickou složitost .
Operace returnTop vrátí prvek s nejvyšší prioritou a odstraní jej z haldy. Samotné smazání provede tak, že vrchol haldy nahradí jejím posledním prvkem, zkrátí haldu o 1 (dekrementuje proměnnou reprezentující prvků haldy) a zavolá operaci repairTop na vrchol haldy. Asymptotická složitost operace returnTop je totožná se složitostí volání repairTop – .
Operace merge sloučí dvě haldy do jedné – vytvoří nové pole, do nějž nakopíruje obsah obou hald a na toto nové pole zavolá operaci heapify. Asymptotická složitost tohoto postupu je , kde je velikost první haldy a je velikost druhé haldy.
Priváty, escort i erotické masáže na jednom místě