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

Podobné dokumenty
R zné algoritmy mají r znou složitost

Dynamic programming. Optimal binary search tree

Dynamické programování

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

Návrh Designu: Radek Mařík

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

f(x,y) = max ( f(x 1, y 1)+ f(x 1,y) ) + f(x,y 1) +1 jinak f(x,y,z) = f(x 1, y 1, z 1)+ f(x 1,y,z) + f(x,y 1,z) + f(x,y,z 1)+1 jinak

Algoritmy a datové struktury

a) b) c) Radek Mařík

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Rzné algoritmy mají rznou složitost

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

BINARY SEARCH TREE

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

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

Dynamické datové struktury III.

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

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

Stromy, haldy, prioritní fronty

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

BINARY SEARCH TREE

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Dynamické datové struktury IV.

Datové struktury Úvod

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

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

Rekurzivní algoritmy

Dynamické programování

IB111 Úvod do programování skrze Python

TGH05 - Problém za milion dolarů.

STACK

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Stromy. Jan Kybic.

Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1

5. Dynamické programování

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

Kombinatorika, výpočty

Programování v C++ 1, 16. cvičení

TGH07 - Chytré stromové datové struktury

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í

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Radek Mařík

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

Dynamické programování UIN009 Efektivní algoritmy 1

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

Základy algoritmizace a programování

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

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ávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Dynamické programování

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Prioritní fronta, halda

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

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

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

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Předmět: Algoritmizace praktické aplikace

Stromové struktury v relační databázi

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

Binární soubory (datové, typované)

HASHING GENERAL Hashovací (=rozptylovací) funkce

TGH07 - Chytré stromové datové struktury

12. Globální metody MI-PAA

pak celou úlohu. ani Jako obvykle je static int M, N; [] key, L, R; NIL = -1; cost; roota, rootb; throws IOExceptio // tree roots on { static void

SQL tříhodnotová logika

Algoritmy I, složitost

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

Hledání k-tého nejmenšího prvku


Dynamické datové struktury II.

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

Časová a prostorová složitost algoritmů

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

Paralelní grafové algoritmy

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

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

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.

Dynamické programování

Prioritní fronta, halda (heap), řazení

Návrh designu: Radek Mařík

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

Základy řazení. Karel Richta a kol.

B-Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Jméno:... St. Sk.:. Cvičící:.. Bodů ze cv.: (Tučná čísla indikují počet neuspěvších (z 50) v jednotlivých otázkách) 1.

Časová složitost algoritmů, řazení a vyhledávání

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

IB111 Úvod do programování skrze Python

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Transkript:

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Optimální binární vyhledávací strom Vyvážený, ale ne optimální. Dana. Hugo.9 Lea.8 Ben.5 Fred.5 Jack. Nick Ann Cole Edna Gene Irma Ken Mark Orrie.....6.5.. Klíč Pravděpodobnost dotazu Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Optimální binární vyhledávací strom Cena jednotlivých uzlů v BVS cena uzlu = pravděpodobnost hloubka. Hugo. =.. Dana. =..5 Fred.5 =.5 Gene. hloubka. =.88 cena uzlu = průměrný počet testů na nalezení uzlu při jednom dotazu (Find) Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

X6DSA 5 Θ(n log (n)), Cena vyváženého stromu klíč pravděp. p k hloubka d k p k d k Ann Ben Cole Dana Edna Fred Gene Hugo Irma Jack Ken Lea..8....5...6.5.5.9. =..8 =.. =.8. =.. =.6.5 =.5. =.88. =..6 =..5 =.5.5 =.6.9 =.8 Mark Nick Orrie.... =.8. =.9. =. Cena celkem:.7 Cena celkem = prům. poč. testů na jednu operaci Find. Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Optimální BVS Struktura optimálního BVS s danými pravděpodobnostmi. Cole. Gene.5 Ken.8 Ben.5 Fred.6 Irma.9 Lea Ann. Edna Hugo Jack. Nick...5 Dana Mark Orrie... 5 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

