Dynamické programování

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

Download "Dynamické programování"

Transkript

1 Dynamické programování Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 207 Datové struktury a algoritmy, B6B36DSA 05/207, Lekce 2 Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, /68

2 Myšlenka dynamického programování Definice funkce f(x,y) = (x = 0) (y = 0) 2 f(x, y-) + f(x-,y) (x > 0) && (y > 0) Otázka f(0,0) =? Program int f(int x, int y) { if ( (x == 0) (y == 0)) return ; return (2* f(x,y-) + f(x-,y)); } print( f(0,0) ); Odpověď f(0,0) = Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 2/68

3 Myšlenka dynamického programování Jednoduchá analýza int count = 0; public static int f(int x, int y) { count++; if ( (x == 0) (y == 0)) return ; return (2* f(x, y-) + f(x-,y)); } xyz = f(0,0); print(count); Výsledek analýzy count = Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 3/68

4 Myšlenka dynamického programování Detailnější analýza strom rekurzivního volání f(0,0) f(0,9) f(9,0) f(0,8) f(9,9) f(9,9) f(8,0) f(0,7) f(9,8) f(9,8) f(8,9) f(9,8) f(8,9) f(8,9) f(7,0) f(0,6) 9,7 9,7 8,8 9,7 8,8 8,8 7,9 9,7 8,8 8,8 7,9 8,8 7,9 7,9 f(6,0) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 4/68

5 Myšlenka dynamického programování Detailnější analýza pokračuje efektivita rekurzivního volání f(0,0) počet: volání hodnot f(9,0) 2 2 f(9,9) f(9,9) f(8,0) 4 3 f(9,8) f(8,9) f(9,8) f(8,9) f(8,9) f(7,0) 8 4 9,7 8,8 8,8 7,9 9,7 8,8 8,8 7,9 8,8 7,9 7,9 f(6,0) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 5/68

6 Myšlenka dynamického programování f(x,y) = (x = 0) (y = 0) 2 f(x, y-) + f(x-,y) (x > 0) && (y > 0) x 0 f(0,0) f(,0) f(2,0) f(0,0) f(0,) f(,) 2 f(0,2) 3 f(x,y-) 2 f(x-,y) f(x,y) f(0,8) 9 f(9,9) f(0,9) 0 f(0,0) f(8,0) f(9,0) f(0,0) y Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 6/68

7 Myšlenka dynamického programování f(x,y) = (x = 0) (y = 0) 2 f(x, y-) + f(x-,y) (x > 0) && (y > 0) x f(x,y-) 2 f(x-,y) f(x,y) y Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 7/68

8 Myšlenka dynamického programování Všechny hodnoty se předpočítají static int dynarr [N+][N+]; void filldynarr() { int xy, x, y; for (xy = 0; xy <= N; xy++) dynarr[0][xy] = dynarr[xy][0] = ; } for (y = ; y <= N; y++) for (x = ; x <= N; x++) dynarr[y][x] = 2*dynArr[y-][x] + dynarr[y][x-]; Volání funkce int f(int x,int y) { return dynarr[y][x]; } Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 8/68

9 Rozděl-a-panuj vs. dynamické programování Metoda rozděl-a-panuj je vhodná pro řešení úloh, které lze rozdělit na nezávislé podúlohy: Rozděl úlohu na nezávislé podúlohy. Rekurzivně vyřeš podúlohy. Zkombinuj řešení podúloh do celkového výsledku úlohy. Dynamické programování (DP) je vhodné pro řešení úloh, ve kterých se podúlohy překrývají, t.j., řeší se stejné podúlohy. Pro takové úlohy není metoda rozděl-a-panuj vhodná, protože sdílené podúlohy se opakovaně (redundantně) řeší znovu a znovu, což muže vést na řádově vyšší složitost. Metody DP si hodnoty dříve vyřešených podúloh zapamatují a při jejich znovuobjevení je využijí. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 9/68

10 Význam termínu DP Termín programování v sousloví dynamické programování nemá standardní význam vytváření počítačového kódu. Je odvozen z termínu matematické programování, což je synonymum pro optimalizaci. V této interpretaci, slovo program znamená optimální či přijatelný plán (rozpis, rozvrh) pro provedení nějaké množiny souvisejících úkonů. Programování v tomto smyslu tedy znamená metodu nalezení takového plánu či rozvrhu akcí. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 0/68

