Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy

Preview:

DESCRIPTION

Stromy prehľadávanie stromov, b in árne vyhľadávacie stromy. Čo máme v pláne ?. Strom ako dôležitá dátová štruktúra Ako uložiť „strom“ v programe Binárne stromy Systematické prehľadávania stromov „Stromové algoritmy ” Bin árne vyhľadávacie stromy Samovyvažova c ie stromy. - PowerPoint PPT Presentation

Citation preview

StromyStromyprehľadávanie stromov, prehľadávanie stromov, bbininárne vyhľadávacie stromyárne vyhľadávacie stromy

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

33

Stromy okolo násStromy okolo nás

AAA

Súborový systém

Hierarchia adresárov a podadresárov

Diagramy hierarchického usporiadania

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

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

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.

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

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;

}

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..

1010

5

7 9

4 2 6

3

Programujeme …Programujeme …

CieCieľ:ľ: vytvoriť vytvoriť uvedenú štruktúru v uvedenú štruktúru v programeprograme

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 ...

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

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

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

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

1616

Programujeme …Programujeme …

JednoduchJednoduché, pekné a rekurzívne algoritmy ...é, pekné a rekurzívne algoritmy ...

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

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

1919

PrPríklad BVSíklad BVS

8

3 10

1 6 14

74 13

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

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;

}

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

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

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))

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 ??

2626

5

3 8

2 4 6 9

8

6

5

2

Logaritmická hĺbka

Lineárna hĺbka

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

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

2929

Ďakujem za pozornosť

Otázky ???