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

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

Upload: hiroko

Post on 30-Jan-2016

86 views

Category:

Documents


1 download

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

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2929

Ďakujem za pozornosť

Otázky ???