11 Dynamické programování pro řešení optimalizačních úloh Definice optimalizační úlohy: Z více možných řešení hledáme řešení s optimální cenou (maximální či minimální hodnotou). Vytvoření DP algoritmu pro řešení dané optimalizační úlohy se skládá ze 4 kroků: Charakterizuj strukturu optimálního řešení. Rekurzivně definuj hodnotu optimálního řešení. Vypočítej efektivně hodnotu optimálního řešení: metodou shora dolů, metodou zdola nahoru. Zrekonstruuj strukturu optimálního řešení z vypočtených hodnot. Poslední bod odpadá, pokud stačí pouze cena (hodnota) optimálního řešení. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, /68

12 Definice: Příklad: Řetězové násobení matic Je dána posloupnost matic A,A 2,...,A n, matice A i má rozměry d i d i. Řetězové násobení matic (ŘNM) je úkol vypočítat součin A = A A 2 A n s minimální aritmetickou složitostí (= cenou řešení). Jinými slovy, úkolem je najít takové uzávorkování pořadí násobení matic, které vede na vynásobení s nejmenším počtem aritmetických operací. Předpokládáme klasické násobení matic řádky krát sloupce. Složitost součinu A i A i+ aproximujeme výrazem d i d i d i+ (zanedbáváme konstanty a nižší členy). Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 2/68

13 Vlastnosti ŘNM Poznámky: Násobení matic je asociativní, proto jakékoli uzávorkování dá správný výsledek A. Různé pořadí násobení má dramatický vliv na aritmetickou složitost výpočtu. Přitom kombinatorická složitost ŘNM je exponenciální, takže řešení hrubou silou, zkoušením všech možností, není myslitelná. Příklad: Uvažujme n = 3 a d 0 = 5, d = 50, d 2 = 0 a d 3 = 30. Pak uzávorkování (A A2) A3 má aritmetickou složitost = = 4000, zatímco: uzávorkování A (A2 A3) má složitost = = 22500!!! Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 3/68

14 Počet různých uzávorkování Označme Z(n) počet všech různých způsobů, jak uzávorkovat součin A A 2 A n. Posloupnost matic můžeme rozdělit na dvě části hranicí mezi A k a A k+ pro libovolné k =, 2,..., n a pak uzávorkovat rekurzívně a nezávisle na sobě obě vzniklé podposloupnosti A,...,A k a A k+,...,a n. Proto platí rekurentní vztah: Řešením jsou tzv. Catalanova čísla: Z(n) = C(n ): Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 4/68

15 Příklady použití Catalanových čísel Počet kořenových binárních stromů s n listy je C(n-). Počet korektních uzávorkování 2n závorek je C(n). ((())) ()(()) ()()() (())() (()()) Počet způsobů, jak se v mřížce n n dostat z levého dolního do pravého horního rohu, aniž bychom překročili diagonálu nebo se vraceli, je C(n). Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 5/68

16 První krok DP: Charakterizování optimálního závorkování Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 6/68

17 Druhý krok DP: Rekurzivní definice ceny optimálního závorkování Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 7/68

18 Třetí krok DP: Algoritmus výpočtu ceny optimálního závorkování Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 8/68

19 Strom rekurzivních volání RECRNM Důvod exponenciální složitosti je podobný jako u rekurzivního výpočtu Fibonacciho čísel. Celkový počet hodnot m[*,* ], které je třeba vypočítat pro zjištění hodnoty m[, n], je pouze počet všech dvojic i, j takových, že i j n, což je Dochází však masivně k opakovanému výpočtu stejných hodnot, viz příklad stromu rekurzivních volání RECRNM(, 4). Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 9/68

20 Časová složitost RECRNM(d,, n) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 20/68

21 Třetí krok DP algoritmu: Efektivní varianta. Nerekurzivní algoritmus výpočtu ceny optim. závorkování zdola nahoru. Předpoklady: Vstupem je pole d[0,..., n] rozměrů matic. Výstupem jsou 2 pole: m[,..., n,,..., n], kam se ukládají ceny optimálního závorkování pro výpočet A i...j, h[... n, 2... n], kam se ukládají příslušné hodnoty hranic optimálního závorkování. Princip: Systematické zaplňování tabulky zdola nahoru pro všechny dvojice i, j, kde i j n ( hodnot). Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 2/68

