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