Les nesouvislých množin je stromová datová struktura pro disjunktní množiny . (někdy nazývaný Disjoint Set System )
Každá sada je reprezentována jako kořenový strom . V doménové struktuře nesouvislé sady obsahuje každý uzel jeden prvek sady a ukazuje pouze na svůj nadřazený uzel. Kořen každého stromu obsahuje zástupce a je jeho rodičem.
Operace s doménovou strukturou nesouvislých množin se provádějí následovně:
MAKE_SET - vytvoří strom s jedním uzlem.
FIND_SET - přesouváme se po rodičovských vazbách do kořene stromu.
UNION - nastaví ukazatel kořene jednoho stromu na kořen druhého.
Sdružení podle hodnosti. Myšlenka heuristiky spočívá v tom, že při provádění operace UNION se výška výsledného stromu, pokud je to možné, nezvyšuje. K tomu se používá charakteristická hodnost pro každý kořen, což je horní hranice výšky uzlu. Operace MAKE_SET vytvoří kořen s hodností 0. Operace UNION, která se v tomto případě nazývá sjednocení podle hodnosti, funguje následovně:
Komprese cesty. Heuristika během operace FIND_SET způsobí, že každý uzel (na který narazí při přesunu do kořenového adresáře) ukazuje přímo na kořenový adresář. Komprese cesty nemění pořadí uzlů.
Zvažte příklad implementace lesa nesouvislých množin. Do pole p uložíme odkaz na nadřazený uzel a do pole r hodnost vrcholu.
operace MAKE_SET(x) p[x] = x r[x] = 0 operace FIND_SET(x) jestliže x ≠ p[x] pak p[x] = FIND_SET(p[x]) vrátit p[x] operace UNION(x, y) jestliže r[x] > r[y] pak p[y] = x jiný p[x] = y jestliže r[x] = r[y] pak r[y] = r[y] + 1Při samostatné aplikaci vede sjednocení pořadí a komprese cesty ke zvýšení efektivity operací na doménové struktuře nesouvislých množin. Samotné sjednocení podle hodnosti udává dobu běhu , kde je celkový počet operací a počet prvků v systému. Samotná komprese cesty má za následek nejhorší případ běhu , kde je počet operací FIND_SET. Použití obou heuristik dává nejhorší případ běhu , kde je inverzní Ackermannova funkce . Tento odhad je spodní hranicí doby operace s disjunktními množinami, takže les disjunktních množin je optimální strukturou pro disjunktní množiny.