1 / 29

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

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.

hiroko
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Stromyprehľadávanie stromov, binárne vyhľadávacie stromy

  2. Č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žovacie stromy

  3. Stromy okolo nás Súborový systém Hierarchia adresárov a podadresárov AAA Diagramy hierarchického usporiadania

  4. Čo je to strom ? • Skladá z vrcholov(uzlov) • Každý vrchol môže (ale nemusí) mať potomkov • Koreň • špeciálny vrchol, ktorý nemá rodiča • v strome je práve jeden • každý vrchol v strome je jeho priamym alebo nepriamym potomkom • Každý vrchol okrem koreňa má práve jedného rodiča • Listom nazývame vrchol bez potomkov

  5. A Koreň • Listy: E, I, G, H • Rodičom E je vrchol B • Potomkovia A: B, C, D D C B G E F H I

  6. A Priamy a nepriamy potomkovia nejakého vrcholu vytvárajú podstrom s koreňom v danom vrchole. D C B G E F H I

  7. Stromy a podstromy • Strom je rekurzívna štruktúra: • Koreň • Podstromy zakorenené v potomkoch koreňa • Dôsledok: • Rekurzívna dátová štruktúra • Rekurzívne algoritmy • Pozorovanie: z koreňa sa vieme dostať do ľuboľného vrcholu stromu (stačí si vybrať „správneho“ potomka na pokračovanie) • Grafový pohľad: acyklický orientovaný graf

  8. Ako dostať strom do programu ? • Základná stavebná jednotka: vrchol(Node) • Každý vrchol (Node) uchováva: • Informáciuuloženú v danom vrchole(číslo, reťazec, objekt, názov súboru, ...) • Zoznam referencií(odkazov) na potomkov publicclass Node { intcontent; List<Node> children; }

  9. Binárne stromy • Binárny strom je strom, v ktorom má každý vrchol nanajvýš 2 potomkov: • Ľavý syn • Pravý syn publicclass Node { intdata; Node left; Node right; } Neexistenciu potomka reprezentujeme hodnotou null.

  10. Programujeme … 5 • Cieľ: vytvoriť uvedenú štruktúru v programe 7 9 4 2 6 3

  11. Prechody stromom (1) • Na to, aby sme sa dostali k ľubovoľnému vrcholu stromu stačí referencia na koreň • Problém: ako systematicky navštíviť všetky vrcholy stromu ? • Rekurzívna idea: • Spracuj hodnotu uloženú v aktuálnom vrchole • Navštív hodnoty v podstrome zakorenenom v ľavom synovi • Navštív hodnoty v podstrome zakorenenom v pravom synovi • Programujeme ...

  12. Prechody stromom(2) • Preorder: • vrchol, ľavý podstrom, pravý podstrom • Inorder: • ľavý podstrom, vrchol, pravý podstrom • Postorder: • ľavý podstrom, pravý podstrom, vrchol

  13. Príklad 5 • Preorder: 5, 7, 4, 2, 3, 9, 6 • Inorder: 4, 7, 2, 3, 5, 6, 9 • Postorder: 4, 3, 2, 7, 6, 9, 5 7 9 4 2 6 3

  14. Zaujímavá úloha • Uvažujme strom, kde všetky vrcholy majú rôzne hodnoty • Z postupnosti navštívenia vrcholov pri inorder a preorder prechode zrekonštruovať strom (resp. postupnosť navštívenia vrcholov pri postorder prechode) • Kľúč k riešeniu: • pri preorder prechode je koreň vždy prvý prvok postupnosti • pri inorder prechode všetky prvky v ľavom podstrome sú v postupnosti naľavo od koreňa a všetky prvky v pravom podstrom sú napravo od koreňa

  15. Ďalšie vlastnosti 5 • Počet vrcholov: 7 • Počet listov: 3 • Hĺbka stromu (počet úrovní): 4 • Počet vrcholov na danej úrovni 7 9 4 2 6 Šírka stromu (maximálny počet vrcholov na nejakej úrovni): 3 Maximálna uložená hodnota: 9 3

  16. Programujeme … • Jednoduché, pekné a rekurzívne algoritmy ...

  17. Strom aritmetického výrazu • Príklad použitia binárnych stromov • List: reprezentuje číselnú hodnotu / premennú • Vnútorný vrchol: reprezentuje binárnu operáciu • Vyhodnotenie uzla operácie: • Vyhodnoť ľavý podstrom • Vyhodnoť pravý podstrom • Aplikuj operáciu • Postorder prechod produkuje výraz v postfixovej notácii

  18. Binárne vyhľadávacie stromy (BVS) • BVS slúži na uloženie dynamicky sa meniacejmnožiny hodnôt • „Chytrým“ uložením hodnôt vieme dosiahnuť rýchle vykonávanie operácií • Základná idea: • Každá hodnota uložená v ľavom podstrome vrcholu je menšia ako hodnota vo tomto vrchole • Každá hodnota uložená v pravom podstrome vrcholu je väčšia ako hodnota vo tomto vrchole

  19. Príklad BVS 8 3 10 1 6 14 7 4 13

  20. Výhody BVS • Rýchle zistenie, či hodnota je v BVS: • Pri vyhľadávaní nemusíme pozerať do oboch podstromov, ale na základe hľadanej hodnoty a hodnoty vrcholu, v ktorom sa nachádzame, viemepokračovať v správnompodstrome • Rýchle zistenie minimálnej(stále vľavo) a maximálnej (stále vpravo) hodnoty • Inorder prechod vytvára utriedenú postupnosť prvkov BVS stromu

  21. Zistenie, či BVS obsahuje zadanú hodnotu publicboolean inBVS(int value) { if (content == value) returntrue; if (value < content) return (left != null) ? left.inBVS(value) : false; else return (right != null) ? right.inBVS(value) : false; }

  22. Vloženie vrcholu do BVS • Simulátor: • http://people.ksp.sk/~kuko/bak/index.html • Nájdeme správnu pozíciu pre vkládaný vrchol (tak ako keď zisťujeme, či graf obsahuje danú hodnotu) a na tej vytvoríme nový vrchol

  23. Odstránenie vrcholu z BVS (1) • Najkomplikovanejšia operácia pri práci s BVS • Ak je odstráňovaný vrchol listom, tak len upravíme referenciu o rodiča • Ak má odstraňovaný vrchol len jedného potomka, tak referenciu na neho u rodiča nahradíme referenciou na potomka • Ak má odstraňovaný vrchol dvoch potomkov, potom: • Vyberieme najmenšiu hodnotu v pravom podstrome a presunieme ju do odstraňovaného vrcholu • V pravom podstrome odstránime najmenšiu hodnotu

  24. Odstránenie vrcholu z BVS (2) • Odstránenie je komplikované, pretože sa treba vysporiadať s možným narušením vlastnosti BVS (simulácie a programovanie)

  25. Časová zložitosť operácii v BVS • Každá z operácií (contains, delete, insert) v BVS má zložitosť O(h), kde h je aktuálna hĺbka stromu • n – počet vrcholov BVS • V ideálnom prípade je h = O(log n) • V najhoršom prípade je h = O(n) • Otázka: pri akej postupnosti vkladaných hodnôt vzniká ideálny prípad a pri akej najhorší prípad ?

  26. Lineárna hĺbka 5 8 3 8 6 9 5 2 4 6 Logaritmická hĺbka 2

  27. Samovyvažovacie BVS • BVS je dobrá štruktúra, ak je strom vyvážený • Samovyvažovacie BVS • Chytré algoritmy zabezpečujúce, že ak sa naruší vyváženosť, tak sa sériou niekoľkých operácií (rotácií) strom opäť vyváži • Časová zložitosť opravy narušenia vyváženosti je O(h)– t.j. rovnaká ako zložitosť modifikujúcej operácie • AVL stromy, RB-stromy(červeno-čierne), … • Trieda java.util.TreeSetinterne ukladá hodnoty v (samovyvažovacom) RB-strome

  28. Ďalšie zaujímavosti • V binárnom strom ide uložiť všeobecné stromy: • namiesto referencií na 2 synov sa pamätá referencia na prvého („najstaršieho“) syna a referencia na súrodenca • V databázach sa na indexovanie (zrýchlenie vyhľadávania) využívajúB-stromy, kde v každom vrchole je uložených veľa hodnôt

  29. Ďakujem za pozornosť Otázky???

More Related