Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Teoretická informatika Tomáš Foltýnek Stromy.

Podobné prezentace


Prezentace na téma: "Teoretická informatika Tomáš Foltýnek Stromy."— Transkript prezentace:

1 Teoretická informatika Tomáš Foltýnek Stromy

2 Teoretická informatika Opakování Co je to graf? Co je to sled, tah, cesta? Co je to eulerovský a hamiltonovský graf? Co je to (slabě / silně) souvislý graf? Co je to izomorfismus grafů? Co je to matice sousednosti? Co je to matice incidence? Jak jinak lze implementovat graf? strana 2

3 Teoretická informatika Definice pojmů Graf bez kružnic (acyklický graf) se nazývá les Souvislý les se nazývá strom Les je tedy takový graf, jehož každou komponentou je strom Stromy mohou být –neorientované –orientované (kořenové)

4 Teoretická informatika Vlastnosti stromů Je dán strom G = (U, H, f). Pak |H| = |U| – 1 –důkaz indukcí přes počet uzlů stromu Mezi každými dvěma uzly stromu vede jediná cesta Přidáním jedné nové hrany do stromu vznikne kružnice (právě jedna) Každý uzel stromu je artikulace, každá hrana stromu je most Strom je minimální souvislý graf na daných vrcholech strana 4

5 Teoretická informatika Neorientované stromy Uzel se stupněm 1 nazveme list. Každý strom obsahuje alespoň jeden list –v grafu, kde stupeň každého uzlu ≥ 2 musí existovat kružnice Graf vzniknuvší ze stromu odstraněním libovolného listu a s ním incidentní hrany, je opět strom. strana 5

6 Teoretická informatika Kořenový strom I. Orientovaný strom je graf, jehož symetrizace je strom. Jestliže vybereme jeden uzel, který nazveme kořen, a všechny hrany jsou orientovány směrem od kořene, získáváme kořenový strom. Pro daný uzel pak hovoříme o –předchůdcích (rodičích) –následnících (potomcích) –sousedech (sourozencích) Uzel bez potomků se nazývá list –vstupní stupeň = 1, výstupní stupeň = 0

7 Teoretická informatika Kořenový strom II. Vzdálenost uzlu od kořene se nazývá výška uzlu. Výška stromu je výška uzlu (listu) s největší výškou. Liší-li vzdálenost (délka cesty) mezi kořenem a všemi listy nejvýše o 1, mluvíme o vyváženém stromu

8 Teoretická informatika Aplikace stromů Uzlově ohodnocený strom Binární vyhledávací strom –složitost vyhledávání je log(n) a ne n je-li strom vyvážený Řazení algoritmem heap-sort –časová složitost n*log(n) Kódování –Morse, Huffmann, …

9 Teoretická informatika Binární vyhledávací strom Binární vyhledávací strom (BST) je uspořádaný binární uzlově ohodnocený strom, v němž pro každý uzel platí –hodnoty v levém podstromu jsou menší, než hodnota v daném uzlu –hodnoty v pravém podstromu jsou větší, než hodnota v daném uzlu –někdy připouštíme i rovnost, ale jen v 1 směru Algoritmy: –vyhledání uzlu –přidání uzlu –odebrání uzlu

10 Teoretická informatika BVS: Vyhledávání Sekvenčně: v := T (kořen) while (v ≠ NULL) and (v.key ≠ k) do if k

11 Teoretická informatika AVL stromy Pojmenován po autorech –Adelson-Velskii a Landis Samovyvažující binární vyhledávací strom Pro každý uzel platí –v levém podstromu jsou menší klíče –v pravém podstromu jsou větší klíče –výška levého a pravého podstromu se liší nejvýše o 1 U každého uzlu koeficient vyváženosti –rozdíl výšek levého a pravého podstromu

12 Teoretická informatika Vkládání uzlu do AVL stromu Vložíme uzel jako v BVS Aktualizujeme koeficienty vyváženosti Provedeme vyvážení pomocí cyklických záměn ukazatelů –levá nebo pravá rotace: novým kořenem se stává kořen vyššího podstromu –maximálně dvě (protisměrné) rotace na jedno vložení

13 Teoretická informatika Vyvažování AVL stromu: levá rotace Pravý podstrom o 2 vyšší než levý –v pravém podstromu je vyšší pravý podstrom Analogicky pravá rotace strana 13 zdroj: wikipedia

14 Teoretická informatika Vyvažování AVL stromu: dvojitá rotace Pravý podstrm o 2 vyšší než levý –v pravém podstromu vyšší levý podstrom Analogicky opačné rotace strana 14

15 Teoretická informatika Rušení uzlu z AVL stromu Je-li rušený uzel list, odebereme jej Není-li, je třeba jej nahradit nejlevějším uzlem pravého podstromu nebo nejpravějším uzlem levého podstromu –Ten může mít maximálně 1 podstrom; jeho kořen jde na místo zrušeného uzlu Aktualizujeme koeficienty vyváženosti až ke kořeni –V případě potřeby provedeme vyvážení

16 Teoretická informatika Halda (heap) Statická reprezentace prioritního stromu –zleva úplný vyvážený binární strom –každý uzel nese vyšší hodnotu, než všichni jeho potomci –maximální hodnota je tedy v kořeni Pole, v němž jsou uzly určeny indexy –kořen má index 0 –levý potomek uzlu s indexem n má index 2n+1 –pravý potomek uzlu s indexem n má index 2n+2 –rodič uzlu s indexem n má index [(n-1)/2] Halda šetří místo, protože není potřeba ukládat ukazatele strana 16

17 Teoretická informatika Vkládání do haldy Vložíme nový uzel na nejbližší volnou pozici tak, aby strom zůstal zleva úplný Dokud má vkládaný uzel větší prioritu, než jeho rodič, vyměníme je –“probubláváme” s uzlem směrem nahoru na správné místo Maximální počet výměn je h = log 2 n strana 17

18 Teoretická informatika Vybírání z haldy Vždy vybíráme kořen –protože má nejvyšší prioritu Na jeho místo vložíme nejpravější list (L) maximální výšky –kvůli zachování levé úplnosti stromu Dokud má L nižší prioritu než některý z jeho potomků, vyměníme jej s potomkem vyšší priority –“probubláváme” s uzlem směrem dolů Maximální počet výměn je h = log 2 n strana 18

19 Teoretická informatika Heap sort Řazení haldou Vybudování haldy vložením všech prvků –n*log(n) Postupné odebírání kořene a rekonstrukce haldy –n*log(n)


Stáhnout ppt "Teoretická informatika Tomáš Foltýnek Stromy."

Podobné prezentace


Reklamy Google