Binary
Search Tree, Binary Heap, AVL-tree, B-tree, ...
Binary
tree, traversal of a binary tree. Binary search tree. Searching,
adding, deleting nodes from BST. Balancing.
Binary heap. Up-heap and down-heap bubbling. Heapsort method.
AVL-tree, rotation schemes (single rotation, double rotation).
Multi-way search tree, B-tree. Properties and updating operations:
insert, overflow detection, split, remove, underflow detection,
fusion (merge).
Binomial tree, red-black tree.
Kahendpuu, kuhi, AVL-puu, B-puu, jt.
Kahendpuu on puu, mille igal
tipul on null kuni kaks alluvat, seejuures tehakse vahet
vasakpoolse ja parempoolse alluva vahel.
T on kahendpuu, kui
kas:
- T on tühi
või
- T = (t0, Tv, Tp), kus t0on
puu
T juur, Tv on kahendpuu (vasak alampuu) ja Tp
on kahendpuu (parem alampuu).
Täielik kahendpuu
sisaldab kõiki võimalikke tippe etteantud
sügavusel (kõikidel vahetippudel on täpselt
kaks alluvat);
kui eemaldada järjest parempoolseimaid lehti, on igal
sammul tulemuseks kompaktne
kahendpuu.
Kahendpuu läbimine
Eesjärjestuses (pre-order):
Kui T ei ole tühi, siis:
- töödelda juur
- läbida vasak alampuu eesjärjestuses
- läbida parem alampuu eesjärjestuses.
Taga- e. lõppjärjestuses (post-order, end-order):
Kui T ei ole tühi, siis:
- läbida vasak alampuu lõppjärjestuses
- läbida parem alampuu lõppjärjestuses
- töödelda juur.
Keskjärjestuses (in-order):
Kui T ei ole tühi, siis:
- läbida vasak alampuu keskjärjestuses
- töödelda juur
- läbida parem alampuu keskjärjestuses.
Kahendotsimise puu
Olgu kahendpuu iga tipuga t
seotud võti t.x (võrreldavad väärtused).
T.x olgu mittetühja kahendpuu T juure võti.
Kahendotsimise puu on
kahendpuu T, milles
- Kas T on tühi või
- iga tipu tv korral vasakust alampuust Tv
kehtib tv.x <= T.x
- iga tipu tp korral paremast alampuust Tp
kehtib tp.x >= T.x
- Tv ja Tp on kahendotsimise puud
Kahendotsimise puu moodustamine = järjestamine
Tasakaalustatud kahendpuu
korral on Tv ja Tp enam-vähem
võrdse suurusega (näit. kõrguste erinevus
kuni 1).
Kuhi
Kuhjaomadus: puu ühegi tipu võti
pole suurem kui tema ülemuse võti (mittekasvavad
jadad juurest alla).
Kahendkuhi (edaspidi
lihtsalt kuhi) on kuhjaomadusega kompaktne kahendpuu. Suurim
võti on puu juurtipus.
Pöördkuhi:
vahetame võrratusemärgi (ühegi tipu võti
pole väiksem, kui tema ülemuse võti).
Kuhja kujutamine massiivina:
- Juure indeks on 1
- Kui tipu indeks on k, siis vasaku alampuu juure indeks
on 2k ja parema alampuu juure indeks on 2k+1
- Kui arvutatud indeks on suurem elementide arvust
kuhjas, siis vastav tipp puudub.
Kahendotsimise puu
operatsioonid, AVL-puu
Otsimine oli (eelpool
vaadeldud) keerukusega O(log n), täpsemalt O(h), kus h on
puu kõrgus
Lisamine on samuti O(h)
Eemaldamine on samuti O(h), aga nõuab vahel tipu
järglase (keskjärjestuse mõttes) eemaldamist
säilitades selle võtme eemaldatavas tipus
Järglase eemaldamiseks:
Kõik need operatsioonid sõltuvad puu
kõrgusest h - seda tuleks hoida minimaalsena. Paraku
ülaltoodud operatsioonid ei hoolitse puu kõrguse
vähendamise eest.
AVL (Adelson-Velski, Landis) puu on kahendotsimise puu, mille
korral:
- Vasak ja parem alampuu on AVL-puud ning nende
kõrgused erinevad ülimalt ühe võrra.
- Tühi puu on AVL-puu.
Otsimine puud ei muuda ja on
korraldatud samuti, nagu kahendotsimise puus.
Lisamine ja eemaldamine tuleb defineerida nii, et AVL-puu
omadus säiliks, s.t. alampuude kõrguste vahe ei tohi
olla suurem kui 1.
Pööre.Alampuude I ja III kõrgused enne
pööret erinevad 2 võrra, omadus a≤b
säilib.
Seda joonist võiks vaadata ka peegelpildis.
Topeltpööre. Alampuude I ja III kõrgused
enne pööret erinevad 2 võrra, omadus a≤c≤b
säilib.
Ka seda joonist võib vaadata peegelpildis.
B-puu
Kahendotsimise puud võib
üldistada m>2 juhtumile, lubades ühes puu tipus
hoida kuni m-1 kirjet (m on konstant).
m-rajaline otsimispuu on kas:
- tühi või
- koosneb juurest, milles hoitakse järjestatuna j
võtit (0<=j<m) ning j+1 alampuust, mis
kõik peavad olema kas mittetühjad m-rajalised
otsimispuud või (kõik) tühjad puud. Juure
võtmete k1 <= k2 <= ...
<= kj ja alampuude T0, T1,
... , Tj jaoks kehtivad järgmised kitsendused:
- kõik alampuus T0 esinevad
võtmed k ei ületa juure esimest võtit k1:
k <= k1
- kõigi võtmete k jaoks alampuust Ti
(0<i<j) kehtib ki <= k <= ki+1
- kõik alampuus Tj esinevad
võtmed k pole väiksemad kui juure viimane
võti kj: k >= kj
m-järku B-puu
(Bayer, McGreigh) on niisugune m-rajaline otsimispuu, milles
- kõik lehed on samal tasemel;
- lehed ei sisalda võtmeid (fiktiivsed, edaspidi
jätame joonistel kujutamata);
- juurel on 2 kuni m alluvat;
- kõigil teistel vahetippudel on t=ceil[m/2]
(t>=2) kuni m alluvat.
Binomiaalpuu
On teisigi puustruktuure, mille
kõrgus on O(log n).
Binomiaalpuu Bk defineeritakse
rekurrentse seosega:
- B0 on ühetipuline puu;
- Bk (k>0) konstrueeritakse kahest
binomiaalpuust Bk-1, pannes ühe teise juurtipu
esimeseks alluvaks.
Binomiaalpuul Bk on
järgmised omadused:
- puu kõrgus on k
- puu tippude arv on 2k
- suurima astmega tipp on juur, mille alampuudeks on Bk-1,
Bk-2, ..., B0
Binomiaalpuu on "kreenis"
vasakule, kuid see ebasümmeetia on hästi piiratud.
Nimetus tuleb sellest, et i-ndal tasemel on binoomkordaja (ki)
tippu: näit B3 puhul: 1, 3, 3, 1
Värvitud kahendpuu ("red-black
tree")
AVL-puudega sarnanev skeem, mis
hoiab kahendpuu harud tasakaalus.
Lisame kahendotsimise puu tipule omaduse "värv"
võimalike väärtustega punane ja must.
Värvitud kahendpuu on kahendotsimise puu, milles:
- Iga tipp võib olla kas punane või must
- Lehed (antud juhul fiktiivsed tühitipud) on mustad
- Punase tipu kõik vahetud alluvad on mustad
- Igal lihtteel juurest leheni on ühepalju musti tippe
Sellise puu kõrgus on
maksimaalselt 2 log (n+1)
Otsimine, lisamine ja kustutamine töötavad O(log
n) ajaga.
Sarnaselt AVL-puule, kasutatakse tasakaalustamiseks
lokaalseid pöördeid, mis halvimal juhul levivad O(h)
tipule.
Jaanus Pöial