Dynamické programování
|
|
- Vlastimil Janda
- před 6 lety
- Počet zobrazení:
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í 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íceDynamické 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íceR 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íceDynamic 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íceAlgoritmizace 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íceNá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íceDynamické 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íceSlož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íceBiná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íceBiná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íceStromy. 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íceStromy, 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íceStromy. 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íce5. 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íceProhledá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íceDynamické 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íceZá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íceAlgoritmy 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íce5 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íce4. 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íce12. 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íceDatové 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íceDynamické 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íceAlgoritmy 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íceB3B33ALP - 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íceDynamické 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íceNPRG030 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ícebin 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ícef(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íceB3B33ALP - 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íce3. ú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íceReprezentace 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íceStromy. 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ícea) 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íceLineá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íce1. 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íceRekurzivní 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íceC# 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íceALGORITMIZACE 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ů 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íceAlgoritmus 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íceAdresní 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íceMimo 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íceZá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íceLineá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íceZá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íceInterpolace 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íceALGORITMY 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íceVyhledá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íceDobSort. Ú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íceDynamické 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íceALGORITMIZACE 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íceVyhledá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ícebfs, 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íceDynamicky 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íceNEJKRATŠÍ 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íceDoba 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íceDynamické 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íce63. 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íceAplikovaná 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íceGrafové 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ícebfs, 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íceCí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íceDigitá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íceNP-Ú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íceIB111 Ú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íceRekurze. 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íceA4B33ALG 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íceTOKY 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íceSeminář 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íceMaticí 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íceVYBRANÉ 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íceZdů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íceZá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íceProgramová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ícePří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íceIB108 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íceParalelní 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íceRů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íceGrafové 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íceV 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íce2.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íceRozklad 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ícePrioritní 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ů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;
VíceAlgoritmy 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íceObor: 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íceStromy. 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íceDSA, 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íce68. 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íceAlgoritmus 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ů 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íce2) 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íce10. 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íceStruktura 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íceKombinatorika, 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 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íce3. 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íceObsah 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íceFaculty 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