Θ(n log (n)), Cena optimálního BVS klíč pravděp. p k hloubka d k p k d k.. =..8.8 =... =.. 5. 5 =.5.. =.6.5.5 =.5.. =... =.6.6 Ann Ben Cole Dana Edna Fred Gene Hugo Irma Jack Ken Lea Mark Nick Orrie.5.5.9....6 =.8.5 =..5 =..9 =.7. 5 =.. =.. 5 =.5 Cena celkem.56 Zrychlení.7 :.56 = :.7 6 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), 5 5

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet ceny optimálního BVS Xyz p k C k C k cena levého podstromu uzlu k Cena pravého podstromu uzlu k C k C k L k- k k+ R Rekurzivní myšlenka k- Cena = C k + p i + C k + i=l R i=k+ p i p k + p k 7 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

X6DSA 5 The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet ceny optimálního BVS Malé optimální podstromy L R N Nad prvky s indexy od L do R lze jistě vytvořit jeden optimální podstrom. Velikost stromu = poč. uzlů = L-R+ Máme N optimalních podstromů velikosti N- N- podstrom N Celkem máme N * (N+) / různých optimálních podstromů. 8 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Idea rekurzivního řešení: Minimalizace ceny BVS. Předpoklad : Všechny menší optimální stromy jsou známy.. Zkus: k = L, L+, L+,..., R k=l k=l+ k=l+... k=r. Zaregistruj index k, který minimalizuje cenu, tj. hodnotu k- C k + p i + C k + i=l R i=k+ p i + p k. Klíč s indexem k je kořenem optimálního stromu. 9 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

X6DSA 5 The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Minimalizace ceny BVS C(L,R)... Cena optimálního podstromu obsahujícího klíče s indexy L, L+, L+,..., R-, R C(L,R) = k- p i i=l min { C(L, k-) + L k R + C(k+,R) + R p i i=k+ + p k } = = min { C(L, k-) + L k R C(k+,R) + R p i i=l } = (*) = min { C(L, k-) + L k R C(k+,R) } + R p i i=l Hodnota k minimalizující (*) je indexem kořenu optim. podstromu. Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