22 Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 22/68

23 Příklad běhu BOTTOMUPRNM(6, d,m, h) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 23/68

24 Příklad běhu BOTTOMUPRNM(6, d,m, h) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 24/68

25 Příklad běhu BOTTOMUPRNM(6, d,m, h) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 25/68

26 Příklad běhu BOTTOMUPRNM(6, d,m, h) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 26/68

27 Příklad běhu BOTTOMUPRNM(6, d,m, h) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 27/68

28 Třetí krok DP algoritmu: Varianta 2 Rekurzivní algoritmus (shora dolu) výpočtu ceny optimálního závorkování s tabelací Princip tabelace (anglicky memoization): Algoritmus také vytváří tabulku s hodnotami řešení podúloh. Každá položka tabulky je také inicializována speciální hodnotou Neurceno. Řídící struktura pro zaplňování však není záplavové plnění zdola nahoru jako ve variantě, ale pořadí vyvolávané rekurzívním algoritmem. První rekurzívně vyvolané řešení dané podúlohy provede výpočet a výsledek uloží do příslušného místa v tabulce. Následné opakované volání řešení téže podúlohy pouze přečte tuto hodnotu z tabulky. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 28/68

29 Rekurzivní algoritmus s tabelací Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 29/68

30 Strom rekurzivních volání MEMRECRNM Zakroužkované uzly stromu rekurzivních volání se nepočítají, ale pouze načtou z tabulky. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 30/68

31 Srovnání MEMRECRNM a BOTTOMUPRNM Lemma: Oba algoritmy mají složitost O(n 3 ). Srovnání: Algoritmus MEMRECRNM je svojí podstatou metoda shora dolů, kdežto BOTTOMUPRNM je metoda zdola nahoru. Pokud logika výpočtu vyžaduje, aby každá podúloha byla řešena aspoň jednou, pak BOTTOMUPRNM je rychlejší o multiplikativní konstantu. Pravidelnost přístupu do tabulky pak uspoří čas i díky menším výpadkům skrytých pamětí a efektivnějším tokům dat mezi pamětí a procesorem. Pokud rekurzivní sestup umožní, že některé podúlohy se vůbec nevyvolají, pak může být rychlejší MEMRECRNM. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 3/68

32 Čtvrtý krok DP algoritmu: Konstrukce optimálního řešení úlohy ŘNM Tabulka h[... n, 2... n] obsahuje hodnoty hranic pro optimální závorkování při ŘNM. Díky Lemmatu o možném uzávorkování je konstrukce optimálního řešení triviální - rekurzivním sestupem. Na nejvyšší úrovni to je h[, n]: Nejprve rekurzívně optimálně vypočteme A A h[,n], pak A h[,n]+ A n a výsledné matice nakonec vynásobíme. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 32/68

33 Čtvrtý krok DP algoritmu: Konstrukce optimálního řešení úlohy ŘNM Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 33/68

34 DYNAMICKÉ PROGRAMOVÁNÍ: OPTIMÁLNÍ BINÁRNÍ VYHLEDÁVACÍ STROM Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 34/68

35 Optimální binární vyhledávací strom Vyvážený, ale ne optimální 0.0 Dana Hugo 0.04 Lea Ben Fred Jack Nick 0.03 Ann Cole Edna Gene Irma Ken Mark Orrie Klíč Pravděpodobnost dotazu Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 35/68

36 Optimální binární vyhledávací strom Cena jednotlivých uzlů v BVS cena uzlu = pravděpodobnost hloubka Hugo = Dana = 0.02 Fred = 0.5 Gene 0.22 hloubka = 0.88 cena uzlu = průměrný počet testů na nalezení uzlu při jednom dotazu (Find) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 36/68

37 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 = = = = = = = = = = = = 0.8 Mark Nick Orrie = = = 0.04 Cena celkem: 3.47 Cena celkem = prům. poč. testů na jednu operaci Find. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 37/68

