Disjunktijoukkojen metsä on puumainen tietorakenne disjunktijoukkoja varten . (kutsutaan joskus Disjoint Set Systemiksi )
Jokainen joukko esitetään juurtuneena puuna . Epäliittyneessä joukkometsässä jokainen solmu sisältää yhden joukkoelementin ja osoittaa vain sen pääsolmuun. Jokaisen puun juuri sisältää edustajan ja on itsensä vanhempi.
Toiminnot disjunktijoukkojen metsässä suoritetaan seuraavasti:
MAKE_SET - luo puun, jossa on yksi solmu.
FIND_SET - siirrymme ylälinkkejä pitkin puun juureen.
UNIONI - asettaa yhden puun juuren osoittimen toisen puun juureen.
Yhdistys arvon mukaan. Heuristiikan ideana on, että kun UNION-operaatio suoritetaan, tuloksena olevan puun korkeus ei mahdollisuuksien mukaan kasva. Tätä varten käytetään kunkin juuren ominaisarvoa , joka on solmun korkeuden yläraja. MAKE_SET-toiminto luo juuren, jonka arvo on 0. UNION-operaatio, jota tässä tapauksessa kutsutaan union by rank, toimii seuraavasti:
Polun pakkaus. FIND_SET-operaation aikana tapahtuva heuristiikka saa jokaisen solmun (joka kohdataan siirtyessään juureen) osoittamaan suoraan juureen. Polun pakkaus ei muuta solmujen rivejä.
Harkitse esimerkkiä epäyhtenäisten joukkojen metsän toteuttamisesta. Taulukon p tallennamme linkin pääsolmuun ja taulukkoon r kärjen arvon.
toimenpide MAKE_SET(x) p[x] = x r[x] = 0 operaatio FIND_SET(x) jos x ≠ p[x] niin p[x] = ETSI_SET(p[x]) paluu p[x] operaatio UNION(x, y) jos r[x] > r[y] sitten p[y] = x muu p[x] = y jos r[x] = r[y] niin r[y] = r[y] + 1Erikseen käytettynä järjestysliitto ja polun pakkaus lisäävät toimintojen tehokkuutta hajanaisten joukkojen metsässä. Itse liitto arvon mukaan antaa ajoajan , jossa on operaatioiden kokonaismäärä ja järjestelmän elementtien lukumäärä. Itse polun pakkaus johtaa pahimpaan mahdolliseen ajoaikaan , jossa on FIND_SET-toimintojen määrä. Molempien heuristioiden soveltaminen antaa pahimman tapauksen ajoajan , missä on käänteinen Ackermann-funktio . Tämä estimaatti on toiminta-ajan alaraja disjunktijoukkojen kanssa, joten disjunktijoukkojen metsä on optimaalinen rakenne disjunktijoukkoille.