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

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

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

Algoritmy a datové struktury

Stromy, haldy, prioritní fronty

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

Časová a prostorová složitost algoritmů

k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami

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

Dynamické programování. Optimální binární vyhledávací strom

Lineární algebra : Násobení matic a inverzní matice

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

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

Lineární algebra : Násobení matic a inverzní matice

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Lineární algebra : Změna báze

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Lineární programování

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Rekurentní rovnice, strukturální indukce

Datové struktury Úvod

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

Necht tedy máme přirozená čísla n, k pod pojmem systém lineárních rovnic rozumíme rovnice ve tvaru

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Algoritmy I, složitost

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

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

TGH06 - Hledání nejkratší cesty

Rekurzivní algoritmy

Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

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

10. cvičení z PST. 5. prosince T = (n 1) S2 X. (n 1) s2 x σ 2 q χ 2 (n 1) (1 α 2 ). q χ 2 (n 1) 2. 2 x. (n 1) s. x = 1 6. x i = 457.

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Dijkstrův algoritmus

Dynamické datové struktury IV.

Matematika IV 9. týden Vytvořující funkce

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

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od jara 2016

Přednáška 3: Limita a spojitost

R zné algoritmy mají r znou složitost

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

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

1 Polynomiální interpolace

Dynamické datové struktury III.

TGH07 - Chytré stromové datové struktury

Prioritní fronta, halda

Riemannův určitý integrál

10 Přednáška ze

TGH06 - Hledání nejkratší cesty

DMA Přednáška Rekurentní rovnice. takovou, že po dosazení odpovídajících členů do dané rovnice dostáváme pro všechna n n 0 + m pravdivý výrok.

1. Obyčejné diferenciální rovnice

Modely Herbrandovské interpretace

PŘEDNÁŠKA 2 POSLOUPNOSTI

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

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

Dynamické programování

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Value at Risk. Karolína Maňáková

Paralelní grafové algoritmy

6 Skalární součin. u v = (u 1 v 1 ) 2 +(u 2 v 2 ) 2 +(u 3 v 3 ) 2

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

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

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Základy matematické analýzy

Příklad. Řešte v : takže rovnice v zadání má v tomto případě jedno řešení. Pro má rovnice tvar

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

Jarníkův algoritmus. Obsah. Popis

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

8 Kořeny cyklických kódů, BCH-kódy

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

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í

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Návrh Designu: Radek Mařík

7. Analýza rozptylu.

Dynamické programování

ALS1 Přednáška 1. Pravěpodobnost, náhodná proměnná, očekávaná hodnota náhodné proměnné, harmonická čísla

NPRG030 Programování I, 2018/19 1 / :03:07

1 Linearní prostory nad komplexními čísly

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

TGH05 - aplikace DFS, průchod do šířky

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Stromy. Jan Kybic.

To je samozřejmě základní pojem konvergence, ale v mnoha případech je příliš obecný a nestačí na dokazování některých užitečných tvrzení.

Greenova funkce pro dvoubodové okrajové úlohy pro obyčejné diferenciální rovnice

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Věta 12.3 : Věta 12.4 (princip superpozice) : [MA1-18:P12.7] rovnice typu y (n) + p n 1 (x)y (n 1) p 1 (x)y + p 0 (x)y = q(x) (6)

Algoritmy na ohodnoceném grafu

Matematika 2 Úvod ZS09. KMA, PřF UP Olomouc. Jiří Fišer (KMA, PřF UP Olomouc) KMA MA2AA ZS09 1 / 25

Algoritmická matematika 3 Mgr. Petr Osička, Ph.D. ZS Rozděl a panuj

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

Transkript:

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 E., The Art of COmputer Programming, Vol. 3 Addison-Wesley, 998. ISBN 0-20-89685-0, 2, A.