38 Optimální BVS Struktura optimálního BVS s danými pravděpodobnostmi 0.2 Cole Gene 0.22 Ken Ben Fred Irma Lea 0.09 Ann 0.04 Edna Hugo Jack Nick Dana Mark Orrie Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 38/68

39 klíč pravděp. p k hloubka d k p k d k = = = = = = = = Ann Ben Cole Dana Edna Fred Gene Hugo Irma Jack Ken Lea Mark Nick Orrie Cena optimálního BVS Zrychlení 3.47 : 2.56 = : = = = = = = = 0.05 Cena celkem 2.56 Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 39/

40 Výpočet ceny optimálního BVS Xyz p k C k C 2k cena levého podstromu uzlu k Cena pravého podstromu uzlu k C 2k C k L k- k k+ R Rekurzivní myšlenka k- Cena = C k + p i + C 2k + i=l R i=k+ p i p k + p k Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 40/68

41 Výpočet ceny optimálního BVS Malé optimální podstromy 2 L R N Nad prvky s indexy od L do R lze jistě vytvořit jeden optimální podstrom. Velikost stromu = poč. uzlů = R-L+ Máme N optimalních podstromů velikosti N- 2 N-2 3 podstrom N Celkem máme N * (N+) /2 různých optimálních podstromů. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 4/68

42 Idea rekurzivního řešení: Minimalizace ceny BVS. Předpoklad : Všechny menší optimální stromy jsou známy. 2. Zkus: k = L, L+, L+2,..., R k=l k=l+ k=l+2... k=r 3. Zaregistruj index k, který minimalizuje cenu, tj. zaregistruj hodnotu: k- C k + p i + C 2k + p i + p k i=l R i=k+ 4. Klíč s indexem k je kořenem optimálního stromu. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 42/68

43 Minimalizace ceny BVS C(L,R)... Cena optimálního podstromu obsahujícího klíče s indexy L, L+, L+2,..., R-, R k- C(L,R) = min { C(L, k-) + L k R i=l p i + C(k+,R) + R p i i=k+ + p k } = = min { C(L, k-) + L k R C(k+,R) + R i=l p i } = (*) = min { C(L, k-) + L k R C(k+,R) } + R i=l p i Hodnota k minimalizující (*) je indexem kořene optimálního podstromu. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 43/68

44 Datové struktury pro výpočet optimá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 2 3 R N L R L 2 3 R L R N+ 0 N+ 0 diagonála... L = R diagonála... L = R Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 44/68

45 Výpočet optimálního BVS Cena konkrétního optimálního podstromu p p 2 L=3, R=9 p 3 a b c d e p 4 p 5 x y z C(L,R) = min { C(L, k-) + C(k+,R) } L k R R + p i i=l p 6 p7 t 0 (nuly na diagonále a pod ní ) p 8 w p9 C(L,R) = min{ 0+x, p 3 +y, a+z, b+t, c+w, d+p 9, e+0 } R + p i i=l p N Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 45/68

46 Výpočet optimálního BVS Strategie dynamického programování nejprve se zpracují nejmenší podstromy, pak větší, atd Stop Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 46/68

47 Výpočet optimálního BVS Výpočet polí cen a kořenů void optimaltree() { int L, R, k, size; double min; // size = for (int i=0; i<=n; i++) { C[i][i] = pravděpodobnost[i]; R[i][i] = i; } // size > for (size = 2; 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++; } } } Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 47/68

48 Výpočet optimálního BVS Vybudování optimálního stromu pomocí pole kořenů void buildtree(int L, int R) { int key; if (R < L) return; key = roots[l][r]; insert(root, key); // standard BST insert buildtree( L, key-); buildtree( key+, R); } Volání funkce buildtree vybuduje optimální strom: buildtree(,n); Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 48/68

49 Výpočet optimálního BVS Kořeny optimálních podstromů Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 49/68

50 Výpočet optimálního BVS Korespondence stromů 0.08 Ben Ann Cole 0.04 Edna Dana Fred 0.22 Gene 0.06 Irma Hugo 0.04 Jack Ken 0.09 Lea 0.03 Nick Mark 0.02 Orrie Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 50/68

51 Výpočet optimálního BVS Ceny optimálních podstromů -A 2-B 3-C 4-D 5-E 6-F 7-G 8-H 9-I 0-J -K 2-L 3-M 4-N 5-O -A B C D E F G H I J K L M N O Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 5/68

52 DYNAMICKÉ PROGRAMOVÁNÍ: NEJDELŠÍ SPOLEČNÁ PODPOSLOUPNOST Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 52/68

53 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 = 3 Nejdelší společná podposloupnost (NSP, angl: LCS) A: C B E A D D E A B: D E C D B D A C: E D D A C = 4 Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 53/68

54 Nejdelší společná podposloupnost A n : (a, a 2,..., a n ) B m : (b, b 2,..., b m ) C k : (c, c 2,..., c k ) C k = LCS(A n, B m ) A 8 : B 7 : C 4 : 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- ) ) 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 4 : E D D A C 3 : E D D A Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 54/68

