Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy
description
Transcript of Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy
![Page 1: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/1.jpg)
StromyStromyprehľadávanie stromov, prehľadávanie stromov, bbininárne vyhľadávacie stromyárne vyhľadávacie stromy
![Page 2: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/2.jpg)
22
Čo máme v pláne Čo máme v pláne ??
Strom ako dôležitá Strom ako dôležitá dátová štruktúradátová štruktúra
Ako Ako uložiťuložiť „strom“ v programe „strom“ v programe
Binárne stromyBinárne stromy
Systematické Systematické prehľadávaniaprehľadávania stromov stromov
„„Stromové algoritmyStromové algoritmy””
BinBinárne árne vyhľadávacie stromyvyhľadávacie stromy
SamovyvažovaSamovyvažovaccie stromyie stromy
![Page 3: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/3.jpg)
33
Stromy okolo násStromy okolo nás
AAA
Súborový systém
Hierarchia adresárov a podadresárov
Diagramy hierarchického usporiadania
![Page 4: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/4.jpg)
44
Čo je to strom Čo je to strom ??
Skladá z Skladá z vrcholovvrcholov (uzlov)(uzlov)
Každý vrchol môže (ale nemusí) mať Každý vrchol môže (ale nemusí) mať potomkovpotomkov
KoreňKoreň
špeciálny vrchol, ktorý špeciálny vrchol, ktorý nemánemá rodi rodičača
v strome je v strome je práve jedenpráve jeden
každý vrchol v strome je jeho každý vrchol v strome je jeho priamympriamym alebo alebo nepriamymnepriamym potomkom potomkom
Každý vrchol okrem koreňa má Každý vrchol okrem koreňa má práve jedného práve jedného rodičarodiča
ListomListom nazývame vrchol bez potomkov nazývame vrchol bez potomkov
![Page 5: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/5.jpg)
55
A
B C D
E F G H
I
Koreň
Listy: E, I, G, H
Rodičom E je vrchol B
Potomkovia A: B, C, D
![Page 6: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/6.jpg)
66
A
B C D
E F G H
I
Priamy a nepriamy potomkovia nejakého vrcholu vytvárajú podstrom s koreňom v danom vrchole.
![Page 7: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/7.jpg)
77
Stromy a podstromyStromy a podstromy
Strom je Strom je rekurzívnarekurzívna štruktúra: štruktúra:
KoreňKoreň
Podstromy zakorenené v potomkoch koreňaPodstromy zakorenené v potomkoch koreňa
Dôsledok:Dôsledok:
Rekurzívna dátová štruktúraRekurzívna dátová štruktúra
Rekurzívne algoritmyRekurzívne algoritmy
Pozorovanie:Pozorovanie: z koreňa sa vieme dostať do z koreňa sa vieme dostať do ľuľubboľného vrcholu stromu (stačí si vybrať oľného vrcholu stromu (stačí si vybrať „správneho“ potomka na pokračovanie)„správneho“ potomka na pokračovanie)
GrafovGrafový pohľad:ý pohľad: acyklický orientovaný graf acyklický orientovaný graf
![Page 8: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/8.jpg)
88
Ako dostať strom do programu Ako dostať strom do programu ??
ZZákladná stavebná jednotka: ákladná stavebná jednotka: vrcholvrchol (Node)(Node)
KaKaždý vrcholždý vrchol (Node) (Node) uchováva: uchováva:
InformáciuInformáciu ulouloženú v danom ženú v danom vrcholevrchole ((číslo, reťazec, číslo, reťazec, objekt, názov súboru, ...objekt, názov súboru, ...))
Zoznam Zoznam referencireferenciíí (odkazov) na (odkazov) na potomkovpotomkov
public class Node {
int content;
List<Node> children;
}
![Page 9: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/9.jpg)
99
Binárne stromyBinárne stromy
Binárny strom je strom, v ktorom má každý Binárny strom je strom, v ktorom má každý vrchol vrchol nanajvýš 2 potomkovnanajvýš 2 potomkov::
Ľavý synĽavý syn
Pravý synPravý syn
public class Node {
int data;
Node left;
Node right;
}
Neexistenciu Neexistenciu potomka potomka
reprezentujeme reprezentujeme hodnotou hodnotou nullnull..
![Page 10: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/10.jpg)
1010
5
7 9
4 2 6
3
Programujeme …Programujeme …
CieCieľ:ľ: vytvoriť vytvoriť uvedenú štruktúru v uvedenú štruktúru v programeprograme
![Page 11: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/11.jpg)
1111
Prechody stromom (1)Prechody stromom (1)
Na to, aby sme sa dostali k ľubovoľnému vrcholu Na to, aby sme sa dostali k ľubovoľnému vrcholu stromu stačí stromu stačí referencia na koreňreferencia na koreň
Problém:Problém: ako systematicky ako systematicky nav navštíviť všetky štíviť všetky vrcholy stromu vrcholy stromu ??
Rekurzívna idea:Rekurzívna idea:
Spracuj Spracuj hodnotu ulohodnotu uloženú v aktuálnom vrcholeženú v aktuálnom vrchole
Navštív hodnoty v podstrome zakorenenom v ľavom Navštív hodnoty v podstrome zakorenenom v ľavom synovisynovi
Navštív hodnoty v podstrome zakorenenom v Navštív hodnoty v podstrome zakorenenom v pravom synovipravom synovi
Programujeme ...Programujeme ...
![Page 12: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/12.jpg)
1212
Prechody stromomPrechody stromom (2)(2)
Preorder:Preorder:
vrcholvrchol, ľavý podstrom, pravý podstrom, ľavý podstrom, pravý podstrom
Inorder:Inorder:
ľavý podstrom, ľavý podstrom, vrcholvrchol, pravý podstrom, pravý podstrom
Postorder:Postorder:
ľavý podstrom, pravý podstrom, ľavý podstrom, pravý podstrom, vrcholvrchol
![Page 13: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/13.jpg)
1313
5
7 9
4 2 6
3
PrPríkladíklad
Preorder: Preorder:
55, , 77, , 44, , 22, , 33, 9, 6, 9, 6
Inorder:Inorder:
44, , 77, , 22, , 33, , 55, 6, 9, 6, 9
Postorder: Postorder:
44, , 33, , 22, , 77, 6, 9, , 6, 9, 55
![Page 14: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/14.jpg)
1414
ZaujZaujímavá úlohaímavá úloha
Uvažujme strom, kde všetky vrcholy majú Uvažujme strom, kde všetky vrcholy majú rôznerôzne hodnotyhodnoty
Z postupnosti navštívenia vrcholov pri inorder a Z postupnosti navštívenia vrcholov pri inorder a preorder prechode preorder prechode zrekonštruovaťzrekonštruovať strom strom (resp. (resp. postupnospostupnosť navštívenia vrcholov pri postorder ť navštívenia vrcholov pri postorder prechodeprechode))
Kľúč k riešeniu:Kľúč k riešeniu:
pri preorder prechode je koreň vždy prvý prvok pri preorder prechode je koreň vždy prvý prvok postupnostipostupnosti
pri inorder pri inorder prechode vprechode všetky prvky v ľavom šetky prvky v ľavom podstrome sú v postupnosti naľavo od koreňa a podstrome sú v postupnosti naľavo od koreňa a všetky prvky v pravom podstrom sú napravo od všetky prvky v pravom podstrom sú napravo od koreňakoreňa
![Page 15: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/15.jpg)
1515
5
7 9
4 2 6
3
Ďalšie vlastnostiĎalšie vlastnosti
PoPočet vrcholovčet vrcholov: : 77
Počet listov: Počet listov: 33
HHĺbka stromu ĺbka stromu (po(počet čet úrovníúrovní): ): 44
PoPočet vrcholov na čet vrcholov na danej úrovnidanej úrovni
Šírka stromu Šírka stromu (maxim(maximálny počet álny počet vrcholov na nejakej úrovnivrcholov na nejakej úrovni): ): 33
MaximMaximálna uložená hodnota: álna uložená hodnota: 99
![Page 16: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/16.jpg)
1616
Programujeme …Programujeme …
JednoduchJednoduché, pekné a rekurzívne algoritmy ...é, pekné a rekurzívne algoritmy ...
![Page 17: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/17.jpg)
1717
Strom aritmetického výrazuStrom aritmetického výrazu
Príklad použitia binárnych stromovPríklad použitia binárnych stromov
List:List: reprezentuje reprezentuje číselnú hodnotu / premennúčíselnú hodnotu / premennú
Vnútorný vrchol:Vnútorný vrchol: reprezentuje binárnu reprezentuje binárnu operáciuoperáciu
Vyhodnotenie uzla operácie:Vyhodnotenie uzla operácie:
Vyhodnoť ľavý podstromVyhodnoť ľavý podstrom
Vyhodnoť pravý podstromVyhodnoť pravý podstrom
Aplikuj operáciuAplikuj operáciu
Postorder prechod produkuje Postorder prechod produkuje výraz v výraz v postfixovejpostfixovej notácii notácii
![Page 18: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/18.jpg)
1818
Binárne vyhľadávacie stromy Binárne vyhľadávacie stromy (BVS)(BVS)
BVS slBVS slúži na uloženie úži na uloženie dynamickydynamicky sa sa meniacejmeniacej množinymnožiny hodnôt hodnôt
„„Chytrým“ uložením hodnôt vieme dosiahnuť Chytrým“ uložením hodnôt vieme dosiahnuť rýchle vykonávanie operáciírýchle vykonávanie operácií
Základná idea:Základná idea:
Každá hodnota uložená vKaždá hodnota uložená v ľavom podstrome ľavom podstrome vrcholu vrcholu je je menšia menšia ako hodnota vo tomto vrcholeako hodnota vo tomto vrchole
Každá hodnota uložená v Každá hodnota uložená v pravom podstromepravom podstrome vrcholu je vrcholu je väčšiaväčšia ako hodnota vo tomto vrchole ako hodnota vo tomto vrchole
![Page 19: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/19.jpg)
1919
PrPríklad BVSíklad BVS
8
3 10
1 6 14
74 13
![Page 20: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/20.jpg)
2020
Výhody BVSVýhody BVS
Rýchle zistenie, či hodnota Rýchle zistenie, či hodnota je v BVSje v BVS::
Pri vyhľadávaní nemusíme pozerať do oboch Pri vyhľadávaní nemusíme pozerať do oboch podstromov, ale na základe hľadanej hodnoty a podstromov, ale na základe hľadanej hodnoty a hodnoty vrcholu, v ktorom sa nachádzame, hodnoty vrcholu, v ktorom sa nachádzame, viemevieme pokračovaťpokračovať v v správnomsprávnom podstromepodstrome
Rýchle zistenie Rýchle zistenie minimálnejminimálnej (st(stále vľavoále vľavo) a ) a maximmaximálnej álnej (st(stále vpravoále vpravo) ) hodnothodnotyy
InorderInorder prechod vytv prechod vytvára ára utriedenú postupnosťutriedenú postupnosť prvkov BVS stromuprvkov BVS stromu
![Page 21: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/21.jpg)
2121
Zistenie, či BVS obsahuje zadanú Zistenie, či BVS obsahuje zadanú hodnotuhodnotu
public boolean inBVS(int value) {
if (content == value)
return true;
if (value < content)
return (left != null) ? left.inBVS(value) : false;
else
return (right != null) ? right.inBVS(value) : false;
}
![Page 22: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/22.jpg)
2222
Vloženie vrcholu do BVSVloženie vrcholu do BVS
Simulátor:Simulátor:
http://people.ksp.sk/~kuko/bak/index.htmlhttp://people.ksp.sk/~kuko/bak/index.html
Nájdeme správnu pozíciu pre vkládaný vrchol Nájdeme správnu pozíciu pre vkládaný vrchol (tak ako ke(tak ako keď zisťujeme, či graf obsahuje danú ď zisťujeme, či graf obsahuje danú hodnotuhodnotu) a na t) a na tej vytvorej vytvoríme nový vrcholíme nový vrchol
![Page 23: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/23.jpg)
2323
Odstránenie vrcholu z BVS Odstránenie vrcholu z BVS (1)(1)
Najkomplikovanejšia operácia pri práci s BVSNajkomplikovanejšia operácia pri práci s BVS
Ak je odstráňovaný vrchol Ak je odstráňovaný vrchol listomlistom, tak len , tak len upravíme referenciu o rodičaupravíme referenciu o rodiča
Ak má odstraňovaný vrchol Ak má odstraňovaný vrchol len jedného len jedného potomkapotomka, tak referenciu na neho u rodiča , tak referenciu na neho u rodiča nahradíme referenciou na potomkanahradíme referenciou na potomka
Ak má odstraňovaný vrchol Ak má odstraňovaný vrchol dvoch potomkovdvoch potomkov, , potom:potom:
Vyberieme Vyberieme najmenšiu hodnotu v pravom podstromenajmenšiu hodnotu v pravom podstrome a presunieme ju do odstraňovaného vrcholua presunieme ju do odstraňovaného vrcholu
V pravom podstrome V pravom podstrome odstránimeodstránime najmenšiu najmenšiu hodnotuhodnotu
![Page 24: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/24.jpg)
2424
Odstránenie vrcholu z BVS Odstránenie vrcholu z BVS (2)(2)
OdstrOdstránenie je komplikované, pretože sa treba ánenie je komplikované, pretože sa treba vysporiadať s možným narušením vlastnosti vysporiadať s možným narušením vlastnosti BVS BVS (simul(simulácie a programovanieácie a programovanie))
![Page 25: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/25.jpg)
2525
Časová zložitosť operácii v BVSČasová zložitosť operácii v BVS
Každá z operácií Každá z operácií ((contains, delete, insertcontains, delete, insert) v BVS ) v BVS mmá zložitosť á zložitosť OO(h)(h), kde , kde hh je aktu je aktuálna álna hĺbka hĺbka stromustromu
n – pon – počet vrcholov BVSčet vrcholov BVS
V V ideálnomideálnom prípade je prípade je h h = O(log n)= O(log n)
V V najhornajhoršomšom prípade je prípade je h h = O(n)= O(n)
OtOtázka:ázka: pri akej postupnosti vkl pri akej postupnosti vkladanadaných hodnôt ých hodnôt vzniká ideálny prípad a pri akej najhorší prípad vzniká ideálny prípad a pri akej najhorší prípad ??
![Page 26: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/26.jpg)
2626
5
3 8
2 4 6 9
8
6
5
2
Logaritmická hĺbka
Lineárna hĺbka
![Page 27: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/27.jpg)
2727
Samovyvažovacie BVSSamovyvažovacie BVS
BVS je dobrá štruktúra, ak je strom BVS je dobrá štruktúra, ak je strom vyváženývyvážený
SamovyvažovacieSamovyvažovacie BVS BVS
Chytré algoritmyChytré algoritmy zabezpečujúce, že ak sa naruší zabezpečujúce, že ak sa naruší vyváženosť, tak sa sériou niekoľkých operácií vyváženosť, tak sa sériou niekoľkých operácií (rot(rotáciíácií)) strom opäť vyváži strom opäť vyváži
Časová zložitosť Časová zložitosť opravy opravy narunarušenia šenia vyváženostivyváženosti je je OO(h)(h) – t.j. rovnak– t.j. rovnaká ako zložitosť modifikujúcej á ako zložitosť modifikujúcej operácieoperácie
AVL stromy, RBAVL stromy, RB--stromystromy ((červeno-čiernečerveno-čierne), …), …
Trieda Trieda java.util.TreeSetjava.util.TreeSet interne ukladá hodnoty v interne ukladá hodnoty v (samovyva(samovyvažovacomžovacom) ) RBRB--stromestrome
![Page 28: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/28.jpg)
2828
Ďalšie zaujímavostiĎalšie zaujímavosti
V V binárnombinárnom strom ide uložiť strom ide uložiť všeobecnévšeobecné stromy: stromy:
namiesto referencií na 2 synov sa pamätá namiesto referencií na 2 synov sa pamätá referencia na prvého referencia na prvého ((„„najstarnajstaršieho“šieho“) syna a ) syna a referencia na sreferencia na súrodencaúrodenca
V V databázachdatabázach sa na indexovanie sa na indexovanie (zr (zrýchlenie ýchlenie vyhľadávaniavyhľadávania) ) využívajúvyužívajú B-stromyB-stromy, kde v , kde v kakaždom vrchole je uložených veľa hodnôtždom vrchole je uložených veľa hodnôt
![Page 29: Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy](https://reader035.fdocument.pub/reader035/viewer/2022081420/568157f2550346895dc56fca/html5/thumbnails/29.jpg)
2929
Ďakujem za pozornosť
Otázky ???