Binární vyhledávací stromy (binary search tree), (BST) Máme lineárně uspořádanou množinu klíčů. Binární vyhledávací strom je strom, kde uzly jsou označeny klíčem, každý uzel má nejvýše dva potomky (nejvýše jednoho levého a nejvýše jednoho pravého). pokud má uzel s klíčem k levého potomka s klíčem l, platí l < k. pokud má uzel s klíčem k pravého potomka s klíčem p, platí k < p. Hledání v binárním vyhledávacím stromu Vstup : strom T, klíč k Výstup: uzel s klíčem k N root(t ); while key(n) k do if key(n) < k) then N left(n) else N right(n)

Co člověka děsí? A proč nás to děsit nemusí? Theorem Průměrný počet porovnání při vyhledávání v BST o N klíčích je asi 2 5 3 2 4 4 5 3 Degenerované stromy 2 ln N.386 log 2 N. To platí za předpokladu, že: pravděpodobnost, že N klíčů bylo vloženo v každém z N! pořadí je stejná. ze stromu se nemazalo. Definujme náhodně vybudovaný BST (randomly build BST), (RBBST) o n prvcích jako strom, který byl na počátku prázdný, a bylo do něj vloženo n prvků v libovolném z n! pořadí.

úspěšné hledání Označme: C n průměrný počet porovnání při úspěšném hledání v BST s N klíči. C n průměrný počet porovnání při neúspěšném hledání v BST s N klíči. C n = + C 0 + C + + C N N () Vysvětlení: počet porovnání při úspěšném hledání klíče k v BST s N klíči je o jedna větší než počet porovnání, který byl potřebný ke vložení klíče k. počet porovnání, který byl potřebný k vložení klíče k do BST s i klíči je roven počtu porovnání při neúspěšném hledání v BST s i klíči. klíč k byl vložen jako i-tý se stejnou pravděpodobností pro všechna i {,..., N}. Proto ten aritmetický průměr.

délka cesty velmi důležitý pojem při analýze algoritmů nad stromy, protože tato hodnota je často přímo vztažená k časové složitosti. Rozšířený binární strom přidáme zvláštní uzly tam, kde měl původní strom prázdný podstrom. Example vnitřní uzel vnější uzel

délka vnější cesty (E external path length): Součet vzdáleností kořene od všech vnějších uzlů. délka vnitřní cesty (I internal path length): Součet vzdáleností kořene od všech vnitřních uzlů. Example 0 2 2 2 2 3 3 3 3 3 3 4 4 délka vnitřní cesty: I = 2 + + 3 + 2 + 0 + 2 + = délka vnější cesty: E = 3 + 3 + 4 + 4 + 3 + 3 + 3 + 2 = 25

Theorem Pro BST o N vnitřních uzlech platí, že E = I + 2N Důkaz. Uvažme smazání jednoho vnitřního uzlu V ve vzdálenosti k od kořene, kde jsou oba potomci vnější: E klesne o 2(k + ), protože potomci V jsou odstraněni a současně stoupne, protože V se stane vnějším uzlem. Čistá změna v E je tedy k 2; čistá změna I je k. Tvrzení vyplyne indukcí.

Pokud předpokládáme, že každý klíč je vyhledáván se stejnou pravděpodobností a že každý z N + intervalů mezi klíči a vně extrémních hodnot klíčů je stejně pravděpodobný, dostáváme: C n = + I N, C n = E N + Protože E = I + 2N, dostáváme zajímavý vztah mezi C n a C n: ( C n = + ) C n (2) N Dáme dohromady (??) a (??), a dostáváme: (N + )C n = 2N + C 0 + C + + C N. (3)

(N + )C n = 2N + C 0 + C + + C N. (4) Rekurence se snadno zbavíme, když od (??) odečteme rovnici NC N = 2(N ) + C 0 + C + + C N 2. Dostaneme Po úpravě... (to je ta samá rovnice pro N ) (N + )C n NC N = 2 + C N. C n = C N + 2 N +

Intermezzo: Harmonická čísla Harmonická čísla rekurzivně: 0 pro n = 0, H n = H n + jinak. n Takže C n = 2H N+ 2. Po dosazení do (??) a zjednodušení dostáváme ( C n = 2 + ) H n 3 2 ln N N... odsud pak tvrzení věty