55 Nejdelší společná podposloupnost ( a n!= b m ) & (c k!= a n ) ==> (C k = LCS (A n-, B m ) ) 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 3 : E D D C 3 : E D D ( a n!= b m ) & (c k!= b m ) ==> (C k = LCS (A n, B m- ) ) A 5 : C B E A D A 5 : C B E A D B 5 : D E C D B B 4 : D E C D B C 2 : E D C 2 : E D Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 55/68

56 Nejdelší společná podposloupnost Rekurzivní funkce délka NSP C(n,m) = 0 C(n-, m-) + max{ C(n-, m), C(n, m-) } n = 0 or m = 0 n > 0, m > 0, a n = b m n > 0, m > 0, a n b m Strategie dynamického programování C[n][m] m for (a=; a<=n; a++) for (b=; b<=m; b++) C[a][b] =... ; n Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 56/68

57 Nejdelší společná podposloupnost Konstrukce pole pro NSP void findlcs() { int a, b; for (a=; a<=n; a++) for (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; } } Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 57/68

58 Karel Richta a kol. (FEL) B6B36DSA, 207, Lekce 2, 58/68 Dynamické programování Datové struktury a algoritmy C B E A D D E A C D B D A D E 0 C A: B: Pole NSP pro CBEADDEA a DECDBDA Nejdelší společná podposloupnost

59 Nejdelší společná podposloupnost Výpis NSP -- rekurzivně :) void outlcs(int a, int b) { if ((a == 0 ) (b == 0)) 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-); } Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 59/68

60 DYNAMICKÉ PROGRAMOVÁNÍ: ŘEZÁNÍ TYČÍ Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 60/68

61 Problém řezání tyčí Firma Serling Enterprises se zabývá prodejem železných tyčí. Nakupuje tyče určité délky, řeže je na menší délky a prodává. Předpokládáme, že řez má zanedbatelnou cenu. Chceme navrhnout optimální sadu řezů. Jako vstup uvažujeme řadu cen p i, které si firma účtuje za tyč délky i (,2, ). Problém je nalézt pro tyč délky n optimální řezy tak, aby zisk byl co největší. Pozn.: pokud by cena p n byla dostatečně vysoká, bude optimální vůbec neřezat. Př.: Uvažme tabulku cen: délka cena ý Pro tyč délky 4 je optimální jeden řez na dvě tyče délky 2. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 6/68

62 Problém řezání tyčí (pokr.) Pokud tyč délky n rozřízneme na k kusů, pak n=i +i 2 + +i k. Označme si r n zisk z takového řezu: r n =p i +p i2 + +p ik. I r i řešení = (bez řezu) = 2 (bez řezu) = 3 (bez řezu) = = = 6 (bez řezu) = + 6 nebo 7 = = = (bez řezu) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 62/68

63 Problém řezání tyčí (pokr.) Zisk lze spočítat z předchozích hodnot dle vztahu: r n = max(p n, r -r n-, r 2 -r n-2,, r n- -r ). Abychom mohli spočítat řešení problém rozsahu n, musíme spočítat řešení problémů velikosti n-, n-2, atd. Navíc, pokud rozřízneme tyč na dva kusy, můžeme uvažovat řešení obou částí jako nezávislá, ze kterých pak určíme optimální řešení celku. Výše uvedenou rovnost lze ještě zjednodušit (uvažujeme r 0 = 0): r n = max i n (pi, rn i ) Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 63/68

