1. Vyhledávací stromy
|
|
- Rostislav Konečný
- před 9 lety
- Počet zobrazení:
Transkript
1 1. Vledávací strom V minulé kapitole jsme se vdali po stopě datovýc struktur pro efektivní reprezentaci množin a slovníků. To nás nní dovede k různým variantám vledávacíc stromů. Začneme těmi binárními, ale později zjistíme, že se může odit uvažovat o stromec obecněji Binární vledávací strom Jak jsme viděli, uspořádané pole umí rcle vledávat, ale veškeré změn trvají dlouo. Pokusíme se proto od pole přejít k obecnější struktuře, která bude pružnější. Zavzpomínejme, jak se ledá v uspořádaném poli. Zvolíme prvek uprostřed pole, porovnáme o s ledaným a podle výsledku porovnání se zaměříme buďto na levý nebo na pravý interval. Tam opakujeme stejný algoritmus. Jelikož velikosti intervalů klesají eponenciálně, zastavíme se po O(log n) krocíc. Možné průbě vledávání můžeme popsat stromem. Kořen stromu odpovídá prvnímu porovnání: obsauje prostřední prvek pole a má dva sn levéo a pravéo. Ti odpovídají dvěma možným výsledkům porovnání: pokud je ledaná odnota menší, jdeme doleva; pokud větší, tak doprava. Následující vrcol nám řekne, jaké další porovnání máme provést, a tak dále až do dob, kd buďto nastane rovnost (takže jsme našli), nebo se pokusíme přejít do neeistujícío vrcolu (takže ledaná odnota v poli není). Pro úspěšné vledávání přitom nepotřebujeme, abcom z každéo intervalu vbrali právě ten prostřední prvek. Pokud bcom volili jinak, dostaneme odlišný strom. Pomocí něj také půjde ledat, jen možná pomaleji to je vidět na následujícím obrázku. Fi! 7 4 v l(v) r(v) (v) L(v) R(v) 9 T (v) Obr. 1.1: Dva binární vledávací strom a jejic značení Co všecno musí strom splňovat, ab se podle něj dalo ledat, přetavíme do nasledujícíc definic. Fi: Zmínit rozodovací strom z kapitol o třídění
2 Definice: Strom T nazveme binární, pokud je zakořeněný a každý vrcol v V (T ) má nejvýše dva sn, u nicž rozlišujeme, který je levý a který pravý. Definice: Pro vrcol v binárnío stromu T značíme: l(v) a r(v) levý a pravý sn vrcolu v L(v) a R(v) levý a pravý podstrom vrcolu v T (v) podstrom obsaující vrcol v a všecn jeo potomk (v) loubka stromu T (v), čili maimum z délek cest z v do listů Pokud vrcol nemá levéo sna, položíme l(v) = a podobně pro r(v) a p(v). Pak se odí dodefinovat, že T ( ) je prázdný strom a ( ) = 1. Definice: Binární vledávací strom (BVS) je binární strom, jeož každému vrcolu v přiřadíme unikátní klíč k(v) z universa. Přitom musí pro každý vrcol v platit: Kdkoliv u L(v), pak k(u) < k(v). Kdkoliv u R(v), pak k(u) > k(v). Operace s BVS Pomocí vledavacíc stromů můžeme přirozeně reprezentovat množin: klíče uložené ve vrcolec budou odpovídat prvkům množin. kdbcom místo množin ctěli slovník, přidáme do vrcolu odnotu přiřazenou danému klíči. Nní ukážeme, jak provádět jednotlivé množinové operace. Jelikož strom jsou definované rekurzivně, je přirozené zacázet s nimi rekurzivními funkcemi. Dobře je to vidět na následující funkci, která vpíše všecn prvk množin. Definice BVS nám dokonce zaručuje, že budou vpsán v pořadí od nejmenšío k největšímu. Procedura BvsSow Vstup: Kořen BVS v 1. Pokud v =, jedná se o prázdný strom a ned skončíme. 2. Zavoláme BvsSow(l(v)). 3. Vpíšeme klíč uložený ve vrcolu v. 4. Zavoláme BvsSow(r(v)). Funkce BvsFind slouží k nalezení vrcolu s daným klíčem. Procází stromem od kořene a každý vrcol v porovná s. Pokud je < k(v), pak se podle definice nemůže nacázet v pravém podstromu, takže pokračujeme doleva. Je-li naopak > k(v), nic nepokazíme krokem doprava. V konečném čase proto buďto najdeme, nebo vloučíme všecn možnosti, kde b se molo nacázet. BvsFind formulujeme jako rekurzivní funkci, kterou vžd voláme na kořen nějakéo podstromu a vrátí nám nový kořen. Procedura BvsFind Vstup: Kořen BVS v, ledaný klíč 1. Pokud v =, vrátíme. 2. Pokud = k(v), vrátíme v
3 3. Pokud < k(v), vrátíme BvsFind(l(v), ). 4. Pokud > k(v), vrátíme BvsFind(r(v), ). Výstup: Vrcol s klíčem, anebo. Minimum z prvků množin spočteme snadno: půjdeme stále doleva, dokud to jde. Klíče menší než ten aktuální se totiž moou nacázet pouze v levém podstromu. Procedura BvsMin Vstup: Kořen BVS v 1. Pokud l(v) =, vrátíme vrcol v. 2. Jinak vrátíme BvsMin(l(v)). Výstup: Vrcol obsaující nejmenší klíč Vkládání novéo prvku funguje velmi podobně jako vledávání s tím rozdílem, že v okamžiku, kd b vledávací algoritmus měl přejít do neeistujícío vrcolu, tento nový vrcol vtvoříme a vložíme do něj vkládaný prvek. Rozmslíme si, že toto je jediné místo, kde podle definice nový prvek smí ležet. Procedura BvsInsert Vstup: Kořen BVS v, vkládaný klíč 1. Pokud v =, vtvoříme nový vrcol v s klíčem. 2. Pokud < k(v), položíme l(v) BvsInsert(l(v), ). 3. Pokud > k(v), položíme r(v) BvsInsert(r(v), ). 4. Pokud = k(v), klíč se ve stromu již nacází, není třeba nic měnit. Výstup: Nový kořen v Při mazání může nastat několik různýc případů. Necť v je vrcol, který cceme smazat. Je-li v list, můžeme tento list prostě odstranit, čímž vlastně provedeme operaci opačnou k BvsInsertu. Má-li v právě jednoo sna, postačí v naradit tímto snem. Ošemetný je případ se dvěma sn. Ted totiž nemůžeme v jen tak smazat, jelikož b tto sn neblo kam připojit. Proto nalezneme následníka vrcolu v, což je nejlevější vrcol v pravém podstromu. Ten má nejvýše jednoo sna, takže o smažeme místo v a jeo odnotu přesuneme do v. Procedura BvsDelete Vstup: Kořen BVS v, mazaný klíč 1. Pokud v =, vrátíme. (Klíč ve stromu nebl.) 2. Pokud < k(v), položíme l(v) BvsDelete(l(v), ). 3. Pokud > k(v), položíme r(v) BvsDelete(r(v), ). 4. Pokud = k(v): (Cstáme se smazat vrcol v.) 5. Pokud l(v) = r(v) =, vrátíme. (Bl to list.) 6. Pokud l(v) =, vrátíme r(v). (Eistoval jen pravý sn.) 7. Pokud r(v) =, vrátíme l(v). (Eistoval jen levý sn.) 8. s BvsMin(r(v)) (Máme oba sn: nalezneme následníka s.)
4 9. k(v) k(s). 10. r(v) BvsDelete(r(v), s) 11. Vrátíme v. Výstup: Nový kořen v Vváženost stromů Zamsleme se nad složitostí stromovýc operací pro strom na n vrcolec. BvsSow projde všecn vrcol a v každém stráví konstantní čas, takže běží v čase Θ(n). Ostatní operace projdou po nějaké cestě od kořene směrem k listům, a to buďto jednou, nebo (v nejsložitějším případě BvsDelete) dvakrát. Jejic časová složitost proto bude Θ(loubka stromu). Hloubka přitom závisí na tom, jak moc je strom košatý. V příznivém případě vjde smpatickýc O(log n), ovšem dalšími operacemi může může strom degenerovat. Například začneme-li s prázdným stromem a postupně vložíme klíče 1,..., n v tomto pořadí, vznikne liána loubk Θ(n). Budeme se proto snažit strom vvažovat, ab jejic loubka příliš nerostla. Zkusme se opět držet paralel s binárním vledáváním. Definice: Binární vledávací strom nazveme dokonale vvážený, pokud pro každý jeo vrcol v platí L(v) P (v) 1. Jinými slov velikost levéo a pravéo podstromu se smí lišit nejvýše o 1 vrcol. Pozorování: Dokonale vvážený strom má loubku log 2 n, jelikož na kterékoliv cestě z kořene do listu velikost podstromů s každým krokem klesá alespoň dvakrát. Dokonale vvážený strom ted zaručuje rclé vledávání. Navíc pokud všecn prvk množin známe předem, můžeme si takový strom snadno pořídit: z uspořádané posloupnosti o vtvoříme v lineárním čase (viz cvičení 3). Tím boužel dobré zpráv končí: ukážeme, že po vložení nebo smazání vrcolu nelze dokonalou vváženost obnovit rcle. Věta: Pro každou implementaci operací Insert a Delete v dokonale vváženém stromu platí, že buď Insert nebo Delete trvá Ω(n). Důkaz: Nejprve si představíme, jak bude vpadat dokonale vvážený BVS s klíči 1,..., n, kde n = 2 k 1. Sledujme obrázek 1.2. Tvar stromu je určen jednoznačně: Kořenem musí být prostřední z klíčů (jinak b se levý a pravý podstrom kořene lišil o více než 1 vrcol). Levý a pravý podstrom proto mají právě (n 1)/2 = 2 k 1 1 vrcolů, takže jejic kořen jsou opět určen jednoznačně a tak dále. Navíc si všimneme, že všecna licá čísla jsou umístěna v listec stromu. Nní na tomto stromu provedeme následující posloupnost operací: Insert(n + 1), Delete(1), Insert(n + 2), Delete(2),
5 Obr. 1.2: Dokonale vvážený BVS Po provedení i-té dvojice operací bude strom obsaovat odnot i + 1,..., i + n. Podle too, zda je i sudé nebo licé, se budou v listec nacázet buď všecna sudá, nebo všecna licá čísla. Pokaždé se proto všem vrcolům změní, zda jsou list, na což je potřeba upravit Ω(n) ukazatelů. Ted aspoň jedna z operací Insert a Delete trvá Ω(n). Cvičení 1. Rekurze je pro operace s BVS přirozená, ale v některýc programovacíc jazcíc je pomalejší než občejný cklus. Navrněte, jak operace s BVS naprogramovat nerekurzivně. 2. Místo vrcolu se dvěma sn jsme mazali jeo následníka. Samozřejmě bcom si místo too moli vbrat předcůdce. Jak b se algoritmus změnil? 3. Navrněte algoritmus, který ze setříděnéo pole vrobí v lineárním čase dokonale vvážený BVS. 4. Navrněte algoritmus, který v lineárním čase zadaný BVS dokonale vváží. 5**. Vřešte předcozí cvičení tak, ab vám kromě zadanéo stromu stačilo konstantní množství paměti. Pokud nevíte, jak na to, zkuste to nejprve s logaritmickou pamětí. 6. Navrněte algoritmus, který dostane dva BVS T 1 a T 2 sloučí jejic obsa do jedinéo BVS. lgoritmus b měl pracovat v čase O( T 1 + T 2 ). 7. Navrněte operaci BvsSplit, která dostane BVS T a odnotu s, a rozdělí strom na dva BVS T 1 a T 2 takové, že odnot v T 1 jsou menší než s a odnot v T 2 jsou větší než s. 8. Naše tvrzení o náročnosti operací Insert a Delete v dokonale vváženém stromu lze ještě zesílit. Dokažte, že lineární musí být složitost obou operací Hloubkové vvá¾ení: VL strom Zjistili jsme, že dokonale vvážené strom nelze efektivně udržovat. Důvodem je, že jejic definice velmi striktně omezuje tvar stromu, takže i vložení jedinéo klíče může vnutit přebudování celéo stromu. Zavedeme proto o trocu slabší podmínku
6 Definice: Binární vledávací strom nazveme loubkově vvážený, pokud pro každý jeo vrcol v platí (l(v)) (r(v)) 1. Jinými slov loubka levéo a pravéo podstromu se vžd musí lišit nejvýše o jedna. Stromům s loubkovým vvážením se říká VL strom, neboť je vmsleli v roce 1962 ruští matematikové G. M. děľson-veľskij a E. M. Landis. Nní dokážeme, že VL strom mají logaritmickou loubku. Tvrzení: VL strom na n vrcolec má loubku Θ(log n). Důkaz: Nejprve pro každé 0 stanovíme, což bude minimální možný počet vrcolů v VL stromu loubk, a dokážeme, že tento počet roste s loubkou eponenciálně. Pro malá stačí rozebrat možné případ podle obrázku = 1 1 = 2 2 = 4 3 = 7 = Obr. 1.3: Minimální VL strom pro loubk 0 až 3 a obecný případ Pro větší uvažujme, jak může minimální VL strom o ladinác vpadat. Jeo kořen musí mít dva podstrom, jeden z nic loubk 1 a druý loubk 2 (kdb měl také 1, měl b zbtečně mnoo vrcolů). Oba tto podstrom musí být minimální VL strom dané loubk. Musí ted platit = To je rekurence podobná té z Fibonaccio posloupnosti. Vskutku: platí = F +3 1, kde F k je k-té Fibonaccio číslo. Z too bcom moli získat eplicitní vzorec pro, ale pro dukaz našeo tvrzení postačí jednodušší asmptotický odad. Dokážeme indukcí, že 2 /2. Jistě je 0 = 4 2 0/2 = 1 a 1 = 2 2 1/2. = Indukční krok pak vpadá následovně: = > = 2 2 ( ) > 2 2. Tím jsme dokázali, že c pro c = 2. Proto VL strom o n vrcolec může mít nejvýše log c n ladin kdb jic měl více, obsaoval b více než c log c n = n vrcolů. Zbývá dokázat, že logaritmická loubka je také nutná. K tomu dojdeme podobně: nalédneme, že největší možný VL strom loubk je úplný binární strom s vrcol. Tudíž minimální možná loubka VL stromu je Ω(log n)
7 Vvažování rotacemi Jak budou vpadat operace na VL stromec? Find bude totožný. Operace Insert a Delete začnou stejně jako u obecnéo BVS, ale poté ještě ověří, zda strom zůstal loubkově vvažený, a případně zasánou, ab se vváženost obnovila. bcom poznali, kd je zása potřeba, budeme v každém vrcolu v udržovat číslo δ(v) = (r(v)) (l(v)). To je takzvané znaménko vrcolu, které v korektním VL stromu může nabývat jen těcto odnot: δ(v) = 1 (pravý podstrom je lubší) takový vrcol značíme, δ(v) = 1 (levý podstrom lubší) značíme, δ(v) = 0 (oba podstrom stejně luboké) značíme. Jakmile narazíme na jiné δ(v), strom opravíme provedením jedné nebo více rotací. Rotace je operace, která otočí ranu mezi dvěma vrcol a přepojí jejic podstrom tak, ab bli i nadále snové vzledem k otcům správně uspořádáni. To lze provést jediným způsobem, který najdete na obrázku 1.4. Často také potkáme dvojitou rotaci z obrázku 1.5. Tu lze složit ze dvou jednoducýc rotací, ale bývá přelednější uvažovat o ní vcelku jako o překořenění celé konfigurace za vrcol. C B B C Obr. 1.4: Jednoducá rotace z z D B C D B C Obr. 1.5: Dvojitá rotace Vkládání do stromu Nový prvek vložíme jako list se znaménkem. Tím se z prázdnéo podstromu loubk 1 stal jednovrcolový podstrom loubk 0, takže může být potřeba přepočítat znaménka na cestě ke kořeni
8 Proto se budeme vracet do kořene a propagovat do vššíc pater informaci o tom, že se podstrom proloubil. (To můžeme elegantně provést běem návratu z rekurze v proceduře BvsInsert.) Ukážeme, jak bude vpadat jeden krok. Necť do nějakéo vrcolu přišla z jeo sna informace o proloubení podstromu. Bez újm na obecnosti se jednalo o levéo sna v opačném případě provedeme vše zrcadlově a proodíme roli znamének a. Rozlišíme několik případů. Případ 1: Vrcol měl znaménko. Hloubka levéo podstromu se právě vrovnala s loubkou pravéo, čili znaménko se změní na. Hloubka podstromu T () se nezměnila, takže propagování informace ukončíme. Případ 2: Vrcol měl znaménko. Znaménko se změní na. Hloubka podstromu T () vzrostla, takže v propagování musíme pokračovat. Případ 3: Vrcol měl znaménko, ted teď získá δ(v) = 2. To definice VL stromu nedovoluje, takže musíme strom vvážit. Označme vrcol, z nějž přišla informace o proloubení, čili levéo sna vrcolu. Rozebereme případ podle jeo znaménka. Případ 3a: Vrcol má znaménko. Situaci sledujme na obrázku. Označíme-li loubku podstromu C, podstrom T () má loubku +2, takže podstrom má loubku +1 a podstrom B loubku. Provedeme rotaci ran. Tím získá vrcol znaménko, podstrom T () loubku + 1, vrcol znaménko a podstrom T () loubku + 2. Jelikož před započetím operace Insert měl podstrom T () loubku + 2, z poledu vššíc pater se nic nezměnilo. Propagování ted opět zastavíme B C B C + 1 Případ 3b: Vrcol má znaménko. Sledujme opět obrázek. Označíme z pravéo sna vrcolu (uvědomte si, že musí eistovat)
9 Označíme jednotlivé podstrom tak jako na obrázku a spočítáme jejic loubk. Referenční loubku zvolíme podle podstromu D. Hloubk znamenají buď nebo 1. Provedeme dvojitou rotaci, která celou konfiguraci překoření za vrcol z. Přepočítáme loubk a znaménka. Vrcol bude mít znaménko buď nebo, vrcol buď nebo, každopádně oba podstrom T () a T () získají loubku +1. Proto vrcol z získá znaménko. Před započetním Insertu činila loubka celé konfigurace +2, nní je také + 2, takže propagování zastavíme B z 2 C D + 1 z B C D Případ 3c: Vrcol má znaménko. Tento případ je ze všec nejjednodušší nemůže totiž nikd nastat. Z vrcolu se znaménkem se informace o proloubení v žádném z předcozíc případů nešíří. Mazání ze stromu Budeme postupovat obdobně jako u Insertu: vrcol smažeme podle původnío algoritmu BvsDelete a po cestě zpět do kořene propagujeme informaci o snížení loubk podstromu. Připomeňme, že pokaždé mažeme list nebo vrcol s jediným snem, takže stačí propagovat od místa smazanéo vrcolu naoru. Opět popíšeme jeden krok propagování. Necť do vrcolu přišla informace o snížení loubk podstromu, bez újm na obecnosti z levéo sna. Rozlišíme následující případ. Případ 1: Vrcol má znaménko. Hloubka levéo podstromu se právě vrovnala s loubkou pravéo, znaménko se mění na. Hloubka podstromu T () se snížila, takže pokračujeme v propagování. Případ 2: Vrcol má znaménko. Znaménko se změní na. Hloubka podstromu T () se nezměnila, takže propagování ukončíme
10 Případ 3: Vrcol má znaménko. Ted se jeo znaménko změní na +2 a musíme vvažovat. Rozebereme tři případ podle znaménka pravéo sna vrcolu. (Všimněte si, že na rozdíl od vvažování po Insertu to musí být opačný sn než ten, ze kteréo přišla informace o změně loubk.) Případ 3a: Vrcol má také známénko. Označíme-li loubku podstromu, bude mít T () loubku + 2, takže C loubku + 1 a B loubku. Provedeme rotaci ran. Tím vrcol získá znaménko, podstrom T () loubku + 1, takže vrcol dostane také znaménko. Před započetím Delete měl podstrom T () loubku + 3, nní má T () loubku + 2, takže z poledu vššíc ladin došlo ke snížení loubk. Proto změnu propagujeme dál B + C B C + 1 Případ 3b: Vrcol má znaménko. Necť je loubka podstromu. Pak T () má loubku + 2 a B i C loubku + 1. Provedeme rotaci ran. Vrcol získává znaménko, podstrom T () loubku + 2, takže vrcol obdrží znaménko. Hloubka podstromu T () před začátkem Delete činila + 3, nní má podstrom T () loubku také + 3, pročež propagování ukončíme B C B + 1 C + 1 Případ 3c: Vrcol má znaménko. Označíme z levéo sna vrcolu
11 Označíme podstrom podle obrázku a spočítáme jejic loubk. Referenční loubku zvolíme opět podle. Hloubk znamenají buď nebo 1. Provedeme dvojitou rotaci, která celou konfiguraci překoření za vrcol z. Přepočítáme loubk a znaménka. Vrcol bude mít znaménko buď nebo, buď nebo. Podstrom T () a T () budou každopádně luboké + 1. Proto vrcol z obdrží znaménko. Původní loubka podstromu T () před začatkem Delete činila + 3, nní loubka T (z) činí + 2, takže propagujeme dál z D B C + 2 z B C D Složitost operací Dokázali jsme, že loubka VL stromu je vžd O(log n). Původní implementace operací BvsFind, BvsInsert a BvsDelete ted pracují v logaritmickém čase. Po BvsInsert a BvsDelete ještě musí následovat vvážení, které se ovšem vžd vrací po cestě do kořene a v každém vrcolu provede O(1) operací, takže celkově také trvá O(log n). Cvičení 1. Dokažte, že pro minimální velikost k VL stromu loubk k platí vzta k = F k+3 1 (kde F n je n-té Fibonaccio číslo). Z too odvoďte přesný vzorec pro minimální a maimální možnou loubku VL stromu na n vrcolec. 2. Při vvažování po Insertu jsme se nemuseli zabývat případem 3c proto, že z se informace o proloubení nikd nešíří. Nemůžeme stejným způsobem dokázat, že případ 3b také nikd nenastane? (Pozor, cták!) 3. Upravte VL strom tak, ab dokázal pro libovolné k najít k-tý nejmenší prvek. Pokud doplníte nějaké další informace do vrcolů stromu, nezapomeňte, že je musíte udržovat i při vvažování Více klíèù ve vrcolec: (a,b)-strom Nní prozkoumáme obecnější variantu vledávacíc stromů, která připouští proměnlivý počet klíčů ve vrcolec. Tím si sice trocu zkomplikujeme úva
12 o struktuře stromů, ale za odměnu získáme přímočařejší vvažovací algoritm bez složitéo rozboru případů. Definice: Obecný vledávací strom je zakořeněný strom s určeným pořadím snů každéo vrcolu. Vrcol dělíme na vnitřní a vnější, přičemž platí: Vnitřní (interní) vrcol obsaují klíče, v každém obecně jiný počet. Pokud vrcol obsauje klíče 1 <... < k, pak má k + 1 snů, které označíme s 0,..., s k. Klíče slouží jako oddělovače odnot v podstromec, čili platí: T (s 0 ) < 1 < T (s 1 ) < 2 <... < k 1 < T (s k 1 ) < k < T (s k ), kde T (s i ) značí množinu všec klíčů z danéo podstromu. Často se odí dodefinovat 0 = a k+1 = +, ab nerovnost i < T (s i ) < i+1 platila i pro krajní sn. Vnější (eterní) vrcol neobsaují žádná data a nemají žádné potomk. Jsou to ted list stromu. Na obrázku je značíme jako malé čtverečk, v programu je můžeme reprezentovat nulovými ukazateli (NULL v jazku C, nil v Pascalu). Podobně jako BVS, i obecné vledávací strom moou degenerovat. Přidáme proto další podmínk pro zajištění vváženosti. Definice: (a,b)-strom pro parametr a 2, b 2a 1 je obecný vledávací strom, pro který navíc platí: 1. Kořen má 2 až b snů, ostatní vnitřní vrcol a až b snů. 2. Všecn vnější vrcol jsou ve stejné loubce. Požadavk na a a b moou vpadat tajemně, ale jsou snadno splnitelné a později vplne, proč jsme je potřebovali. Ccete-li konkrétní příklad, představujte si ten nejmenší možný: (2, 3)-strom. Vše ovšem budeme odvozovat obecně. Přitom budeme předpokládat, že a a b jsou konstant, které se moou scovat do O. Později prozkoumáme, jaký vliv má volba těcto parametrů na vlastnosti struktur. Nní začneme odadem loubk. Lemma: (a, b)-strom s n klíči má loubku Θ(log n). Důkaz: Počítejme minimální počet klíčů m ve stromu loubk 1. Vrcol budou obsaovat minimální povolené počt klíčů a rozdělíme je podle loubk do ladin: na 0-té ladině je kořen se dvěma klíči, na -té leží list bez klíčů, na mezilelýc ladinác ostatní vnitřní vrcol s a 1 klíči. Na i-té ladině bude ted ležet 2 a i 1 vrcolů. Sečtením přes ladin získáme: 1 2 m = 1 + (a 1) 2 a i 1 = (a 1) a j. i=1 Sečteme-li geometrickou řadu v poslední sumě, dostaneme: m = (a 1) a 1 1 a 1 j=0 = (a 1 1) = 2a
13 Víme ted, že minimální počet klíčů roste s loubkou eponenciálně. Proto maimální loubka musí s počtem klíčů růst nejvýše logaritmick. (Srovnejte s výpočtem maimální loubk VL stromů.) Podobně spočítáme, že maimální počet klíčů M roste také eponenciálně, takže minimální možná loubka je také logaritmická. Tentokrát uvážíme strom, jeož všecn vnitřní vrcol včetně kořene obsaují nejvšší povolený počet b 1 klíčů: Hledání klíče 1 M = (b 1) b i = (b 1) b 1 b 1 = b 1. i=0 Hledání klíče v (a, b)-stromu probíá podobně jako v BVS: začneme v kořeni a v každém vnitřním vrcolu se porovnáváním s jeo klíči rozodneme, do kteréo podstromu se vdat. Přitom buď narazíme na ledaný klíč, nebo dojdeme až do listu a tam skončíme s nepořízenou. Vkládání do stromu Při vkládání nejprve zkusíme nový klíč vledat. Pokud ve stromu ještě není přítomen, skončíme v nějakém listu. Nabízí se změnit list na vnitřní vrcol přidáním jednoo klíče a dvou listů jako snů. Tím bcom ovšem porušili aiom o stejné loubce listů. Raději se proto zaměříme na otce nalezenéo listu a vložíme klíč do něj. To nás donutí přidat jednoo sna, ale jelikož ostatní snové jsou list, i tento může být list. Pokud jsme přidáním klíče vrcol nepřeplnili (má nadále nejvýš b 1 klíčů), jsme otovi. Pakliže jsme vrcol přeplnili, rozdělíme jeo klíče mezi dva nové vrcol, přibližně napůl. K nadřazenému vrcolu ovšem musíme místo jednoo sna připojit dva nové, takže v nadřazeném vrcolu musí přibýt klíč. Proto přeplněný vrcol raději rozdělíme na tři části: prostřední klíč, který budeme vkládat o patro výš, a levou a pravou část, z nicž se stanou nové vrcol. Tím jsme vložení klíče do aktuálnío vrcolu převedli na tutéž operaci o patro výš. Tam může opět dojít k přeplnění a následnému štěpení vrcolu a tak dále, možná až do kořene. Pokud rozštěpíme kořen, vtvoříme nový kořen s jediným klíčem a dvěma sn (zde se odí, že jsme kořeni dovolili mít méně než a snů) a celý strom se o ladinu proloubí. Naše ukázková implementace má podobu rekurzivní funkce BInsert2(v, ), která dostane za úkol vložit do podstromu s kořenem v klíč. Jako výsledek vrátí trojici (p,, q), pokud došlo k štěpení vrcolu v na vrcol p a q oddělené klíčem, anebo, pokud v zůstalo kořenem podstromu. Hlavní procedura BInsert navíc ošetřuje případ štěpení kořene. Obr
14 Procedura BInsert Vstup: Kořen stromu r, vkládaný klíč 1. t BInsert2(r, ) 2. Pokud t má tvar trojice (p,, q): 3. r nový kořen s klíčem a sn p a q Výstup: Nový kořen r Procedura BInsert2(v, ) Vstup: Kořen podstromu v, vkládaný klíč 1. Pokud v je list, skončíme a vrátíme trojici (l 1,, l 2 ), kde l 1 a l 2 jsou nově vtvořené list. 2. Označíme 1,..., k klíče ve vrcolu v a s 0,..., s k jeo sn. 3. Pokud = i pro nějaké i, skončíme a vrátíme. 4. Najdeme i tak, ab platilo i < < i+1 ( 0 =, k+1 = + ). 5. t BInsert2(s i, ) 6. Pokud t =, skončíme a také vrátíme. 7. Označíme (p,, q) složk trojice t. 8. Mezi klíče i a i+1 vložíme klíč. 9. Sna s i naradíme dvojicí snů p a q. 10. Pokud počet snů nepřekročil b, skončíme a vrátíme. 11. m (b 1)/2 (Došlo k štěpení, volíme prostřední klíč.) 12. Vtvoříme nový vrcol v 1 s klíči 1,..., m 1 a sn s 0,..., s m Vtvoříme nový vrcol v 2 s klíči m+1,..., b a sn s m,..., s b Vrátíme trojici (v 1, m, v 2 ). Zbývá dokázat, že vrcol vznikné štěpením mají dostatečný počet snů. Vrcol v jsme rozštěpili v okamžiku, kd dosál právě b + 1 snů, a ted obsaoval b klíčů. Jeden klíč posíláme o patro výš, takže novým vrcolům v 1 a v 2 přidělíme po řadě (b 1)/2 a (b 1)/2 klíčů. Kdb některý z nic bl podměrečný, muselo b platit (b 1)/2 < a 1, a ted b 1 < 2a 2, čili b < 2a 1. Ejle, podmínka na b v definici (a, b)-stromu bla zvolena přesně tak, ab této situaci zabránila. Mazání ze stromu Cceme-li ze stromu smazat nějaký klíč, nejprve o vledáme. Pokud se nacází na předposlední ladině (té, pod níž jsou už pouze list), můžeme o smazat přímo, jen musíme ošetřit případné podtečení vrcolu. Klíče ležící na vššíc ladinác nemůžeme mazat jen tak, neboť smazáním klíče přicázíme i o místo pro připojení podstromu. To je situace podobná mazání vrcolu se dvěma sn v binárním stromu a vřešíme ji také podobně. Mazaný klíč naradíme jeo následníkem. To je nejlevější vrcol v pravém podstromu, který tudíž leží na předposlední ladině a může být smazán přímo
15 Zbývá ted vřešit, co se má stát v případě, že vrcol v s a sn přijde o klíč, takže už je pod míru. Ted budeme postupovat opačně než při vkládání pokusíme se vrcol sloučit s některým z jeo bratrů. To je ovšem možné provést pouze ted, kdž bratr také obsauje málo klíčů; pokud jic naopak obsauje odně, nějaký klíč si od něj můžeme půjčit. Nní popíšeme, jak to přesně provést. Bez újm na obecnosti předpokládejme, že vrcol v má pravéo bratra b oddělenéo nějakým klíčem o v otci. Pokud b eistoval pouze levý bratr, vbereme too a následující postup provedeme zrcadlově převrácený. Pokud má bratr pouze a snů, sloučíme vrcol v a b do jedinéo vrcolu a přidáme do něj ještě klíč o z otce. Tím vznikne vrcol s (a 2) + (a 1) + 1 = 2a 2 klíči, což není větší než b 1. Problém jsme ted převedli na mazání klíče z otce, což je tentýž problém o ladinu výš. Má-li naopak bratr více jak a snů, odpojíme od něj jeo nejlevějšío sna l a nejmenší klíč m. Poté klíč m přesuneme do otce a klíč o odtamtud přesuneme do v, kde se stane nejpravějším klíčem, za který přepojíme sna l. Poté mají v i b povolené počt snů a můžeme skončit. (Všimněte si, že tato operace je podobná rotaci ran v binárním stromu.) Nní tento postup zapíšeme jako rekurzivní proceduru BDelete2. Ta dostane kořen podstromu a klíč, který má smazat. Jako výsledek vrátí vrátí podstrom s tímtéž kořenem, ovšem možná podměrečným. Hlavní procedura BDelete navíc ošetřuje případ, kd z kořene zmizí všecn klíče, takže je potřeba kořen smazat a tím snížit celý strom o ladinu. Procedura BDelete Vstup: Kořen stromu r a mazaný klíč 1. Zavoláme BDelete2(r, ). 2. Pokud r má jedinéo sna s: 3. Zrušíme vrcol r. 4. r s Výstup: Nový kořen r Obr Procedura BDelete2 Vstup: Kořen podstromu v a mazaný klíč 1. Označíme 1,..., k klíče ve vrcolu v a s 0,..., s k jeo sn. 2. Pokud = i pro nějaké i: (Našli jsme) 3. Pokud s i je list: (Jsme na předposlední ladině.) 4. Odstraníme z v klíč i a list s i. 5. Skončíme. 6. Jinak: (Jsme výš, musíme narazovat.) 7. m minimum podstromu s kořenem s i 8. i m 9. Zavoláme BDelete2(s i, m)
16 10. Jinak: (Mažeme z podstromu.) 11. Najdeme i takové, ab i < < i+1 ( 0 =, k+1 = + ). 12. Pokud s i je list, skončíme. (Klíč ve stromu není.) 13. Zavoláme BDelete2(s i, ). 14. (Vrátili jsme se z s i a kontrolujeme, zda tento sn není pod míru.) 15. Pokud s i má alespoň a snů, skončíme. 16. Je-li i < k: (Eistuje pravý bratr s i+1.) 17. Pokud má s i+1 alespoň a + 1 snů: (Půjčíme si klíč.) 18. Odpojíme z s i+1 nejmenší klíč m a nejlevějšío sna l. 19. K vrcolu s i připojíme jako poslední klíč i a jako nejpravějšío sna l. 20. i m 21. Jinak: (Slučujeme sn.) 22. Vtvoříme nový vrcol s, který bude obsaovat všecn klíče a sn z vrcolů s i a s i+1 a mezi nimi klíč i. 23. Z vrcolu v odstraníme klíč i a sn s i a s i+1. Tto sn zrušíme a na jejic místo připojíme sna s. 24. Jinak provedeme krok 17 až 23 zrcadlově pro levéo bratra s i 1 místo s i+1. Časová složitost Pro rozbor časové složitosti předpokládáme, že parametr a a b jsou konstant. Hledání, vkládání i mazání proto tráví na každé ladině stromu čas O(1) a jelikož můžeme počet ladin odadnout jako Θ(log n), celková časová složitost všec tří základníc operací činí Θ(log n). Vraťme se nní k volbě parametrů a, b. Především je známo, že se nevplácí volit b výrazně větší než je dolní mez 2a 1 (detail viz cvičení 1). Proto se obvkle používají (a, 2a 1)-strom, případně (a, 2a)-strom. Rozdíl mezi b = 2a 1 a b = 2a se zdá být zcela nepodstatný, ale jak je vidět v cvičeníc 5 a 6, o jedničku větší manévrovací prostor má zásadní vliv na amortizovanou složitost. Pokud cceme datovou strukturu udržovat v klasické paměti, vplácí se volit a co nejnižší. Vodné parametr jsou například (2, 3) nebo (2, 4). Ukládáme-li data na disk, nabízí se vužít too, že je rozdělen na blok. Přečíst celý blok je přitom zruba stejně rclé jako přečíst jediný bte, zatímco skok na jiný blok trvá dlouo. Proto nastavíme a tak, ab jeden vrcol stromu zabíral celý blok. Například pro disk s 4 KB blok, 32-bitové klíče a 32-bitové ukazatele zvolíme (256, 511)-strom. Strom pak bude opravdu mělký: čtři ladin postačí pro uložení více než 33 milionů klíčů. Navíc na poslední ladině jsou pouze list, takže při každém ledání přečteme poué tři blok. V dnešníc počitačíc často mezi procesorem a lavní pamětí leží cace (rclá vrovnávací paměť), která má také blokovou strukturu s tpickou velikostí bloku 64 B. Často se proto i u stromů v lavní paměti volit trocu větší vrcol, ab
17 odpovídal blokům cace. Pro 32-bitové klíče a 32-bitové ukazatele ted použijeme (4, 7)-strom. Jen si musíme dávat pozor na správné zarovnání adres vrcolů na násobk 64 B. Další variant Ve světě se lze setkat i s jinými definicemi (a, b)-stromů, než je ta naše. Často se například dělá to, že data jsou uložena pouze ve vrcolec na drué nejnižší ladině, zatímco ostatní ladin obsaují pouze pomocné klíče, tpick minima z podstromů. Tím si trocu zjednodušíme operace (viz cvičení 3), ale zaplatíme za to všší redundancí dat. Může to nicméně být šikovné, pokud potřebujeme implementovat slovník, který klíčům přiřazuje rozměrná data. V teorii databází a souborovýc sstémů se často ovoří o B-stromec. Pod tímto názvem se skrývají různé datové struktur, většinou (a, 2a 1)-strom nebo (a, 2a)-strom, nezřídka v úpravě dle předcozío odstavce. Cvičení 1. Odalte, jak závisí složitost operací s (a, b)-strom na parametrec a a b. Z too odvoďte, že se nikd nevplatí volit b výrazně větší než 2a. 2*. Naprogramujte (a, b)-strom a změřte, jak jsou na vašem počítači rclé pro různé volb a a b. Projevuje se vliv cace tak, jak jsme naznačili? 3. Rozmslete, jak provádět operace Insert a Delete na variantě (a, b)-stromů, která ukládá užitečná data jen do nejnižšíc vnitřníc vrcolů. nalzujte časovou složitost a srovnejte s naší verzí struktur. 4. Ukažte, že pokud budeme do prázdnéo stromu postupně vkládat klíče 1,..., n, provedeme celkem Θ(n) operací. K tomu potřebujeme pamatovat si, ve kterém vrcolu skončil předcozí vložený klíč, abcom nemuseli pokaždé ledat znovu od kořene. 5. Někd se odí minimalizovat vedle časové složitosti také počet strukturálníc změn stromu běem operace. Tak se říká změnám klíčů a ukazatelů uloženýc ve vrcolec. Ukažte, že pokud v původně prázdném (2, 3)-stromu provedeme n operací Insert, každá z nic provede amortizovaně konstantní počet strukturálníc změn. Zobecněte pro libovolné (a, b)-strom. 6*. Podobně jako v předcozím cvičení budeme počítat strukturální změn, tentokrát pro (2, 4)-strom a libovolnou kombinaci operací Insert a Delete. Ukažte, že nadále jedna operace provede amortizovaně O(1) změn. Zobecněte na (a, 2a)- strom a ukažte, že v (a, 2a 1)-stromec nic takovéo neplatí Èerveno-èerné strom Nní se od obecnýc (a, b)-stromů vrátíme zpět ke stromům binárním. Ukážeme, jak překládat (2, 4)-strom na binární strom, čímž získáme další variantu BVS s logaritmickou loubkou a jednoducým vvažováním. Říká se jí červeno-černé
18 strom (red-black trees, RB strom). M si je předvedeme v trocu neobvklé, ale příjemnější variantě navržené v roce 2008 R. Sedgewickem pod názvem left-leaning red-black trees (LLRB strom). Překlad bude fungovat tak, že každý vrcol (2, 4)-stromu naradíme konfigurací jednoo nebo více binárníc vrcolů. b blo možné rekonstruovat původní (2, 4)- strom, zavedeme barv ran: červené ran budou spojovat vrcol tvořící jednu konfiguraci, černé ran povedou mezi konfiguracemi, čili to budou ran původnío (2, 4)-stromu. Barvu ran si můžeme budeme pamatovat například v jejím spodním vrcolu. Strom přeložíme podle následujícío obrázku. Vrcolům (2, 4)-stromu budeme podle počtu snů říkat 2-vrcol, 3-vrcol a 4-vrcol. 2-vrcol zůstane sám sebou. 3-vrcol naradíme dvěma binárními vrcol, přičemž červená rana musí vžd vést doleva (to je ono LL v názvu LLRB stromů, obecné RB strom nic takovéo nepožadují, což situaci později dost zkomplikuje). 4-vrcol naradíme třešničkou ze tří binárníc vrcolů. z Pokud podle těcto pravidel transformujeme i definici (2, 4)-stromu, vznikne následující definice LLRB stromu. Definice: LLRB strom je binární vledávací strom s vnějšími vrcol, jeož ran jsou obarven červeně a černě. Přitom platí následující aiom: 1. Neeistují dvě červené ran bezprostředně nad sebou. 2. Jestliže z vrcolu vede dolů jediná červená rana, pak vede doleva. 3. List jsou vžd obarven černě. (To se odí, jelikož list jsou pouze virtuálni, takže do nic neumíme barvu ran uložit.) 4. Na každé cestě z kořene do listu je stejný počet černýc ran. Prvním dvěma aiomům budeme říkat červené, zblým dvěma černé. Pozorování: Z aiomů plne, že každá konfigurace pospojovaná červenými ranami vpadá jedním z uvedenýc způsobů. Proto je každý LLRB strom překladem nějakéo (2, 4)-stromu podle našic pravidel. Důsledek: Hloubka LLRB stromu s n klíči je Θ(log n). Důkaz: Hloubka (2, 4)-stromu s n klíči činí Θ(log n), překlad na LLRB strom počet ladin nesníží a nejvýše zdvojnásobí. Vvažovací operace Operace s LLRB strom se skládají ze dvou základníc úprav. Tou první je opět rotace, ale používáme ji pouze pro červené ran: Fi! Fi: Obrázek s příkladem překladu
19 Rotace červené ran zacovává nejen správné uspořádání klíčů ve vrcolec, ale i černé aiom. Platnost červenýc aiomů záleží na barvác okolníc ran, takže rotaci budeme muset používat opatrně. (Rotování černýc ran se výbáme, protože b navíc porušovalo i aiom 4.) Dále budeme používat ještě přebarvení 4-vrcolu. Dvojici červenýc ran tvořícíc 4-vrcol přebarvíme na černou, a naopak černou ranu vedoucí z 4-vrcolu naoru přebarvíme na červenou: z z Tato úprava odpovídá rozštěpení 4-vrcolu na dva 2-vrcol, přičemž prostřední klíč do nadřazenéo k-vrcolu. Černé aiom zůstanou zacován, ale může dojít k porušení červenýc aiomů o patro výše. Vkládání štěpením sora dolů Nní popíšeme, jak se do LLRB stromu vkládá. Půjdeme na to asi takto: místo pro nový vrcol budeme ledat obvklým zpusobem, ale kdkoliv cestou potkáme 4-vrcol, rovnou o rozštěpíme přebarvením. ž dorazíme do listu, připojíme místo něj nový vnitřní vrcol a ranu, po které jsme přišli, obarvíme červeně. Tím se nový klíč připojí k nadřazenému 2-vrcolu nebo 3-vrcolu. To zacovává černé aiom, ale průběžně jsme porušovali t červené, takže se budeme vracet zpět do kořene a rotacemi je opravovat. Nní podrobněji. Běem ledání sestupujeme z kořene dolů a udržujeme invariant, že aktuální vrcol není 4-vrcol. Jakmile na nějaký 4-vrcol narazíme, přebarvíme o. Tím se rozštěpí na dva 2-vrcol a prostřední klíč se stane součástí nadřazenéo k-vrcolu. Víme ovšem, že to nebl 4-vrcol, takže se z něj nní stane 3-vrcol nebo 4-vrcol. Jen možná bude nekorektně zakódovaný: 3-vrcol ve tvaru pravé odbočk nebo 4-vrcol se dvěma červenými ranami nad sebou: z z Nakonec nás ledání novéo klíče dovede do listu, což je místo, kam bcom klíč ctěli vložit. Nad námi leží 2-vrcol nebo 3-vrcol. List změníme na vnitřní
20 vrcol s novým klíčem, pod něj pověsíme dva nové list připojené černými ranami, ranu do otce přebarvíme na červenou: p p Co se stane? Nový klíč leží na jediném místě, kde ležet může. Černé aiom jsme neporušili, červené jsme opět moli porušit vtvořením nekorektnío 3-vrcolu nebo 4-vrcolu o patro výše. Nní se začneme vracet zpět do kořene a přitom opravovat všecna porušení červenýc aiomů tak, ab černé aiom zůstal zacován. Kdkoliv pod aktuálním vrcolem leží levá černá rana a pravá červená, tak tuto ranu zrotujeme. Tím z nekorektnío 3-vrcolu uděláme korektní a nekorektnío 4-vrcolu uděláme takový nekorektní, jeož obě ran jsou levé. Poté otestujeme, zda pod aktuálním vrcolem leží levá červená rana do sna, který má také levou červenou ranu. Pokud ano, objevili jsme zbývající případ nekorektnío 4-vrcolu, který rotací jeo orní červené ran převedeme na korektní. ž dojdeme do kořene, struktura opět splňuje všecn aiom LLRB stromů. Následuje implementace v pseudokódu. Eterní vrcol ukládáme jako konstantu, barvu ran si pamatujeme v jejic spodním vrcolu. Procedura LlrbInsert Vstup: Kořen stromu v, vkládaný klíč 1. Pokud v =, skončíme a vrátíme nově vtvořený červený vrcol v s klíčem. 2. Pokud = k(v), skončíme (klíč se ve stromu již nacází). 3. Jsou-li l(v) i r(v) červené, přebarvíme l(v), r(v) i v. 4. Pokud < k(v), položíme l(v) LlrbInsert(l(v), ). 5. Pokud > k(v), položíme r(v) LlrbInsert(r(v), ). 6. Je-li l(v) černý a r(v) červený, rotujeme ranu (v, r(v)). 7. Je-li l(v) červený a l(l(v)) také červený, rotujeme ranu (v, l(v)). Výstup: Nový kořen v Vkládání štěpením zdola naoru Mazání FIXME FIXME Časová složitost FIXME
21 Cvičení 1. Spočítejte přesně, jaká může být minimální a maimální loubka LLRB stromu s n klíči
1. Vyhledávací stromy
1. Vyledávací stromy V této kapitole budeme postaveni před následující problém. Je dáno nějaké univerzum prvků U a naším úkolem bude navrnout datovou strukturu, která udržuje konečnou množinu prvků X U.
1. Vyhledávací stromy
1. Vledávací strom V minulé kapitole jsme se vdali po stopě datovýc struktur pro efektivní reprezentaci množin a slovníků. To nás nní dovede k různým variantám vledávacíc stromů. Začneme těmi binárními,
1. Vyhledávací stromy
1. Vledávací strom V kapitole?? jsme se vdali po stopě datovýc struktur pro efektivní reprezentaci množin a slovníků. To nás nní dovede k různým variantám vledávacíc stromů. Začneme těmi binárními, ale
Vyvažování a rotace v BVS, všude se předpokládá AVL strom
Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce
Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí
bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT
binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım
Padovan heaps Vladan Majerech
Padovan heaps Vladan Majerech Základní princip velmi drahé porovnávání Porovnáváme jen když musíme (v podstatě veškerou práci dělá FindMin) Výsledky porovnávání nezahazujeme Nesmíme organizací porovnávání
Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost
Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě
Diferencovatelné funkce
Přednáška 5 Diferencovatelné funkce Jak jsme se zmínili v minulé přednášce, je lavní myšlenkou diferenciálnío počtu naradit danou funkci y = f) v okolí bodu a polynomem V této přednášce se budeme podrobně
AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující
Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární stromy pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Stromy. Jan Hnilica Počítačové modelování 14
Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A
1 Linearní prostory nad komplexními čísly
1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)
ADT STROM Lukáš Foldýna
ADT STROM Lukáš Foldýna 26. 05. 2006 Stromy mají široké uplatnění jako datové struktury pro různé algoritmy. Jsou to matematické abstrakce množin, kterou v běžném životě používáme velice často. Příkladem
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
PQ-stromy a rozpoznávání intervalových grafů v lineárním čase
-stromy a rozpoznávání intervalových grafů v lineárním čase ermutace s předepsanými intervaly Označme [n] množinu {1, 2,..., n}. Mějme permutaci π = π 1, π 2,..., π n množiny [n]. Řekneme, že množina S
V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
( ) Opakování vlastností funkcí. Předpoklady:
.. Opakování vlastností funkcí Předpoklad: Pedagogická poznámka: Tato hodina je zamýšlená jako první, druhá ve třetím ročníku. Podle toho, které úkol necháte student řešit, může trvat jednu až dvě vučovací
Binární vyhledávací stromy
Binární vyhledávací stromy Definice: Binární vyhledávací strom (po domácku BVS) je buďto prázdná množina nebo kořen obsahující jednu hodnotu a mající dva podstromy (levý a pravý), což jsou opět BVS, ovšem
kopci a tuto představu přetavit do náčrtku celé situace, viz. obr.1. Aby však tento náčrt nebyl
Určete rovnici tečny ke grafu funkce f x x x v bodě dotyku [,?] Řešení: Protože máme zadánu složenou funkci, může být docela obtížné popsat její vlastnosti či nakreslit si její graf Nicméně vlastnosti
Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620
Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.
autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)
definice ( tree) autoři: Rudolf Bayer, Ed McCreight vyvážený strom řádu m ( ) každý uzel nejméně a nejvýše m potomků s výjimkou kořene každý vnitřní uzel obsahuje o méně klíčů než je počet potomků (ukazatelů)
zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.
Kapitola Ohodnocené grafy V praktických aplikacích teorie grafů zpravidla graf slouží jako nástroj k popisu nějaké struktury. Jednotlivé prvky této struktury mají často přiřazeny nějaké hodnoty (může jít
Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)
13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací
Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)
Stromy Binární Vyhledávací Stromy, u kterých je č asová složitost operací v nejhorším případě rovná O(log n) Vlastnosti Red-Black Stromů Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
1. Minimální kostry. 1.1. Od mìsteèka ke kostøe
. Minimální kostry Napadl sníh a přikryl peřinou celé městečko. Po ulicích lze sotva projít pěšky, natož projet autem. Které ulice prohrneme, aby šlo dojet odkudkoliv kamkoliv, a přitom nám házení sněhu
Výroková a predikátová logika - II
Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2017/2018 1 / 17 Předběžnosti Základní pojmy n-ární relace a funkce
1. Binomiální haldy. 1.1. Zavedení binomiální haldy
1. Binomiální haldy V této kapitole popíšeme datovou strukturu zvanou binomiální halda. Základní funkcionalita binomiální haldy je podobná binární haldě, nicméně jí dosahuje jinými metodami a navíc podporuje
Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.
Vyhledávací stromy Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vytvářejí se vždy nad již existující datovou strukturou (zpravidla tabulkou). Vyhledávací stromy můžeme rozdělit
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC
SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC Pojm: Algebraická rovnice... rovnice obsahující pouze celé nezáporné mocnin neznámé, tj. a n n + a n 1 n 1 +... + a 2 2 + a 1 + a 0 = 0, kde n je přirozené číslo.
+ 2y. a y = 1 x 2. du x = nxn 1 f(u) 2x n 3 yf (u)
Diferenciální počet příklad 1 Dokažte, že funkce F, = n f 2, kde f je spojitě diferencovatelná funkce, vhovuje vztahu + 2 = nf ; 0 Řešení: Označme u = 2. Pak je F, = n fu a platí Podle vět o derivaci složené
Riemannův určitý integrál
Riemannův určitý integrál 1. Motivační příklad Příklad (Motivační příklad pro zavedení Riemannova integrálu). Nechť,. Vypočtěme obsah vybarvené oblasti ohraničené grafem funkce, osou a svislými přímkami
a) b) c) Radek Mařík
2012-03-20 Radek Mařík 1. Čísla ze zadané posloupnosti postupně vkládejte do prázdného binárního vyhledávacího stromu (BVS), který nevyvažujte. Jak bude vypadat takto vytvořený BVS? Poté postupně odstraňte
Dijkstrův algoritmus
Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované
[ 5;4 ]. V intervalu 1;5 je funkce rostoucí (její první derivace je v tomto intervalu
1..1 Průběh funkce III (prohnutí Předpoklad: 111 Pedagogická poznámka: Při poctivém probírání b tato látka zabrala dvě celé vučovací hodin. Studenti z toho nebudou příliš nadšení, je zde příliš mnoho definic
NMAF 051, ZS Zkoušková písemná práce 16. ledna 2009
Jednotlivé kroky při výpočtech stručně, ale co nejpřesněji odůvodněte. Pokud používáte nějaké tvrzení, nezapomeňte ověřit splnění předpokladů. Jméno a příjmení: Skupina: Příklad 3 5 Celkem bodů Bodů 8
Union-Find problém. Kapitola 1
Kapitola 1 Union-Find problém Motivace: Po světě se toulá spousta agentů. Často se stává, že jeden agent má spoustu jmen/přezdívek, které používá například při rezervaci hotelu, restaurace, na návštěvě
NP-úplnost problému SAT
Problém SAT je definován následovně: SAT(splnitelnost booleovských formulí) Vstup: Booleovská formule ϕ. Otázka: Je ϕ splnitelná? Příklad: Formule ϕ 1 =x 1 ( x 2 x 3 )jesplnitelná: např.přiohodnocení ν,kde[x
Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti
Kapitola 5 Vektorové prostory V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti operací sčítání a násobení
7. Geometrické algoritmy (sepsal Pavel Klavík)
7. Geometrické algoritmy (sepsal Pavel Klavík) Ukážeme si několik základních algoritmů na řešení geometrických problémů v rovině. Proč zrovna v rovině? Inu, jednorozměrné problémy bývají triviální a naopak
Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57
PŘEDNÁŠKA 2 POSLOUPNOSTI
PŘEDNÁŠKA 2 POSLOUPNOSTI 2.1 Zobrazení 2 Definice 1. Uvažujme libovolné neprázdné množiny A, B. Zobrazení množiny A do množiny B je definováno jako množina F uspořádaných dvojic (x, y A B, kde ke každému
Maturitní téma: Programovací jazyk JAVA
Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu http://akademie.ldf.mendelu.cz/cz (reg. č. CZ.1.07/2.2.00/28.
Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem
které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole.
Kapitola 7 Stromy Stromy jsou jednou z nejdůležitějších tříd grafů. O tom svědčí i množství vět, které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole. Představíme také dvě
p 2 q , tj. 2q 2 = p 2. Tedy p 2 je sudé číslo, což ale znamená, že
KAPITOLA 1: Reálná čísla [MA1-18:P1.1] 1.1. Číselné množiny Přirozená čísla... N = {1,, 3,...} nula... 0, N 0 = {0, 1,, 3,...} = N {0} Celá čísla... Z = {0, 1, 1,,, 3,...} Racionální čísla... { p } Q =
Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
5. Lokální, vázané a globální extrémy
5 Lokální, vázané a globální extrémy Studijní text Lokální extrémy 5 Lokální, vázané a globální extrémy Definice 51 Řekneme, že f : R n R má v bodě a Df: 1 lokální maximum, když Ka, δ Df tak, že x Ka,
Radek Mařík
2012-03-20 Radek Mařík 1. Pravá rotace v uzlu U a) v podstromu s kořenem U přemístí pravého syna U.R uzlu U do kořene. Přitom se uzel U stane levým synem uzlu U.R a levý podstrom uzlu U.R se stane pravým
Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek
Otázka 06 - Y01MLO Zadání Predikátová logika, formule predikátové logiky, sentence, interpretace jazyka predikátové logiky, splnitelné sentence, tautologie, kontradikce, tautologicky ekvivalentní formule.
Základní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest
Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem
Algebraické rovnice. Obsah. Aplikovaná matematika I. Ohraničenost kořenů a jejich. Aproximace kořenů metodou půlení intervalu.
Algebraické rovnice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Základní pojm 2 Metod řešení algebraických rovnic Algebraické řešení Grafické řešení Numerické řešení 3 Numerické řešení Ohraničenost
Báze a dimenze vektorových prostorů
Báze a dimenze vektorových prostorů Buď (V, +, ) vektorový prostor nad tělesem (T, +, ). Nechť u 1, u 2,..., u n je konečná posloupnost vektorů z V. Existují-li prvky s 1, s 2,..., s n T, z nichž alespoň
5. Náhodná veličina. 2. Házíme hrací kostkou dokud nepadne šestka. Náhodná veličina nabývá hodnot z posloupnosti {1, 2, 3,...}.
5. Náhodná veličina Poznámka: Pro popis náhodného pokusu jsme zavedli pojem jevového pole S jako množiny všech možných výsledků a pravděpodobnost náhodných jevů P jako míru výskytů jednotlivých výsledků.
LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25
Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem
f(c) = 0. cn pro f(c n ) > 0 b n pro f(c n ) < 0
KAPITOLA 5: Spojitost a derivace na intervalu [MA-8:P5] 5 Funkce spojité na intervalu Věta 5 o nulách spojité funkce: Je-li f spojitá na uzavřeném intervalu a, b a fa fb < 0, pak eistuje c a, b tak, že
Limita a spojitost funkce
Limita a spojitost funkce Základ všší matematik Dana Říhová Mendelu Brno Průřezová inovace studijních programů Lesnické a dřevařské fakult MENDELU v Brně (LDF) s ohledem na disciplin společného základu
0. Lineární rekurence Martin Mareš, 2010-07-04
0 Lineární rekurence Martin Mareš, 2010-07-04 V tomto krátkém textu se budeme zabývat lineárními rekurencemi, tj posloupnostmi definovanými rekurentní rovnicí typu A n+k = c 0 A n + c 1 A n+1 + + c k 1
PŘEDNÁŠKA 7 Kongruence svazů
PŘEDNÁŠKA 7 Kongruence svazů PAVEL RŮŽIČKA Abstrakt. Definujeme svazové kongruence a ukážeme jak pro vhodné binární relace svazu ověřit, že se jedná o svazové kongruence. Popíšeme svaz Con(A) kongruencí
Modely Herbrandovské interpretace
Modely Herbrandovské interpretace Petr Štěpánek S využitím materialu Krysztofa R. Apta 2006 Logické programování 8 1 Uvedli jsme termové interpretace a termové modely pro logické programy a také nejmenší
13. Třídící algoritmy a násobení matic
13. Třídící algoritmy a násobení matic Minulou přednášku jsme probírali QuickSort, jeden z historicky prvních třídících algoritmů, které překonaly kvadratickou složitost aspoň v průměrném případě. Proč
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty. (A7B01MCS) I. Matematická indukce a rekurse. Indukční principy patří
FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
FIT ČVUT MI-LOM Lineární optimalizace a metody Dualita Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Michal Černý, 2011 FIT ČVUT, MI-LOM, M. Černý, 2011: Dualita 2/5 Dualita Evropský
1 Lineární prostory a podprostory
Lineární prostory a podprostory Přečtěte si: Učebnice AKLA, kapitola první, podkapitoly. až.4 včetně. Cvičení. Které z následujících množin jsou lineárními prostory s přirozenými definicemi operací?. C
O dělitelnosti čísel celých
O dělitelnosti čísel celých 6. kapitola. Nejmenší společný násobek In: František Veselý (author): O dělitelnosti čísel celých. (Czech). Praha: Mladá fronta, 1966. pp. 73 79. Persistent URL: http://dml.cz/dmlcz/403569
Stromové struktury v relační databázi
Stromové struktury v relační databázi Stromové struktury a relační databáze Zboží Procesory Intel Pentium IV Celeron Paměti AMD Duron DDR DIMM Athlon http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich/
19. Druhý rozklad lineární transformace
Matematický ústav Slezské univerzity v Opavě Učební texty k přednášce ALGEBRA II, letní semestr 2000/2001 Michal Marvan Úmluva. Všude P = C. Vpřednášce o vlastních vektorech jsme se seznámili s diagonalizovatelnými
Generování pseudonáhodných. Ing. Michal Dorda, Ph.D.
Generování pseudonáhodných čísel při simulaci Ing. Michal Dorda, Ph.D. 1 Úvodní poznámky V simulačních modelech se velice často vyskytují náhodné proměnné. Proto se budeme zabývat otázkou, jak při simulaci
1. DIFERENCIÁLNÍ POČET FUNKCE DVOU PROMĚNNÝCH
1. DIFERENCIÁLNÍ POČET FUNKCE DVOU PROMĚNNÝCH V minulém semestru jsme studovali vlastnosti unkcí jedné nezávislé proměnné. K popisu mnoha reálných situací obvkle s jednou proměnnou nevstačíme. FUNKCE DVOU
Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém
1. Nejkrat¹í cesty Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém smyslu optimální typicky nejkratší možná. Už víme, že prohledávání do šířky najde cestu s nejmenším počtem
opakování reprezentace grafů, dijkstra, bellman-ford, johnson
opakování reprezentace grafů, dijkstra, bellman-ford, johnson Petr Ryšavý 19. září 2016 Katedra počítačů, FEL, ČVUT opakování reprezentace grafů Graf Definice (Graf) Graf G je uspořádaná dvojice G = (V,
Výroková a predikátová logika - IV
Výroková a predikátová logika - IV Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - IV ZS 2018/2019 1 / 17 Tablo metoda Tablo Tablo - příklady F (((p q)
Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...
Kapitola 1 Úvod 1.1 Značení N... přirozená čísla (1, 2, 3,...). Z... celá čísla ( 3, 2, 1, 0, 1, 2,...). Q... racionální čísla ( p, kde p Z a q N) q R... reálná čísla C... komplexní čísla 1.2 Výroky -
Kongruence na množině celých čísel
121 Kapitola 4 Kongruence na množině celých čísel 4.1 Relace kongruence na množině celých čísel Vraťme se k úvahám o dělení se zbytkem. Na základní škole jsme se naučili, že když podělíme číslo 11 číslem
3. Prohledávání grafů
3. Prohledávání grafů Prohledání do šířky Breadth-First Search BFS Jde o grafový algoritmus, který postupně prochází všechny vrcholy v dané komponentě souvislosti. Algoritmus nejprve projde všechny sousedy
Monotonie a lokální extrémy. Konvexnost, konkávnost a inflexní body. 266 I. Diferenciální počet funkcí jedné proměnné
66 I. Diferenciální počet funkcí jedné proměnné I. 5. Vyšetřování průběhu funkce Monotonie a lokální etrémy Důsledek. Nechť má funkce f) konečnou derivaci na intervalu I. Je-li f ) > 0 pro každé I, pak
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:
Opakování středoškolské matematiky Slovo úvodem: Tato pomůcka je určena zejména těm studentům presenčního i kombinovaného studia na VŠFS, kteří na středních školách neprošli dostatečnou průpravou z matematiky
M - Příprava na 1. zápočtový test - třída 3SA
M - Příprava na 1. zápočtový test - třída 3SA Autor: Mgr. Jaromír JUŘEK Kopírování a jakékoliv další využití výukového materiálu je povoleno pouze s uvedením odkazu na www.jarjurek.cz. VARIACE 1 Tento
Vrcholová barevnost grafu
Vrcholová barevnost grafu Definice: Necht G = (V, E) je obyčejný graf a k N. Zobrazení φ : V {1, 2,..., k} nazýváme k-vrcholovým obarvením grafu G. Pokud φ(u) φ(v) pro každou hranu {u, v} E, nazveme k-vrcholové
α β ) právě tehdy, když pro jednotlivé hodnoty platí β1 αn βn. Danou relaci nazýváme relace
Monotónní a Lineární Funkce 1. Relace předcházení a to Uvažujme dva vektory hodnot proměnných α = α,, 1 αn ( ) a β = ( β β ) 1,, n x,, 1 xn. Říkáme, že vekto r hodnot α předchází vektor hodnot β (značíme
Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:
B-Strom Definice B-stromu B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí: 1. Počet klíčů v každém vnitřním uzlu, je o jednu menší než je počet následníků (synů) 2.
STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta
STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka
Datové struktury Úvod
Datové struktury Úvod Navrhněte co nejjednodušší datovou strukturu, která podporuje následující operace: 1. Insert a Delete v O(n), Search v O(log n); Datové struktury Úvod Navrhněte co nejjednodušší datovou
Dynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
Další NP-úplné problémy
Další NP-úplné problémy Známe SAT, CNF, 3CNF, k-klika... a ještě následující easy NP-úplný problém: Existence Certifikátu (CERT ) Instance: M, x, t, kde M je DTS, x je řetězec, t číslo zakódované jako
Výroková a predikátová logika - V
Výroková a predikátová logika - V Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - V ZS 2015/2016 1 / 21 Dokazovací systémy VL Hilbertovský kalkul Hilbertovský
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
Složitosti základních operací B + stromu
Složitosti základních operací B + stromu Radim Bača VŠB Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky ŠKOMAM 2010-1- 28/1/2010 Složitosti základních operací B +
1. Základní pojmy, používané v tomto manuálu. 2. Stránky
Redakční systém manuál 1. Základní pojmy, používané v tomto manuálu Hlavní menu Menu v horní světlemodré liště obsahující 7 základních položek: Publikovat, Správa, Vzhled, Komentáře, Nastavení, Pluginy,
Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
složitost rekurzivních algoritmů Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Vyjádřen ení složitosti rekurzivního algoritmu rekurentním m tvarem Příklad vyjádření složitosti rekurzivního algoritmu rekurencí: