1. Vyhledávací stromy

Rozměr: px
Začít zobrazení ze stránky:

Download "1. Vyhledávací stromy"

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 při konstrukci stromu pokaždé vbírali prostřední prvek intervalu. 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. 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. Nejprve připomeneme definici binárnío stromu z předcozí kapitol:

2 Definice: Strom nazveme binární, pokud je zakořeněný a každý vrcol má nejvýše dva sn, u nicž rozlišujeme, který je levý a který pravý. Značení: 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 a L(v), pak k(a) < k(v). Kdkoliv b R(v), pak k(b) > k(v). Jinak řečeno, vrcol v odděluje klíče v levém a pravém podstromu. Základní operace Pomocí vledavacíc stromů můžeme přirozeně reprezentovat množin: klíče uložené ve vrcolec budou odpovídat prvkům množin. A 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. 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)). Pokaždé ted projdeme levý podstrom, pak kořen, a nakonec pravý podstrom. To nám dává tak zvané smetrické pořadí vrcolů (někd také in-order). Jejic klíče přitom vpisujeme od nejmenšío k největšímu. Hledání 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 zamíříme doleva. Je-li naopak > k(v), nic nepokazíme krokem doprava. Časem ted najdeme, anebo vloučíme všecn možnosti, kde b se molo nacázet. Algoritmus formulujeme jako rekurzivní funkci, kterou vžd voláme na kořen nějakéo podstromu a vrátí nám nalezený vrcol

3 Procedura BvsFind Vstup: Kořen BVS v, ledaný klíč 1. Pokud v =, vrátíme. 2. Pokud = k(v), vrátíme v. 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 je kam. 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í, pouze v okamžiku, kd b vledávací algoritmus měl přejít do neeistujícío vrcolu, připojíme tam nový list. Rozmslíme si, že to je jediné místo, kde podle definice nový prvek smí ležet. Operaci opět popíšeme rekurzivně. Funkce dostane na vstupu kořen (pod)stromu a vrátí nový kořen. Procedura BvsInsert Vstup: Kořen BVS v, vkládaný klíč 1. Pokud v =, vtvoříme nový vrcol v s klíčem a skončíme. 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ů (viz obrázek 1.2). 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 vstřínout, ted naradit snem. Ošemetný je případ se dvěma sn. Ted nemůžeme v jen tak smazat, b 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 Obr. 1.2: Různé situace při mazání. Nejprve mažeme vrcol 2 a 4, poté 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: naradíme následníka s.) 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 tam a jednou zpět, nebo (v nejsložitějším případě BvsDelete) oběma směr dvakrát. Jejic časová složitost proto bude Θ(loubka stromu). Hloubka ovšem závisí na tom, jak moc je strom košatý. V příznivém případě vjde smpatickýc O(log n), jenže dalšími operacemi 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 počet vrcolů levéo a pravéo podstromu se smí lišit nejvýše o 1. Pozorování: Dokonale vvážený strom má loubku log 2 n, jelikož na kterékoliv cestě z kořene do listu klesá velikost podstromů s každým krokem alespoň dvakrát

5 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 (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 udržujícíc strom dokonale vvážený platí, že 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.3. 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 Obr. 1.3: Dokonale vvážený BVS Nní na tomto stromu provedeme následující posloupnost operací: Insert(n + 1), Delete(1), Insert(n + 2), Delete(2),... 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

6 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, T 2 a sloučí jejic obsa do jedinéo BVS. Algoritmus 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í: AVL 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. 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 liší nejvýše o jedna. Stromům s loubkovým vvážením se říká AVL strom, neboť je vmsleli v roce 1962 ruští matematikové G. M. Aděľson-Veľskij a E. M. Landis. Nní dokážeme, že AVL strom mají logaritmickou loubku. Tvrzení: AVL strom na n vrcolec má loubku Θ(log n). Důkaz: Nejprve pro každé 0 stanovíme A, což bude minimální možný počet vrcolů v AVL 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.4. A 0 = 1 A 1 = 2 A 2 = 4 A 3 = 7 A = A 1 + A Obr. 1.4: Minimální AVL strom pro loubk 0 až 3 a obecný případ

7 Pro větší uvažujme, jak může minimální AVL 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í AVL strom dané loubk. Musí ted platit A = A 1 + A Tato rekurence připomíná Fibonaccio posloupnost z oddílu??. Vskutku: platí A = F +3 1, kde F k je k-té Fibonaccio číslo. Z too bcom moli získat eplicitní vzorec pro A, ale pro důkaz našeo tvrzení postačí jednodušší asmptotický odad. Dokážeme indukcí, že A 2 /2. Jistě je A 0 = 1 2 0/2 = 1 a A 1 = 2 2 1/2. = Indukční krok pak vpadá následovně: A = 1 + A 1 + A 2 > = 2 2 ( ) > 2 2. Tím jsme dokázali, že A c pro c = 2. Proto AVL 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ý AVL strom loubk je úplný binární strom s vrcol. Tudíž minimální možná loubka AVL stromu je Ω(log n). Vvažování rotacemi Jak budou vpadat operace na AVL 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. Abcom 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 AVL 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.5. Často také potkáme dvojitou rotaci z obrázku 1.6. 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. 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 A B C A B C Obr. 1.5: Jednoducá rotace z A B C D z A B C D Obr. 1.6: Dvojitá rotace 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 AVL 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

9 Označíme-li loubku podstromu C, podstrom T () má loubku +2, takže podstrom A 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 zastavíme A B + 1 C A + 1 B 0 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). 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. + 2 A + B z 2 C D + 1 z A 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šíří

10 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. 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 A, 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 A B + C A B C + 1 Případ 3b: Vrcol má znaménko

11 Necť je loubka podstromu A. 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. A +2 0 B + 1 C A B + 1 C + 1 Případ 3c: Vrcol má znaménko. Označíme z levéo sna vrcolu. Označíme podstrom podle obrázku a spočítáme jejic loubk. Referenční loubku zvolíme opět podle A. 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. A z D B C + 2 z A B C D Složitost operací Dokázali jsme, že loubka AVL stromu je vžd Θ(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í

12 po cestě do kořene a v každém vrcolu provede Θ(1) operací, takže celkově také trvá Θ(log n). Cvičení 1. Dokažte, že pro minimální velikost A k AVL stromu loubk k platí vzta A 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 AVL 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 AVL 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í. 4. Mějme AVL strom použitý jako slovník: v každém vrcolu sídlí klíč a nějaká celočíselná odnota. Upravte strom, ab uměl zjistit největší odnotu přiřazenou nějakému klíči z intervalu [a, b]. 5*. Pokračujme v předcozím cvičení: Také cceme, ab strom uměl ve všec vrcolec s klíči v zadaném intervalu [a, b] zvýšit odnot o δ. Může se odit princip línéo vodnocování z oddilu?? 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 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í libovolný nenulový počet klíčů. Pokud ve vrcolu leží 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í:

13 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 Obr. 1.7: Dva (2, 3)-strom pro tutéž množinu klíčů Lemma: (a, b)-strom s n klíči má loubku Θ(log n). Důkaz: Půjdeme na to podobně jako u AVL stromů. Uvažujme, jak vpadá strom loubk 1 s nejmenším možným počtem klíčů. Všecn jeo vrcol musí mít minimální povolený počet snů (jinak b strom blo ještě možné zmenšit). Vrcol rozdělíme do ladin podle loubk: na 0-té ladině je kořen se dvěma sn a jedním klíčem, úplně dole na -té ladině leží vnější vrcol bez klíčů. Na mezilelýc ladinác jsou všecn ostatní vnitřní vrcol s a sn a a 1 klíči. Na i-té ladině pro 0 < i < bude ted ležet 2 a i 1 vrcolů a v nic celkem 2 a i 1 (a 1) klíčů. Sečtením přes ladin získáme minimální možný počet klíčů m : 1 2 m = 1 + (a 1) 2 a i 1 = (a 1) a j. Poslední sumu sečteme jako geometrickou řadu a dostaneme: i=1 m = (a 1) a 1 1 = (a 1 1) = 2a 1 1. a 1 Vidí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 AVL 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íčů: j=0 1 M = (b 1) b i = (b 1) b 1 b 1 = b 1. i=

14 Hledání klíče 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 mu sna, ale jelikož ostatní snové jsou list, tento může být 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 a f a 4 6 f b c d e b c d e Obr. 1.8: Štěpení přeplněnéo vrcolu při vkládání do (2, 3)-stromu 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 AbInsert2(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 AbInsert navíc ošetřuje případ štěpení kořene. Procedura AbInsert Vstup: Kořen stromu r, vkládaný klíč 1. t AbInsert2(r, )

15 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 AbInsert2(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 AbInsert2(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. 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

16 Nní popíšeme, jak to přesně provést. Bez újm na obecnosti předpokládejme, že vrcol v má levéo bratra l oddělenéo nějakým klíčem o v otci. Pokud b eistoval pouze pravý bratr, vbereme too a následující postup provedeme zrcadlově převráceně. Pokud má bratr pouze a snů, sloučíme vrcol v a l 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ýš. l 2 o v d 2 4 d a b c a b c Obr. 1.9: Sloučení vrcolů při mazání z (2, 3)-stromu Má-li naopak bratr více než a snů, odpojíme od něj jeo nejpravějšío sna c a největší klíč m. Poté klíč m přesuneme do otce a klíč o odtamtud přesuneme do v, kde se stane nejmenším klíčem, před který přepojíme sna c. Poté mají v i l 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.) o 4 7 l v 2 3 m e 3 7 l v 2 4 e a b c d a b c d Obr. 1.10: Doplnění vrcolu ve (2, 3)-stromu půjčkou od souseda Nní tento postup zapíšeme jako rekurzivní proceduru AbDelete2. 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 AbDelete 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 AbDelete Vstup: Kořen stromu r a mazaný klíč 1. Zavoláme AbDelete2(r, ). 2. Pokud r má jedinéo sna s:

17 3. Zrušíme vrcol r. 4. r s Výstup: Nový kořen r Procedura AbDelete2 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 AbDelete2(s i, m). 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 AbDelete2(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 levý 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 největší klíč m a nejpravějšío sna c. 19. K vrcolu s i připojíme jako první klíč i a jako nejlevějšío sna cl. 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 1 a s i a mezi nimi klíč i. 23. Z vrcolu v odstraníme klíč i a sn s i 1 a s i. Tto sn zrušíme a na jejic místo připojíme sna s. 24. Jinak provedeme krok 17 až 23 zrcadlově pro pravé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 Θ(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í 3). Proto se obvkle

18 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 7 a 8, 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 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í 5), 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. Dokažte, že procázíme-li obecný vledávací strom v smetrickém pořadí vrcolů, pravidelně se střídají vnitřní vrcol s vnějšími. To znamená, že obsaujíli vnitřní vrcol klíče 1,..., n, pak vnější vrcol odpovídají intervalům (, 1 ), ( 1, 2 ), ( 2, 3 ),..., ( n, + ). 2*. Vužijte předcozí cvičení k sestrojení obecnější variant intervalovýc stromů z oddílu??. Hranice intervalů jsou tentokrát libovolná reálná čísla. Na počátku si strom pamatuje interval (, + ), který pak umí v libovolném bodě podrozdělovat. Mimo to podporuje změn odnot, intervalové dotaz a případně intervalové změn, stejně jako klasický intervalový strom. 3. 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

19 4*. 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? 5. 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ů. Analzujte časovou složitost a srovnejte s naší verzí struktur. 6. 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. 7. 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. 8*. 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í. 9. Navrněte operaci Join(X, Y ), která dostane dva (a, b)-strom X a Y a sloučí je do jednoo. Může se přitom spolenout na to, že všecn klíče z X jsou menší než všecn z Y. Zkuste dosánout složitosti O(log X + log Y ). 10*. Navrněte operaci Split(T, ), která zadaný (a, b)-strom T rozdělí na dva strom. V jednom budou klíče menší než, v druém t větší. Pokuste se o logaritmickou časovou složitost È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 poměrně jednoducým vvažováním. Říká se jí červeno-černé 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ů. Ab blo možné rekonstruovat původní (2, 4)- strom, rozlišíme dvě 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 v závislosti na 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

20 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 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. Hran do 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 všec cestác z kořene do listu leží stejný počet černýc ran. Prvním dvěma aiomům budeme říkat červené, zblým dvěma černé Obr. 1.11: Překlad (2, 4)-stromu na LLRB strom 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. 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:

21 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 rozilo porušení aiomu 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í do 4-vrcolu sora 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íč přesouváme 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. Dodejme ještě, že přebarvení jde použít i v kořeni. Můžeme si představovat, že do kořene vede sora nějaká virtuální rana, již můžeme bez porušení aiomů libovolně přebarvovat. 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. Až 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

22 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í vrcol s novým klíčem, pod něj pověsíme dva nové list připojené černými ranami, ranu z 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 červenou 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í. Až 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(v, ) 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 Implementace všla překvapivě jednoducá, ale to největší překvapení nás teprve čeká: Pokud v proceduře LlrbInsert přesuneme krok 3 za krok 7, dostaneme implementaci (2, 3)-stromů

23 Vskutku: pokud se před vkládáním prvku ve stromu nenacázel žádný 4-vrcol, nepotřebujeme štěpení 4-vrcolů cestou dolů. Nový list ted přidáme k 2-vrcolu nebo 3-vrcolu. Pokud dočasně vznikne 4-vrcol, rozštěpíme o cestou zpět do kořene. Tím moou vznikat další 4-vrcol, ale průběžně se jic zbavujeme. Tím jsme získali kód velice podobný proceduře BvsInsert pro nevvažované strom, pouze si musíme dávat pozor, ab nově vzniklé vrcol dostával červenou barvu a abcom před každým návratem z rekurze zavolali následující opravnou proceduru: Procedura LlrbFiup(v) Vstup: Kořen podstromu v 1. Je-li l(v) černý a r(v) červený, rotujeme ranu (v, r(v)). 2. Je-li l(v) červený a l(l(v)) také červený, rotujeme ranu (v, l(v)). 3. Jsou-li l(v) i r(v) červené, přebarvíme l(v), r(v) i v. Výstup: Nový kořen podstromu v Mazání minima Mazání bývá o trocu složitější než vkládání a LLRB strom nejsou výjimkou. Proto si zjednodušíme práci, jak to jen půjde. Především vužijeme too, že se při vkládání umíme vnout 4-vrcolům, takže budeme předpokládat, že strom žádné neobsauje. To speciálně znamená, že se nikde nevsktuje pravá červená rana. Také nám situaci zjednoduší, že se voláním LlrbFiup při návratu z rekurze umíme zbavovat případnýc nekorektníc 3-vrcolů a jakýckoliv (potenciálně i nekorektníc) 4-vrcolů. Proto nevadí, kdž běem mazání nějaké vrobíme. Než přikročíme k obecnému mazání, rozmslíme si, jak smazat minimum. Najdeme o tak, že z kořene půjdeme stále doleva, až narazíme na vrcol v, jeož levý sn je vnější. Všimněte si, že pravý sn musí být také vnější. Pokud b do v vedla sora červená rana, moli bcom v smazat a naradit vnějším vrcolem. To odpovídá situací, kd mažeme klíč z 3-vrcolu. Horší je, jsou-li všecn ran okolo v černé. Ve (2, 3)-stromu jsme ted potkali 2-vrcol, takže o potřebujeme sloučit se sousedem, případně si od souseda půjčit klíč. Jak už se nám osvědčilo v první verzi vkládání, budeme to provádět preventivně při průcodu sora dolů, takže až opravdu dojde na mazání, žádný problém nenastane. Cestou proto budeme dodržovat: Invariant L: Stojíme-li ve vrcolu v, pak vede červená rana buďto sora do v, nebo z v do jeo levéo sna. Výjimku dovolujeme pro kořen. Jelikož z v pokaždé odcázíme doleva, jediný problém nastane, vede-li z v dolů levá černá rana a pod ní je další taková. Co víme o ranác v okolí? Sora do v vede dík invariantu červená. Všecn pravé ran jsou, jak už víme, černé. Situaci se pokusíme napravit přebarvením všec ran okolo v:

24 v v t t Invariant opět platí, ale pokud měl pravý sn levou červenou ranu, vrobili jsme nekorektní 5-vrcol, navíc v místec, kud se později nebudeme vracet. Poradíme si podle následujícío obrázku: rotací ran, rotací ran v a nakonec opětovným přebarvením v okolí v. v v t t v v t t Celou funkci pro nápravu invariantu můžeme napsat takto (opět předpokládáme barv uložené ve vrcolec): Procedura MoveRedLeft(v) Vstup: Kořen podstromu v 1. Přebarvíme v, l(v) a r(v). 2. Pokud je l(r(v)) červený: 3. Rotujeme ranu (r(v), l(r(v))). 4. Rotujeme ranu (v, r(v)). 5. Přebarvíme v, l(v) a r(v). Výstup: Nový kořen podstromu v Jakmile umíme dodržet invariant, je už mazání minima snadné: Procedura LlrbDeleteMin(v) Vstup: Kořen stromu v 1. Pokud l(v) =, položíme v a skončíme. 2. Pokud l(v) i l(l(v)) jsou černé: 3. v MoveRedLeft(v) 4. l(v) LlrbDeleteMin(l(v)) 5. v LlrbFiup(v) Výstup: Nový kořen v Mazání maima Nní se naučíme mazat maimum. U občejnýc vledávacíc stromů je to zrcadlová úloa k mazání minima, ne však u LLRB stromů, jejicž aiom nejsou smetrické. Bude se každopádně odit dodržovat stranově převrácenou obdobu předcozío invariantu:

25 Invariant R: Stojíme-li ve vrcolu v, pak vede červená rana buďto sora do v, nebo z v do jeo pravéo sna. Výjimku dovolujeme pro kořen. Na cestě z kořene k maimu půjdeme stále doprava. Do pravéo sna červená rana sama od sebe nevede, ale pokud nějaká povede doleva, zrotujeme ji a tím invariant obnovíme. Problematická situace nastane, vedou-li z v dolů černé ran a navíc z pravéo sna vede doleva další černá rana. Ted se inspirujeme mazáním minima a přebarvíme ran v okolí v: v v t t Pokud z t vede doleva černá rana, je vše v pořádku. V opačném případě jsme nalevo vtvořili nekorektní 4-vrcol, který musíme opravit. Pomůže nám rotace ran vt a opětovné přebarvení v okolí v: v t t t s v s v s Tato úvaa nás dovede k následující funkci pro opravu invariantu, na níž založíme celé mazání maima. Procedura MoveRedRigt(v) Vstup: Kořen podstromu v 1. Přebarvíme v, l(v) a r(v). 2. Pokud je l(l(v)) červený: 3. Rotujeme ranu (v, l(v)). 4. Přebarvíme v, l(v) a r(v). Výstup: Nový kořen podstromu v Procedura LlrbDeleteMa(v) Vstup: Kořen stromu v 1. Pokud l(v) je červený, rotujeme ranu (v, l(v)). 2. Pokud r(v) =, položíme v a skončíme. 3. Pokud r(v) i l(r(v)) jsou černé: 4. v MoveRedRigt(v) 5. r(v) LlrbDeleteMa(r(v)) 6. v LlrbFiup(v) Výstup: Nový kořen v

26 Mazání obecně Pro mazání obecnéo prvku nní stačí vodně zkombinovat mšlenk z mazání minima a maima. Opět půjdeme sora dolů a budeme se výbat tomu, abcom skončili ve 2-vrcolu. Pomůže nám k tomu tato kombinace invariantů L a R: Invariant D: Stojíme-li ve vrcolu v, pak vede červená rana buďto sora do v, nebo do sna, kterým se cstáme pokračovat. Výjimku dovolujeme pro kořen. Pokud při procázení sora dolů cceme pokračovat po levé raně, použijeme trik z mazání minima a pokud b pod námi bl dvě levé černé ran, napravíme situaci pomocí MoveRedLeft. Naopak cceme-li odejít pravou ranou, cováme se jako při mazání maima a v případě problémů povoláme na pomoc MoveRedRigt. Po čase najdeme vrcol, který cceme smazat. Má-li pouze vnější sn, můžeme o přímo naradit vnějším vrcolem. Jinak použijeme obvklý obrat: vrcol naradíme minimem z pravéo podstromu, čímž problém převedeme na mazání minima, a to už umíme. Procedura LlrbDelete(v, ) Vstup: Kořen stromu v, mazaný klíč 1. Pokud v =, vrátíme se. (Klíč ve stromu nebl.) 2. Pokud k(v) < : (Pokračujeme doleva jako při mazání minima.) 3. Pokud l(v) i l(l(v)) jsou černé: 4. v MoveRedLeft(v) 5. l(v) LlrbDelete(l(v), ) 6. Jinak: (Buďto otovo, nebo doprava jako při mazání maima.) 7. Pokud l(v) je červený, rotujeme ranu (v, l(v)). 8. Pokud k(v) = a r(v) = : 9. v a skončíme. 10. Pokud r(v) i l(r(v)) jsou černé: 11. v MoveRedRigt(v) 12. Pokud k(v) = : 13. Proodíme k(v) s minimem pravéo podstromu R(v). 14. r(v) LlrbDeleteMin(r(v)) 15. Jinak: 16. r(v) LlrbDelete(r(v), ) 17. v LlrbFiup(v) Výstup: Nový kořen v Časová složitost Ukázali jsme ted, jak pomocí binárníc stromů kódovat (2, 4)-strom, nebo dokonce (2, 3)-strom. Časová složitost operací Find, Insert i Delete je zjevně lineární s loubkou stromu a o té jsme již dokázali, že je Θ(log n)

27 Dodejme na závěr, že eistují i jiné variant červeno-černýc stromů, které jsou založen na podobném překladu (a, b)-stromů na binární strom. Některé z nic například zaručují, že při každé operaci nastane pouze O(1) rotací. Je to ovšem vkoupeno podstatně složitějším rozborem případů. Časová složitost samozřejmě zůstává logaritmická, protože je potřeba prvek nalézt a přebarvovat ran. Cvičení 1. Spočítejte přesně, jaká může být minimální a maimální loubka LLRB stromu s n klíči. 2*. Navrněte, jak z LLRB stromu mazat, aniž bcom museli při průcodu sora dolů rotovat. Všecn úprav struktur provádějte až při návratu z rekurze podobně, jako se nám to podařilo při vkládání. 3. LLRB strom jsou asmptotick stejně rclé jako AVL strom. Zamslete se nad jejic rozdíl při praktickém použití

1. Vyhledávací stromy

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

Více

1. Vyhledávací stromy

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,

Více

1. Vyhledávací stromy

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.

Více

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

Více

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

Více

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

Více

Diferencovatelné funkce

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ě

Více

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í

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

Více

Padovan heaps Vladan Majerech

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í

Více

Stromy. Jan Hnilica Počítačové modelování 14

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

Více

Stromy, haldy, prioritní fronty

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

Více

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

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íce

1 Linearní prostory nad komplexními čísly

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)

Více

( ) Opakování vlastností funkcí. Předpoklady:

( ) 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í

Více

Algebraické rovnice. Obsah. Aplikovaná matematika I. Ohraničenost kořenů a jejich. Aproximace kořenů metodou půlení intervalu.

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

Více

kopci a tuto představu přetavit do náčrtku celé situace, viz. obr.1. Aby však tento náčrt nebyl

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

Více

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

Více

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

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

Více

Binární vyhledávací stromy pokročilé partie

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

Více

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

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

Více

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í. 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,

Více

1. Minimální kostry. 1.1. Od mìsteèka ke kostøe

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íce

Základní datové struktury III: Stromy, haldy

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í

Více

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

Více

NP-úplnost problému SAT

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

Více

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

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?

Více

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

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.

Více

Binární vyhledávací stromy

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

Více

+ 2y. a y = 1 x 2. du x = nxn 1 f(u) 2x n 3 yf (u)

+ 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é

Více

Algoritmy a datové struktury

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

Více

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

Více

[ 5;4 ]. V intervalu 1;5 je funkce rostoucí (její první derivace je v tomto intervalu

[ 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

Více

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

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í

Více

13. Třídící algoritmy a násobení matic

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č

Více

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

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í

Více

0. Lineární rekurence Martin Mareš, 2010-07-04

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

Více

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

Více

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

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

Více

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

Více

7. Geometrické algoritmy (sepsal Pavel Klavík)

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

Více

1 Lineární prostory a podprostory

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

Více

NMAF 051, ZS Zkoušková písemná práce 16. ledna 2009

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

Více

Báze a dimenze vektorových prostorů

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ň

Více

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

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

Více

Často potřebujeme hledat mezi dvěma vrcholy grafu cestu, která je v nějakém

Č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

Více

ADT STROM Lukáš Foldýna

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

Více

Riemannův určitý integrál

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

Více

Datové struktury Úvod

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

Více

Monotonie a lokální extrémy. Konvexnost, konkávnost a inflexní body. 266 I. Diferenciální počet funkcí jedné proměnné

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

Více

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

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á

Více

68. ročník Matematické olympiády 2018/2019

68. ročník Matematické olympiády 2018/2019 68. ročník Matematické olympiády 2018/2019 Řešení úloh krajského kola kategorie P P-II-1 Tulipány Budeme řešit o něco obecnější úlohu: dovolíme si předepsat, zda má na n-té pozici být tulipán, a pokud

Více

1. DIFERENCIÁLNÍ POČET FUNKCE DVOU PROMĚNNÝCH

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

Více

Přednáška 3: Limita a spojitost

Přednáška 3: Limita a spojitost 3 / 1 / 17, 1:38 Přednáška 3: Limita a spojitost Limita funkce Nejdříve je potřeba upřesnit pojmy, které přesněji popisují (topologickou) strukturu množiny reálných čísel, a to zejména pojem okolí 31 Definice

Více

Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57

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

Více

1. Binomiální haldy. 1.1. Zavedení binomiální haldy

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

Více

Výroková a predikátová logika - II

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

Více

Generování pseudonáhodných. Ing. Michal Dorda, Ph.D.

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

Více

Union-Find problém. Kapitola 1

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ě

Více

3. Prohledávání grafů

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

Více

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

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ů)

Více

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

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

Více

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. 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ří

Více

a) b) c) Radek Mařík

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

Více

Dijkstrův algoritmus

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é

Více

PŘEDNÁŠKA 7 Kongruence svazů

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í

Více

PŘEDNÁŠKA 2 POSLOUPNOSTI

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

Více

p 2 q , tj. 2q 2 = p 2. Tedy p 2 je sudé číslo, což ale znamená, že

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íce

Limita a spojitost funkce. 3.1 Úvod. Definice: [MA1-18:P3.1]

Limita a spojitost funkce. 3.1 Úvod. Definice: [MA1-18:P3.1] KAPITOLA 3: Limita a spojitost funkce [MA-8:P3.] 3. Úvod Necht je funkce f definována alespoň na nějakém prstencovém okolí bodu 0 R. Číslo a R je itou funkce f v bodě 0, jestliže pro každé okolí Ua) bodu

Více

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

Více

Radek Mařík

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

Více

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Lukáš Havrlant Univerzita Palackého 10. ledna 2014 Primární zdroj Jiří Adámek: Foundations of Coding. Strany 137 160. Na webu ke stažení, heslo:

Více

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?

Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů? Kapitola 9 Matice a počet koster Graf (orientovaný i neorientovaný) lze popsat maticí, a to hned několika různými způsoby. Tématem této kapitoly jsou incidenční matice orientovaných grafů a souvislosti

