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

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

Stromy.

Podobné prezentace


Prezentace na téma: "Stromy."— Transkript prezentace:

1 Stromy

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

3 Graf bez kružnic (acyklický graf) se nazývá les
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 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

5 Uzel se stupněm 1 nazveme list.
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.

6 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 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 Uzlově ohodnocený strom Binární vyhledávací strom
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 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 BVS: Vyhledávání Vstup: strom T, klíč k
Výstup: ukazatel na uzel s klíčem k nebo NULL Sekvenčně: Rekurzivní BSTsearch(v,k): v := T (kořen) if v = NULL then return NULL while (v ≠ NULL) and (v.key ≠ k) do else if v.key = k then return v else if k<v.key then return BSTsearch(v.left, k) if k<v.key then v := v.left; else v := v.right; else return BSTsearch(v.right, k) return v; Otázka: Jak implementovat vkládání a rušení uzlu?

11 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 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 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 zdroj: wikipedia

14 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

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

17 Dokud má vkládaný uzel větší prioritu, než jeho rodič, vyměníme je
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 = log2n

18 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 = log2n

19 Vybudování haldy vložením všech prvků
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


Stáhnout ppt "Stromy."

Podobné prezentace


Reklamy Google