64 Rekurzivní řešení public static int cut_rod(int p[], int n) { int q; if (n == 0) return 0; q = MIN_VALUE; for (int i = ; i < n; i++){ q = Math.max(q, p[i]+cut_rod(p,n-i)); }; return q; }; Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 64/68

65 Řešení dynamickým programováním r n = max ( ݎ, ) r Krok Krok p n f(0,8) 9 f(9,9 f(0,9) 0 f(0,0) f(9,0) f(0,0) y Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 65/68

66 Řešení pomocí dynamického programování public static int bottom_up_cut_rod(int p[], int n) { int q = 0; int r[] = new int[n]; r[0] = 0; for (int j = ; j < n; j++){ q = MIN_VALUE; for (int i = ; i < j; i++){ q = Math.max(q, p[i]+r[j-i]); }; r[j] = q; }; return q; }; Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 66/68

67 Příklady úloh vhodných pro řešení metodou DP Floydův algoritmus hledání nejkratších cest v grafech. Optimální plánování výpočetních úloh, zadaných časovými intervaly, ve kterých mohou běžet. Výpočet Levenshteinovy vzdálenosti mezi 2 textovými řetězci. Určení způsobu, jak nejlépe daný řetězec vygenerovat pomocí dané bezkontextové gramatiky. Hledání nejdelšího společného podřetězce dvou řetězců. Optimální triangularizace konvexního mnohoúhelníku. Problém obchodního cestujícícho:... Obecný případ v exponenciálním, ale o(n!) čase. Spec. případy v polynomiálním čase. Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 67/68

68 The End Karel Richta a kol. (FEL) Dynamické programování B6B36DSA, 207, Lekce 2, 68/68

Dynamické programování

Dynamické programování Dynamické programování 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í algoritmy (BI-EFA)

Více

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

Dynamické programování. Optimální binární vyhledávací strom 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

Více

R zné algoritmy mají r znou složitost

R zné algoritmy mají r znou složitost / / zné algoritmy mají r znou složitost Dynamické programování / / Definice funkce Otázka Program f(x,y) = (x = ) (y = ) f(x, y-) + f(x-,y) (x > ) && (y > ) f(,) =? int f(int x, int y) { if ( (x == ) (y

Více

Dynamic programming. Optimal binary search tree

Dynamic programming. Optimal binary search tree The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamic programming Optimal binary search tree Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The complexity

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

Návrh Designu: Radek Mařík

Návrh Designu: Radek Mařík 1. 7. Najděte nejdelší rostoucí podposloupnost dané posloupnosti. Použijte metodu dynamického programování, napište tabulku průběžných délek částečných výsledků a tabulku předchůdců. a) 5 8 11 13 9 4 1

Více

Dynamické programování

Dynamické programování ALG 0 Dynamické programování zkratka: DP Zdroje, přehledy, ukázky viz https://cw.fel.cvut.cz/wiki/courses/a4balg/literatura_odkazy 0 Dynamické programování Charakteristika Neřeší jeden konkrétní typ úlohy,

Více

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

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Složitost algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2017 Datové struktury a algoritmy, B6B36DSA 02/2017, Lekce 3

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í soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

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

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

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

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

5. Dynamické programování

5. Dynamické programování 5. Dynamické programování BI-EP1 Efektivní programování 1 ZS 2011/2012 Ing. Martin Kačer, Ph.D. 2010-11 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické

Více

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

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

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

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

4. Trojúhelníkový rozklad p. 1/20

4. Trojúhelníkový rozklad p. 1/20 4. Trojúhelníkový rozklad 4. Trojúhelníkový rozklad p. 1/20 4. Trojúhelníkový rozklad p. 2/20 Trojúhelníkový rozklad 1. Permutační matice 2. Trojúhelníkové matice 3. Trojúhelníkový (LU) rozklad 4. Výpočet

Více

12. Globální metody MI-PAA

12. Globální metody MI-PAA Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky 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í algoritmy

Více

Dynamické programování

Dynamické programování ALG Dynamické rogramování Nejdelší rostoucí odoslounost Otimální ořadí násobení matic Nejdelší rostoucí odoslounost Z dané oslounosti vyberte co nejdelší rostoucí odoslounost. 5 4 9 5 8 6 7 Řešení: 4 5

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

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

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]

Více

Dynamické programování UIN009 Efektivní algoritmy 1

Dynamické programování UIN009 Efektivní algoritmy 1 Dynamické programování. 10.3.2005 UIN009 Efektivní algoritmy 1 Srovnání metody rozděl a panuj a dynamického programování Rozděl a panuj: top-down Dynamické programování: bottom-up Rozděl a panuj: překrývání

Více

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

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

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

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

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 Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný

Více

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

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):

Více

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem ČVUT FEL X36PAA - Problémy a algoritmy 3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem Jméno: Marek Handl Datum: 1. 1. 2009 Cvičení: Pondělí 9:00 Zadání Naprogramujte

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

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

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý

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

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

Lineární algebra : Násobení matic a inverzní matice Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda frantisek.stampach@fit.cvut.cz, karel.klouda@fit.cvut.cz Katedra aplikované matematiky Fakulta informačních

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy 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í algoritmy (BI-EFA) ZS

Více

C# konzole Podíl dvou čísel, podmínka IF

C# konzole Podíl dvou čísel, podmínka IF C# konzole Podíl dvou čísel, podmínka IF Tematická oblast Datum vytvoření 2013 Ročník 3 Stručný obsah Způsob využití Autor Kód Internetové technologie, programování Výpočet podílu v konzolové aplikaci

Více

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

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

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

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno 12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;

Více

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

Lineární algebra : Násobení matic a inverzní matice Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda LS 2013/2014 vytvořeno: 17. března 2014, 12:42 1 2 0.1 Násobení matic Definice 1. Buďte m, n, p N, A

Více

Základy algoritmizace. Pattern matching

Základy algoritmizace. Pattern matching Základy algoritmizace Pattern matching 1 Pattern matching Úloha nalézt v nějakém textu výskyty zadaných textových vzorků patří v počítačové praxi k nejfrekventovanějším. Algoritmy, které ji řeší se používají

Více

Interpolace Uvažujme třídu funkcí jedné proměnné ψ(x; a 0,..., a n ), kde a 0,..., a n jsou parametry, které popisují jednotlivé funkce této třídy. Mějme dány body x 0, x 1,..., x n, x i x k, i, k = 0,

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

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

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

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3 DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),