Jiná úvaha o tomtéž Víme, že složitost vyhledávání v nejhorším případě BST je O(h), kde h je výška stromu. Ukážeme, že platí následující věta: Theorem Očekávaná výška RBBST o n prvcích je O(log(n)).

Důkaz Nadefinujeme si tyto tři náhodné proměnné: výška RBBST o n prvcích X n, exponenciální výška Y n = 2 Xn, klíč v kořeni RBBST R n. Hodnota R n je se stejnou pravděpodobností kterýkoli z prvků {,..., n}. Pokud R n = i, pak levý podstrom je RBBST o i prvcích pravý podstrom je RBBST o n i prvcích Y n = 2 max(y i, Y n i ) Jako krajní případy Y n máme Y =, Y 0 = 0.

Dále definujeme náhodné proměnné Z n,, Z n,2,..., Z n,n, kde Z n,i = I{R n = i}. Máme Pr{R n = i} = /n pro i =, 2,..., n, a tedy E[Z n,i ] = /n pro i =, 2,..., n. Protože právě jedna hodnota Z n,i = a všechny ostatní jsou 0, máme taky: Y n = n Z n,i (2 max(y i, Y n i )) i= Ukážeme, že E[Y n ] je polynomická v n, z toho pak vyplyne, že E[X n ] = O(log n).

Z n,i je nezávislá na Y i a Y n i : Když vybereme R n = i, levý podstrom (s exp. výškou Y i ) je náhodně vybudován z i klíčů, které jsou menší než i. Tento podstrom je jako jakýkoli jiný podstrom vybudovaný z i prvků: pouze počet prvků v něm je závisly na volbě R n, jeho struktura není nijak závislá na volbě R n. stejně tak pro pravý podstrom. A proto...

[ n ] E[Y n ] = E Z n,i (2 max(y i, Y n i )) = = i= n E [Z n,i (2 max(y i, Y n i ))] i= n E [Z n,i ] E [2 max(y i, Y n i )] i= n = n E [2 max(y i, Y n i )] i= = 2 n E [max(y i, Y n i )] n 2 n i= n (E [Y i ] + E [Y n i ]) i=

Z předchozího slajdu: E[Y n ] 2 n n (E [Y i ] + E [Y n i ]) i= Tam se každý term E[Y 0 ], E[Y ],..., E[Y n ] vyskytuje dvakrát; můžeme zjednodušit na E[Y n ] 4 n E [Y i ] n i=0 Teď ukážeme (substituční metodou), že pro všechna kladná n je toto ekvivalentní s E[Y n ] ( ) n + 3 4 3 n ( ) ( ) i + 3 n + 3 Přitom použijeme rovnost =. 3 4 (oveříme ji na cvičení) i=0

Pro základní případ oveříme, že ohraničení platí: = Y = E [Y ] ( ) + 3 =. 4 Dále E[Y n ] 4 n E[Y i ] = 4 n ( ) i + 3 = n n 4 3 i=0 i=0 = n ( ) i + 3 = ( ) n + 3 = n 3 n 4 i=0 = n (n + 3)! 4!(n )! = (n + 3)! = ( ) n + 3 4 3!n! 4 3

Platí (ne vždy, ale v tomto případě ano), že A z toho máme, že 2 E[Xn] 4 2 E[Xn] E[2 Xn ] = E[Y n ]. ( ) n + 3 3 = (n + 3)(n + 2)(n + ) 4 6 Zlogaritmováním obou stran dostáváme E[X n ] = O(log n). Odtud tvrzení věty.

Optimální stromy Pokud je každý klíč vyhledáván stejně často je samozřejmě nejlepší vyvážený strom. Jak je to, pokud jsou frekvence vyhledávání klíčů různé? Uvažujme pravděpodobnosti p,..., p n pravděpodobnosti q 0, q,... q n, kde p i je pravděpodobnost hledání i-tého vloženého klíče K i, q i je pravděpodobnost hledání klíče, který leží mezi klíči K i a K i+, q 0 je pravděpodobnost hledání klíče, který leží před klíčem K, q n je pravděpodobnost hledání klíče, který leží za klíčem K n, t.ž. p + p 2 +... p n + q 0 + q + q n =. (toto vlastně nebudeme potřebovat; pravděpodobnostem budeme říkat váhy)