Více

Průběh funkce II (hledání extrémů)

Průběh funkce II (hledání extrémů) .. Průběh funkce II (hledání etrémů) Předpoklad: Pedagogická poznámka: Poslední příklad v běžné vučovací hodině nestíháme. Rchlost postupu je možné značně ovlivnit tím, kolik času dáte studentům na výzkumné

Více

Úvod do řešení lineárních rovnic a jejich soustav

Úvod do řešení lineárních rovnic a jejich soustav Úvod do řešení lineárních rovnic a jejich soustav Rovnice je zápis rovnosti dvou výrazů, ve kterém máme najít neznámé číslo (neznámou). Po jeho dosazení do rovnice musí platit rovnost. Existuje-li takové

Více

Modely Herbrandovské interpretace

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ší

Více

které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole.

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ě

Více

Vrcholová barevnost grafu

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é

Více

5 Rekurze a zásobník. Rekurzivní volání metody

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íce

Kongruence na množině celých čísel

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

Více

Výroková a predikátová logika - IV

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)

Více

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. 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ů.

Více

Parametrické programování

Parametrické programování Parametrické programování Příklad 1 Parametrické pravé strany Firma vyrábí tři výrobky. K jejich výrobě potřebuje jednak surovinu a jednak stroje, na kterých dochází ke zpracování. Na první výrobek jsou

Více

19. Druhý rozklad lineární transformace

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

Více

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

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.

Více

5. Lokální, vázané a globální extrémy

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,

Více

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.

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

Více

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

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íce

2. LIMITA A SPOJITOST FUNKCE

2. LIMITA A SPOJITOST FUNKCE . LIMITA A SPOJITOST FUNKCE Průvodce studiem Funkce y = je definována pro ( ) (>. Z grafu funkce (obr. 3) a z tabulky (a) je vidět že čím více se hodnoty blíží k -3 tím více se funkční hodnoty blíží ke

Více

Výběr báze. u n. a 1 u 1

Výběr báze. u n. a 1 u 1 Výběr báze Mějme vektorový prostor zadán množinou generátorů. To jest V = M, kde M = {u,..., u n }. Pokud je naším úkolem najít nějakou bázi V, nejpřímočařejším postupem je napsat si vektory jako řádky

Více

Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla

Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla Ramseyovy věty Martin Mareš Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla na mé letošní přednášce z Kombinatoriky a grafů I Předpokládá, že čtenář se již seznámil se základní

Více

Vzorová písemka č. 1 (rok 2015/2016) - řešení

Vzorová písemka č. 1 (rok 2015/2016) - řešení Vzorová písemka č. rok /6 - řešení Pavla Pecherková. května 6 VARIANTA A. Náhodná veličina X je určena hustotou pravděpodobností: máme hustotu { pravděpodobnosti C x pro x ; na intervalu f x jinde jedná

Více

Složitosti základních operací B + stromu

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 +

Více

Algoritmy na ohodnoceném grafu

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

Více

7.2.12 Vektorový součin I

7.2.12 Vektorový součin I 7 Vektorový součin I Předpoklad: 708, 7 Při násobení dvou čísel získáváme opět číslo Skalární násobení vektorů je zcela odlišné, protože vnásobením dvou vektorů dostaneme číslo, ted něco jiného Je možné

Více

(4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74,

(4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74, 1. V oboru celých čísel řešte soustavu rovnic (4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74, kde (n) k značí násobek čísla k nejbližší číslu n. (P. Černek) Řešení. Z první rovnice dané soustavy plyne, že číslo

Více

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

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

Více

f(c) = 0. cn pro f(c n ) > 0 b n pro f(c n ) < 0

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

Více

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

Nechť je číselná posloupnost. Pro všechna položme. Posloupnost nazýváme posloupnost částečných součtů řady.

Nechť je číselná posloupnost. Pro všechna položme. Posloupnost nazýváme posloupnost částečných součtů řady. Číselné řady Definice (Posloupnost částečných součtů číselné řady). Nechť je číselná posloupnost. Pro všechna položme. Posloupnost nazýváme posloupnost částečných součtů řady. Definice (Součet číselné

Více

Numerické řešení diferenciálních rovnic

Numerické řešení diferenciálních rovnic Numerické řešení diferenciálníc rovnic Mirko Navara ttp://cmp.felk.cvut.cz/ navara/ Centrum strojovéo vnímání, katedra kybernetiky FEL ČVUT Karlovo náměstí, budova G, místnost 104a ttp://mat.feld.cvut.cz/nemecek/nummet.tml

Více