Více

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

Více

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

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

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

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

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší

Více

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji? 1 Doba běhu daného algoritmu/programu 1. Který fragment programu z následujících dvou proběhne rychleji? int n = 100; int sum = 0; for (i = 0; i < n; i++) for (j = 0; j < i; j++) sum += i+j; int n = 75;

Více

Dynamické programování

Dynamické programování ALG 11 Dynamické programování Úloha batohu neomezená Úloha batohu /1 Úloha batohu / Knapsack problem Máme N předmětů, každý s váhou Vi a cenou Ci (i = 1, 2,..., N) a batoh s kapacitou váhy K. Máme naložit

Více

63. ročník Matematické olympiády 2013/2014

63. ročník Matematické olympiády 2013/2014 63. ročník Matematické olympiády 2013/2014 Úlohy ústředního kola kategorie P 2. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Při soutěži je zakázáno používat jakékoliv pomůcky kromě psacích

Více

Aplikovaná numerická matematika - ANM

Aplikovaná numerická matematika - ANM Aplikovaná numerická matematika - ANM 3 Řešení soustav lineárních rovnic iterační metody doc Ing Róbert Lórencz, CSc České vysoké učení technické v Praze Fakulta informačních technologií Katedra počítačových

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

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

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi

Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi 2.2. Cíle Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi Předpokládané znalosti Předpokladem zvládnutí

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NP-ÚPLNÉ PROBLÉMY Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 13 Evropský sociální fond Praha & EU: Investujeme do

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1 Rekurze V programování ve dvou hladinách: - rekurzivní algoritmus (řešení úlohy je definováno pomocí řešení podúloh stejného charakteru) - rekurzivní volání procedury nebo funkce (volá sama sebe přímo

Více

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort. A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1 Selection sort Neseřazeno Seřazeno Start T O U B J R M A K D Z E min

Více

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze TOKY V SÍTÍCH II Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 010/011, Lekce 10 Evropský sociální fond Praha & EU: Investujeme do vaší

Více

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

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

Více

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: 3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...

Více

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY Jan Krejčí 31. srpna 2006 jkrejci@physics.ujep.cz http://physics.ujep.cz/~jkrejci Obsah 1 Přímé metody řešení soustav lineárních rovnic 3 1.1 Gaussova eliminace...............................

Více

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.

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. 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

Více

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

Základy řazení. Karel Richta a kol. Základy řazení Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická

Více

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:

Více

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x)) Příklad 1/23 Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) c) g(x) Θ(f(x)) d) g(x) Ω(f(x)) e) g(x) Ο(f(x)) 1 Příklad 2/23 Pro rostoucí spojité

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