Chceme najít binární vyhledávací strom (optimální strom), který minimalizuje počet porovnání během hledaní: n p j (level( j n + ) + q k (level( j= k=0 k )), (5) j kde je j-tý vnitřní uzel v symetrickém uspořádání a (k + )-tý vnější uzel a kde kořen má level 0. k je

2p 2 + p 2 + q 0 + 3q + 3q 2 + 2q 3 p 2 + 2p 3 + q 0 + 2q + 3q 2 + 3q 3 Example Mějme klíče,2,3, s vahami p, p 2, p 3 a q 0, q, q 2, q 3. Je 5 možných stromů: 3 3 2 3 3 2 2 0 2 3 0 2 0 2 3 2p + p 2 + 3q 0 + p + 2p 2 + 2q 0 + p + p 3 + 2q 0 + 3q + 2q 2 + q 3 3q + 3q 2 + q 3 2q + 2q 2 + 2q 3 0 3 2 2 3 0 2 3 2 3

Pozorování Všechny podstromy optimálního stromu jsou optimální. Example Pokud je tento strom optimální pro váhy 3 (p, p 2, p 3 ; q 0, q, q 3 ), pak jeho levý podstrom musí být optimální pro 3 (p, p 2 ; q 0, q, q 2 ). Jakékoli zlepšení v podstromu vede ke zlepšení celého 0 2 stromu. 2 Tento princip využijeme a budeme konstruovat větší a větší podstromy. pozn.: obecně se tomuto principu říká dynamické programování.

Pozorování Všechny podstromy optimálního stromu jsou optimální. Označme (pro 0 i j n): c(i, j) - cena optimálního podstromu s vahami (p i+,..., p j ; q i,..., q j ), w(i, j) - součet těchto vah, tj. p i+ + + p j + q i + + q j. Vyplývá, že c(i, i) = 0 c(i, j) = w(i, j) + min (c(i, k ) + c(k, j)), pro i < j, (6) i<k j protože minimální možná cena stromu s kořenem k je w(i, j) + c(i, k ) + c(k, j).

Pro i < j, nechť R(i, j) je množina všech k, pro které je v (??) dosaženo minimum (tj. množina možných kořenů optimálních stromů). Rovnice (??) umožňuje vyhodnotit c(i, j) pro j i =, 2,..., n. Je asi 2 n2 takových hodnot. Minimalizace je prováděna pro 6 n3 hodnot k. To znamená, že můžeme určit optimální strom v čase O(n 3 ) a paměti O(n 2 ). Ve skutečnosti jsme na tom ještě lépe...

My totiž nepotřebujeme počítat celou R(i, j) stačí nám jeden reprezentant r(i, j). Pokud vypočítáme r(i, j ) a r(i +, j), můžeme automaticky předpokládat, že r(i, j ) r(i, j) r(i +, j). To omezí hledání minima: místo j i hodnot k stačí prozkoumat r(i +, j) r(i, j ) + hodnot. Celkové množství práce (když j i = d) je omezeno teleskopickými posloupnostmi r(i+, j) r(i, j )+ = r(n d+, n) r(0, d )+n d+ < 2n d j n i=j d Časová složitost je tedy O(n 2 ).

Algoritmus hledání optimálního stromu Vstup: 2N + nezáporných vah (p,..., p n ; q 0,..., q n ). Výstup: binární vyhledávací stromy t(i, j), které mají minimální cenu vyhledávání pro váhy (p i+,..., p j ; q i,..., q j ). Budeme počítat 3 pole: c[i, j], pro 0 i j n, cena stromu t(i, j) r[i, j], pro 0 i < j n, kořen stromu t(i, j) w[i, j], pro 0 i j n, celková váha stromu t(i, j) Jak potom číst výsledek: pokud i = j, pak t(i, j) je null. jinak jeho levý podstrom je t(i, r[i, j] ) a pravý podstrom je t(r[i, j], j).

Hledání optimálního stromu Vstup : 2n + nezáporných vah (p,..., p n ; q 0,..., q n ) Výstup: binární vyhledávací stromy t(i, j), které mají minimální cenu vyhledávání pro váhy (p i+,..., p j ; q i,..., q j ) Inicializace; Pro 0 i n: c[i, i] 0; w[i, i] q i w[i, j] w[i, j ] + p j + q j pro j = i +,..., N; Pro j n: c[j, j] w[j, j]; r[j, j] j; for d 2 to n do for j d to n do i j d; c[i, j] w[i, j] + min r[i,j ] k r[i+,j] r[i, j] k pro které nastává to minimum; (c[i, k ] + c[k, j]);

Vstup: p i = (4,, 2, 2, 6); q i = (,,, 3, 2, ). Inicializace: W C R 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 3 6 7 9 2 3 4 5

d = 2 3 4 5 j = 2 3 4 5 i = 2 2 = 0 r[i, j ] = r[0, ] = r[i +, j] = r[, 2] = 2 k = :c[i, k ] + c[k, j] = = c[0, 0] + c[, 2] = 3 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 2] = 6 c[i, j] = c[0, 2] w[0, 2] + 3 = r[i, j] = r[0, 2] W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 3 2 3 6 4 7 9 5