X6DSA 5 The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Datové struktury pro výpočet optmálního BVS Ceny optimálních podstromů pole C [L][R] (L R) Kořeny optimálních podstromů pole roots [L][R] (L R) L R N L R L R L R N+ N+ diagonála... L= R diagonála... L= R Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Cena konkrétního optimálního podstromu p L=, R=9 p p a b c d e p p 5 p 6 p7 x y z C(L,R) = min { C(L, k-) + C(k+,R) } L k R R + p i i=l t p 8 w p9 C(L,R) = min{ +x, p +y, a+z, b+t, c+w, d+p 9, e+ } R + p i i=l p N Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Strategie DP nejprve se zpracují nejmenší podstromy, pak větší, atd Stop Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), void optimaltree() { int L, R; double min; Výpočet optimálního BVS Výpočet DP tabulek cen a kořenů // size = for( i=; i<=n; i++ ) { C[i][i] = pravděpodobnost[i]; roots[i][i] = i; // size > for( int size = ; size <= N; size++ ) { L = ; R = size; while( R <= N ) { C[L][R] = min(c[l][k-]+c[k+][r], k = L..R); roots[l][r] = k minimalizující předch. řádek ; C[L][R] += sum(c[i][i], i = L..R); L++; R++; } } } Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Vybudování optimálního stromu pomocí rekonstrukční tabulky kořenů void buildtree( int L, int R) { if (R < L) return; int keyindex = roots[l][r]; // keys... sorted array of keys int key = keys[roots[l][r]]; } insert(root, key); // standard BST insert buildtree( L, keyindex - ); buildtree( keyindex +, R ); 5 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Kořeny optimálních podstromů 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 6 7 7 7 7 7 7 7 7 7 5 6 7 7 7 7 7 7 7 7 7 6 7 7 7 7 7 7 7 7 7 7 7 7 8 9 9 9 9 5 6 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Korespondence stromů.8 Ben Ann.. Cole. Edna Dana..5 Fred. Gene.6 Irma Hugo. Jack.5.5 Ken.9 Lea. Nick Mark. Orrie. 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 6 7 7 7 7 7 7 7 7 7 5 6 7 7 7 7 7 7 7 7 7 6 7 7 7 7 7 7 7 7 7 7 7 7 8 9 9 9 9 5 7 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Výpočet optimálního BVS Ceny optimálních podstromů -A -B -C -D 5-E 6-F 7-G 8-H 9-I -J -K -L -M -N 5-O -A...7.9.8.6.7.6..57..9.7.5.56 -B.8.8..9.5.6...5.9.7.5.9. -C....8.8.9.6..66.9..5. -D..6.6.8.56.7.87..59.67.8.86 5-E....5.68.8.8.55.6.77.8 6-F.5...56.7.6..5.6.67 7-G...6.6.6..7.8.5 8-H....5.7.78.89.9 9-I.6.6..6.66.77.8 -J.5.5..9.6.6 -K.5..9.5.5 -L.9... -M..7.9 -N..5 5-O. Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), 8

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Nejdelší společná podposloupnost 9 Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost Dvě posloupnosti A: B: C B E A D D E A D E C D B D A A = 8 B = 7 Společná podposloupnost A: C B E A D D E A B: D E C D B D A C: C D A C = Nejdelší společná podposloupnost (NSP) A: C B E A D D E A B: D E C D B D A C: E D D A C = Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost A n : (a, a,..., a n ) B m : (b, b,..., b m ) C k : (c, c,..., c k ) C k = LCS(A n, B m ) A 8 : B 7 : C : 5 6 7 8 C B E A D D E A D E C D B D A E D D A Rekurzivní pravidla: ( a n = b m ) ==> (c k = a n = b m ) & (C k- = LCS (A n-, B m- ) ) 5 6 7 8 5 6 7 8 A 8 : C B E A D D E A A 7 : C B E A D D E A B 7 : D E C D B D A B 6 : D E C D B D A C : E D D A C : E D D A Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost ( a n!= b m ) & (c k!= a n ) ==> (C k = LCS (A n-, B m ) ) 5 6 7 8 5 6 7 8 A 7 : C B E A D D E A 6 : C B E A D D E B 6 : D E C D B D B 6 : D E C D B D C : E D D C : E D D ( a n!= b m ) & (c k!= b m ) ==> (C k = LCS (A n, B m- ) ) 5 6 7 8 5 6 7 8 A 5 : C B E A D A 5 : C B E A D B 5 : D E C D B B : D E C D B C : E D C : E D Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost Rekurzivní funkce délka LCS C(n,m) = C(n-, m-) + max{ C(n-, m), C(n, m-) } n = or m = n >, m >, a n =b m n >, m >, a n b m Strategie dynamického programování C[n][m] n m for( a=; a<=n; a++ ) for( b=; b<=m; b++ ) C[a][b] =... ; } Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost Konstrukce DP tabulek pro LCS void findlcs() { for( int a=; a<=n; a++ ) for( int b=; b<=m; b++ ) if( A[a] == B[b] ) { C[a][b] = C[a-][b-]+; arrows[a][b] = DIAG; } else if( C[a-][b] > C[a][b-] ) { C[a][b] = C[a-][b]; arrows[a][b] = UP; } else { C[a][b] = C[a][b-]; arrows[a][b] = LEFT; } } Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)),

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), 5 6 7 C B E A D D E A 5 6 7 8 C D B D A D E C A: B: Pole NSP pro CBEADDEA a DECDBDA Nejdelší společná podposloupnost 5

The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Nejdelší společná podposloupnost Výpis NSP -- rekurzivně :) void outlcs( int a, int b ) { if( a == b == ) return; if( arrows[a][b] == DIAG ) { outlcs(a-, b-); // recursion... print(a[a]); //... reverses the sequence! } else if( arrows[a][b] == UP ) outlcs(a-,b); else outlcs(a,b-); } Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), 6