Paralelní grafové algoritmy

Paralelní grafové algoritmy Paralelní grafové algoritmy Značení Minimální kostra grafu Nejkratší cesta z jednoho uzlu Nejkratší cesta mezi všemi dvojicemi uzlů Použité značení Definition Bud G = (V, E) graf. Pro libovolný uzel u

Více

Různé algoritmy mají různou složitost

Různé algoritmy mají různou složitost / 1 Různé algoritmy mají různou složitost 1/ 1 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená?? 2/ 1 Asymptotická složitost y y x x Každému algoritmu

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

Více

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC .6. VLASTNÍ ČÍSLA A VEKTORY MATIC V této kapitole se dozvíte: jak jsou definována vlastní (charakteristická) čísla a vektory čtvercové matice; co je to charakteristická matice a charakteristický polynom

Více

Rozklad problému na podproblémy

Rozklad problému na podproblémy Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy zadaný problém rozložíme na podproblémy pro řešení podproblémů zavedeme abstraktní příkazy s pomocí abstraktních

Více

Prioritní fronta, halda

Prioritní fronta, halda Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje

Více

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;

Více

Algoritmy výpočetní geometrie

Algoritmy výpočetní geometrie Algoritmy výpočetní geometrie 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í algoritmy (BI-EFA)

Více

Obor: Informatika Únor 2006 Okruh: Základy matematiky Otázka: 1. Jméno: Bodů:...

Obor: Informatika Únor 2006 Okruh: Základy matematiky Otázka: 1. Jméno: Bodů:... Inf-M-1 Obor: Informatika Únor 2006 Okruh: Základy matematiky Otázka: 1. Uvažujte funkci f(x) =ln(x 2 x): Najděte její definiční obor, nulové body, vypočtěte jednostranné limity v krajních bodech definičních

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

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

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right) Indukcí dokažte následující výrok: pokud lef t a right jsou parametry funkce f a platí left right, pak volání f(array, left, right) vrátí minimální hodnotu z hodnot všech prvků v poli array na indexech

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 ústředního kola kategorie P 2. soutěžní den P-III-4 Výlet Abychom našli požadovaný výlet délky 4, stačí najít dvě hvězdy a a b, které mají dva společné

Více

Algoritmus pro generování normálních magických čtverců

Algoritmus pro generování normálních magických čtverců 1.1 Úvod Algoritmus pro generování normálních magických čtverců Naprogramoval jsem v Matlabu funkci, která dokáže vypočítat magický čtverec libovolného přípustného rozměru. Za pomocí tří algoritmů, které

Více

Úvod do teorie grafů

Úvod do teorie grafů Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí

Více

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.

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. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

10. Složitost a výkon

10. Složitost a výkon Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 10 1 Základy algoritmizace 10. Složitost a výkon doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Jiří

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Kombinatorika, výpočty

Kombinatorika, výpočty Kombinatorika, výpočty Radek Pelánek IV122 Styl jednoduché výpočty s čísly vesměs spíše opakování + pár dílčích zajímavostí užitečný trénink programování Kombinace, permutace, variace Daná množina M s

Více

Úvod do problematiky

Úvod do problematiky Úvod do problematiky Karel Richta a kol. Přednášky byly připraveny i s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická

Více

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI

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

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

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 1 / 23 Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 2 / 23 biologové často potřebují najít často se opakující sekvence DNA tyto sekvence bývají relativně krátké,

Více