d = 2 3 4 5 j = 2 3 4 5 i = 3 2 = r[i, j ] = r[, 2] = 2 r[i +, j] = r[2, 3] = 3 k = 2 :c[i, k ] + c[k, j] = = c[, ] + c[2, 3] = 6 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 3] = 3 c[i, j] = c[, 3] w[, 3] + 3 = r[i, j] = r[, 3] 3 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 3 6 2 3 3 4 7 9 5

d = 2 3 4 5 j = 2 3 4 5 i = 4 2 = 2 r[i, j ] = r[2, 3] = 3 r[i +, j] = r[3, 4] = 4 k = 3 :c[i, k ] + c[k, j] = = c[2, 2] + c[3, 4] = 7 k = 4 :c[i, k ] + c[k, j] = = c[2, 3] + c[4, 4] = 6 c[i, j] = c[2, 4] w[2, 4] + 6 = 6 r[i, j] = r[2, 4] 4 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 3 6 6 7 2 3 3 4 4 9 5

d = 2 3 4 5 j = 2 3 4 5 i = 5 2 = 3 r[i, j ] = r[3, 4] = 4 r[i +, j] = r[4, 5] = 5 k = 4 :c[i, k ] + c[k, j] = = c[3, 3] + c[4, 5] = 9 k = 5 :c[i, k ] + c[k, j] = = c[3, 4] + c[5, 5] = 7 c[i, j] = c[3, 5] w[3, 5] + 7 = 2 r[i, j] = r[3, 5] 5 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 3 6 6 7 2 9 2 3 3 4 4 5 5

d = 2 3 4 5 j = 3 4 5 i = 3 3 = 0 r[i, j ] = r[0, 2] = r[i +, j] = r[, 3] = 3 k = :c[i, k ] + c[k, j] = = c[0, 0] + c[, 3] = k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 3] = 2 k = 3 :c[i, k ] + c[k, j] = = c[0, 2] + c[3, 3] = W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 3 6 6 7 2 9 2 3 3 4 4 5 5

d = 2 3 4 5 j = 3 4 5 i = 4 3 = r[i, j ] = r[, 3] = 3 r[i +, j] = r[2, 4] = 4 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 4] = 0 k = 4 :c[i, k ] + c[k, j] = = c[, 3] + c[4, 4] = c[i, j] = c[, 4] w[, 4] + 0 = 22 r[i, j] = r[, 4] 3 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 3 22 6 6 7 2 9 2 3 3 3 4 4 5 5

