Binomiální halda

Binomiální halda je druh haldy, tedy datové struktury, která reprezentuje množinu čísel. Binomiální haldy se používají zejména v aplikacích, kde je potřeba provádět rychle operace MIN a MERGE.

Definice

Binomiální halda je uspořádaná množina binomiálních stromů T = T1, … , Tl, kde platí:

  • Stromy Ti jsou v T uspořádány vzestupně podle svých řádů.
  • n=|V(T1)|+ … +|V(Tl)|.
  • Pro každé nezáporné k se v množině T vyskytuje nejvýše jeden binomiální strom řádu k.
  • Každý vrcholv v každém stromu obsahuje klíč k(v).
  • Pro každý strom Ti platí haldové uspořádání klíčů, čili ∀ v ∈ V(Ti) a ∀ jeho syny sj, j = 1, , . . . , m, platí k(v) ≤ k(sj).

Vlastnosti

Binomiální strom řádu k má 2k uzlů a hloubku k.

Operace

Operace Popis Složitost
Insert Vloží nový prvek O(log n), Amort.Θ(1)
FindMin/FindMax Vrátí minimum/maximum O(1)
ExtractMin/ExtractMax Odstraní minimální/maximální prvek O(log n)
Delete Vymaže prvek z BH O(log n)
Merge Sloučí dvě BH do jedné O(log n)
Build Vytvoří BH z n prvků O(n)
Decrease Key Sníží hodnotu klíče prvku O(log n)
Decrease Key Zvýší hodnotu klíče prvku O(log n)

Vkládání (Insert)

Vkládání prvku do haldy je velmi jednoduché. Vytvoří se halda velikosti 1 (1 strom s 1 uzlem) a ta se pak slije s haldou, do které přidáváme.

Implementace

Pro uložení uspořádané množiny stromů T se používá spojový seznam.

Související