Zamyslenie nad časovou zložitosťou

Krok bublania dohora vieme implementovať v konštantnom čase: stačí porovnať dva prvky a ak treba tak ich vymeniť. Krok bublania dodola vieme implementovať v čase priamo úmernom stupňu spracúvaného vrchola, musíme totiž prezrieť všetkých jeho synov.

Dokopy teda platia nasledovné odhady časovej zložitosti:

  • Vkladanie nového prvku má časovú zložitosť nanajvýš priamo úmernú hĺbke, do ktorej ho pridáme ako list.
  • Výber maximálneho prvku má časovú zložitosť, ktorú vieme zhora odhadnúť ako (hĺbka našej haldy) krát (maximálny stupeň vrcholu v nej).

Ako teraz dosiahnuť, aby tieto časové zložitosti boli obe malé? A ako dosiahnuť, aby sa nám to celé ľahko implementovalo a aby sme sa nemuseli trápiť napríklad s rôznymi referenciami na synov rôznych vrcholov?

Odpoveď na obe otázky je rovnaká: vhodne si zvolíme tvar našej haldy.

V doterajšom texte sme sa vôbec nezamýšľali nad tým, ako naša halda vyzerá -- či je plytká alebo hlboká, či sú stupne vrcholov malé alebo veľké. Tu však máme úplnú voľnosť: my si môžeme zvoliť taký tvar, ktorý bude mať aj dobré parametre, aj sa nám bude ľahko implementovať.