d = 2 3 4 5 j = 3 4 5 i = 5 3 = 2 r[i, j ] = r[2, 4] = 4 r[i +, j] = r[3, 5] = 5 k = 4 :c[i, k ] + c[k, j] = = c[2, 3] + c[4, 5] = 5 k = 5 :c[i, k ] + c[k, j] = = c[2, 4] + c[5, 5] = 6 c[i, j] = c[2, 5] w[2, 5] + 5 = 32 r[i, j] = r[2, 5] 4 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 3 22 6 6 32 7 2 9 2 3 3 3 4 4 4 5 5

d = 2 3 4 5 j = 4 5 i = 4 4 = 0 r[i, j ] = r[0, 3] = r[i +, j] = r[, 4] = 3 k = :c[i, k ] + c[k, j] = = c[0, 0] + c[, 4] = 22 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 4] = 22 k = 3 :c[i, k ] + c[k, j] = = c[0, 2] + c[3, 4] = 8 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 35 3 22 6 6 32 7 2 9 3 2 3 3 3 4 4 4 5 5

d = 2 3 4 5 j = 4 5 i = 5 4 = r[i, j ] = r[, 4] = 3 r[i +, j] = r[2, 5] = 4 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 5] = 24 k = 4 :c[i, k ] + c[k, j] = = c[, 3] + c[4, 5] = 20 c[i, j] = c[, 5] w[, 5] + 20 = 39 r[i, j] = r[, 5] 4 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 35 3 22 39 6 6 32 7 2 9 3 2 3 3 4 3 4 4 4 5 5

d = 2 3 4 5 j = 5 i = 5 5 = 0 r[i, j ] = r[0, 4] = 3 r[i +, j] = r[, 5] = 4 k = 3 :c[i, k ] + c[k, j] = = c[0, 2] + c[3, 5] = 32 k = 4 :c[i, k ] + c[k, j] = = c[0, 3] + c[4, 5] = 33 c[i, j] = c[0, 5] w[0, 5] + 32 = 56 r[i, j] = r[0, 5] 3 W = C = R = 6 8 3 7 24 3 8 2 9 6 0 7 3 7 4 2 9 6 24 35 56 3 22 39 6 6 32 7 2 9 3 3 2 3 3 4 3 4 4 4 5 5

p = (, 5, 2, 2, ); q = (3,, 3,, 2, ) Inicializace: W C R 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 9 6 5 4 2 3 4 5

d = 2 3 4 5 j = 2 3 4 5 i = 2 2 = 0 r[i, j ] = r[0, ] = r[i +, j] = r[, 2] = 2 k = :c[i, k ] + c[k, j] = = c[0, 0] + c[, 2] = 9 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 2] = 5 c[i, j] = c[0, 2] w[0, 2] + 5 = 8 r[i, j] = r[0, 2] 2 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 9 2 2 3 6 4 5 4 5

d = 2 3 4 5 j = 2 3 4 5 i = 3 2 = r[i, j ] = r[, 2] = 2 r[i +, j] = r[2, 3] = 3 k = 2 :c[i, k ] + c[k, j] = = c[, ] + c[2, 3] = 6 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 3] = 9 c[i, j] = c[, 3] w[, 3] + 6 = 8 r[i, j] = r[, 3] 2 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 9 8 6 2 2 2 3 4 5 4 5

d = 2 3 4 5 j = 2 3 4 5 i = 4 2 = 2 r[i, j ] = r[2, 3] = 3 r[i +, j] = r[3, 4] = 4 k = 3 :c[i, k ] + c[k, j] = = c[2, 2] + c[3, 4] = 5 k = 4 :c[i, k ] + c[k, j] = = c[2, 3] + c[4, 4] = 6 c[i, j] = c[2, 4] w[2, 4] + 5 = 5 r[i, j] = r[2, 4] 3 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 9 8 6 5 5 2 2 2 3 3 4 4 5

d = 2 3 4 5 j = 2 3 4 5 i = 5 2 = 3 r[i, j ] = r[3, 4] = 4 r[i +, j] = r[4, 5] = 5 k = 4 :c[i, k ] + c[k, j] = = c[3, 3] + c[4, 5] = 4 k = 5 :c[i, k ] + c[k, j] = = c[3, 4] + c[5, 5] = 5 c[i, j] = c[3, 5] w[3, 5] + 4 = r[i, j] = r[3, 5] 4 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 9 8 6 5 5 4 2 2 2 3 3 4 4 5

d = 2 3 4 5 j = 3 4 5 i = 3 3 = 0 r[i, j ] = r[0, 2] = 2 r[i +, j] = r[, 3] = 2 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 3] = c[i, j] = c[0, 3] w[0, 3] + = 27 r[i, j] = r[0, 3] 2 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 9 8 6 5 5 4 2 2 2 2 3 3 4 4 5

d = 2 3 4 5 j = 3 4 5 i = 4 3 = r[i, j ] = r[, 3] = 2 r[i +, j] = r[2, 4] = 3 k = 2 :c[i, k ] + c[k, j] = = c[, ] + c[2, 4] = 5 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 4] = 4 c[i, j] = c[, 4] w[, 4] + 4 = 30 r[i, j] = r[, 4] 3 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 9 8 30 6 5 5 4 2 2 2 2 3 3 3 4 4 5

d = 2 3 4 5 j = 3 4 5 i = 5 3 = 2 r[i, j ] = r[2, 4] = 3 r[i +, j] = r[3, 5] = 4 k = 3 :c[i, k ] + c[k, j] = = c[2, 2] + c[3, 5] = k = 4 :c[i, k ] + c[k, j] = = c[2, 3] + c[4, 5] = 0 c[i, j] = c[2, 5] w[2, 5] + 0 = 22 r[i, j] = r[2, 5] 4 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 9 8 30 6 5 22 5 4 2 2 2 2 3 3 3 4 4 4 5

d = 2 3 4 5 j = 4 5 i = 4 4 = 0 r[i, j ] = r[0, 3] = 2 r[i +, j] = r[, 4] = 3 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 4] = 20 k = 3 :c[i, k ] + c[k, j] = = c[0, 2] + c[3, 4] = 23 c[i, j] = c[0, 4] w[0, 4] + 20 = 40 r[i, j] = r[0, 4] 2 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 40 9 8 30 6 5 22 5 4 2 2 2 2 2 3 3 3 4 4 4 5

d = 2 3 4 5 j = 4 5 i = 5 4 = r[i, j ] = r[, 4] = 3 r[i +, j] = r[2, 5] = 4 k = 3 :c[i, k ] + c[k, j] = = c[, 2] + c[3, 5] = 20 k = 4 :c[i, k ] + c[k, j] = = c[, 3] + c[4, 5] = 22 c[i, j] = c[, 5] w[, 5] + 20 = 38 r[i, j] = r[, 5] 3 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 40 9 8 30 38 6 5 22 5 4 2 2 2 2 2 3 3 3 3 4 4 4 5

d = 2 3 4 5 j = 5 i = 5 5 = 0 r[i, j ] = r[0, 4] = 2 r[i +, j] = r[, 5] = 3 k = 2 :c[i, k ] + c[k, j] = = c[0, ] + c[2, 5] = 27 k = 3 :c[i, k ] + c[k, j] = = c[0, 2] + c[3, 5] = 29 c[i, j] = c[0, 5] w[0, 5] + 27 = 49 r[i, j] = r[0, 5] 2 W = C = R = 3 5 3 6 20 22 9 2 6 8 3 6 0 2 5 7 2 4 5 8 27 40 49 9 8 30 38 6 5 22 5 4 2 2 2 2 2 2 3 3 3 3 4 4 4 5

Požadavky ke zkoušce A -- vše C -- úspěšné hledání v RBBST (i s důkazem), -- očekávaná výška RBBST (bez důkazu), -- optimální stromy -- algoritmus + idea algoritmu. E -- úspěšné hledání v RBBST (bez důkazu), -- očekávaná výška RBBST (bez důkazu), -- optimální stromy (algoritmus).