Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.

Podobné prezentace


Prezentace na téma: "1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log."— Transkript prezentace:

1 1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … DSA Různé algoritmy mají různou složitost

2 2 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … DSA The complexity of different algorithms varies X36DSA 2005

3 3 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … DSA Dynamické programování X36DSA 2005

4 4 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Myšlenka dynamického programování int f(int x, int y) { if ( (x == 0) || (y == 0)) return 1; return (2* f(x, y-1) + f(x-1,y)); } print( f(10,10) ); f(10,10) = f(x,y) = 1(x = 0) || (y = 0) (x > 0) && (y > 0) 2  f(x, y-1) + f(x-1,y) f(10,10) = ? Definice funkce Otázka Program Odpověď X36DSA 2005

5 5 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … int count = 0; public static int f(int x, int y) { count++; if ( (x == 0) || (y == 0)) return 1; return (2* f(x, y-1) + f(x-1,y)); } xyz = f(10,10); print(count); count = Jednoduchá analýza Výsledek analýzy Myšlenka dynamického programování X36DSA 2005

6 6 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … f(10,6) 8,89,78,89,7 7,98,8 9,77,98,87,98,87,9f(6,10) f(10,10) f(10,9) f(9,10) f(10,8)f(9,9) f(9,8)f(8,9) f(8,10) f(8,9)f(7,10)f(8,9)f(9,8) f(10,7) Detailnější analýza – strom rekurzivního volání Myšlenka dynamického programování X36DSA 2005

7 7 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … 8,89,77,98,87,98,87,9f(6,10) f(10,10) f(9,10) f(9,9) f(9,8)f(8,9) f(8,10) f(8,9)f(7,10) počet: voláníhodnot ,87,98,8 f(9,9) f(8,9) f(9,8) 9,7 Detailnější analýza pokračuje – efektivita rekurzivního volání Myšlenka dynamického programování X36DSA 2005

8 8 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … f(x,y) = 1(x = 0) || (y = 0) (x > 0) && (y > 0) f(10,10) f(10,9) f(10,8) f(0,2) f(0,1) f(0,0)f(2,0)f(1,0) f(x,y) f(x,y-1) f(x-1,y) f(10,0) f(0,10) f(1,1) f(9,9) 22 2  f(x, y-1) + f(x-1,y) x y Myšlenka dynamického programování X36DSA 2005

9 9 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … f(x,y) = 1(x = 0) || (y = 0) (x > 0) && (y > 0) f(x,y) f(x,y-1) f(x-1,y) 22 2  f(x, y-1) + f(x-1,y) x y Myšlenka dynamického programování X36DSA 2005

10 10 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … static int dynArr [N+1][N+1]; void fillDynArr() { int xy, x, y; for (xy = 0; xy <= N; xy++) dynArr[0][xy] = dynArr[xy][0] = 1; for (y = 1; y <=N; y++) for (x = 1; x <= N; x++) dynArr[y][x] = 2*dynArr[y-1][x] + dynArr[y][x-1]; } int f(int x,int y) { return dynArr[y][x]; } Všechny hodnoty se předpočítají Volání funkce Myšlenka dynamického programování X36DSA 2005

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

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

13 13 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Fred Hugo Gene 0.05 Dana hloubka cena uzlu = průměrný počet testů na nalezení uzlu při jednom dotazu (Find) 0.04     4 = 0.04 = 0.02 = 0.15 = 0.88 cena uzlu = pravděpodobnost  hloubka Cena jednotlivých uzlů v BVS Optimální binární vyhledávací strom X36DSA 2005

14 14 / 9 Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Ben Cole Dana Edna Fred Gene Hugo Irma Lea Jack Ken Mark Nick Orrie Ann klíč pravděp. p k hloubka d k pk  dkpk  dk Cena celkem:  3 = 0.24  4 = 0.48  2 = 0.02  4 = 0.16  3 = 0.15  4 = 0.88  1 = 0.04  4 = 0.24  2 = 0.18  3 = 0.15  4 = 0.60  4 = 0.08  3 = 0.09  4 = 0.12  4 = Cena celkem = prům. poč. testů na jednu operaci Find. Cena vyváženého stromu X36DSA 2005

15 15 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Mark 0.02 Orrie Fred 0.05 Ben 0.08 Dana Hugo 0.22 Lea 0.15 Nick Irma 0.04 Jack 0.05 Edna 0.04 Gene Ann 0.03 Cole 0.01 Ken Struktura optimálního BVS s danými pravděpodobnostmi Optimální BVS X36DSA 2005

16 16 / 9 Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Cena optimálního BVS Ben Cole Dana Edna Fred Gene Hugo Irma Lea Jack Ken Mark Nick Orrie Ann klíč pravděp. p k hloubka d k pk  dkpk  dk Cena celkem  3 = 0.24  2 = 0.24  5 = 0.05  4 = 0.16  3 = 0.15  1 = 0.22  4 = 0.16  3 = 0.18  3 = 0.27  4 = 0.20  2 = 0.30  5 = 0.10  4 = 0.12  5 = Zrychlení 3.47 : 2.56 = 1 : 0.74 X36DSA 2005

17 17 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Výpočet ceny optimálního BVS Xyz pkpk C 2k C 1k k+1RLk-1k cena levého podstromu uzlu k C 1k Cena pravého podstromu uzlu k C 2k R  i=k+1 pipi Cena = C 1k + + k-1  i=L pipi + C 2k + p k pkpk Rekurzivní myšlenka X36DSA 2005

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

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

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

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

22 22 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … p5p5 p4p4 p3p3 p1p1 p6p6 p7p7 p8p8 p9p9 p2p2 pNpN 0 abcde x y z t w L=3, R=9  i=L R pipi + L  k  R C(L,R) = min { C(L, k-1) + C(k+1,R) } C(L,R) = min{ 0+x, p 3 +y, a+z, b+t, c+w, d+p 9, e+0 } Cena konkrétního optimálního podstromu Výpočet optimálního BVS X36DSA 2005

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

24 24 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … void optimalTree() { int L, R, k, size; double min; // size = 1 for (i=0; i<=N; i++) { C[i][i] = pravděpodobnost[i]; R[i][i] = I; // size > 1 for (size = 2; size <= N; size++) { L = 1; R = size; while (R <= N) { C[L][R] = min(C[L][k-1]+C[k+1][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++; } } } Výpočet polí cen a kořenů Výpočet optimálního BVS X36DSA 2005

25 25 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … void buildTree(int L, int R) { int key; if (R < L) return; key = roots[L][R]; insert(root, key); // standard BST insert buildTree( L, k-1); buildTree( k+1, R); } Vybudování optimálního stromu pomocí pole kořenů Výpočet optimálního BVS X36DSA 2005

26 26 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Kořeny optimálních podstromů Výpočet optimálního BVS X36DSA 2005

27 27 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Korespondence stromů Výpočet optimálního BVS Mark 0.02 Orrie Fred 0.05 Ben 0.08 Dana Hugo 0.22 Lea 0.15 Nick Irma 0.04 Jack 0.05 Edna 0.04 Gene Ann 0.03 Cole 0.01 Ken X36DSA 2005

28 28 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … 1-A 2-B 3-C 4-D 5-E 6-F 7-G 8-H 9-I 10-J 11-K 12-L 13-M 14-N 15-O 1-A B C D E F G H I J K L M N O Ceny optimálních podstromů Výpočet optimálního BVS X36DSA 2005

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

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

31 31 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … A8:A8: B7:B7: A n : (a 1, a 2,..., a n ) B m : (b 1, b 2,..., b m ) C k : (c 1, c 2,..., c k ) C4:C4: C k = LCS(A n, B m ) Rekurzivní pravidla: ( a n = b m ) ==> (c k = a n = b m ) & (C k-1 = LCS (A n-1, B m-1 ) ) C B E A D D E A D E C D B D A A8:A8: B7:B7: C4:C4: E D D A C B E A D D E A D E C D B D A E D D A A7:A7: B6:B6: C3:C3: C B E A D D E A D E C D B D A E D D A Nejdelší společná podposloupnost X36DSA 2005

32 32 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … ( a n != b m ) & (c k != a n ) ==> (C k = LCS (A n-1, B m ) ) A7:A7: B6:B6: C3:C3: C B E A D D E D E C D B D E D D A6:A6: B6:B6: C3:C3: C B E A D D E D E C D B D E D D A5:A5: B5:B5: C2:C2: C B E A D D E C D B E D A5:A5: B4:B4: C2:C2: C B E A D D E C D B E D ( a n != b m ) & (c k != b m ) ==> (C k = LCS (A n, B m-1 ) ) Nejdelší společná podposloupnost X36DSA 2005

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

34 34 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Konstrukce pole pro NSP void findLCS() { int a, b; for (a=1; a<=n; a++) for (b=1; b <= m; b++) if (A[a] == B[b]) { C[a][b] = C[a-1][b-1]+1; arrows[a][b] = DIAG; } else if (C[a-1][b] > C[a][b-1]) { C[a][b] = C[a-1][b]; arrows[a][b] = UP; } else { C[a][b] = C[a][b-1]; arrows[a][b] = LEFT; } } Nejdelší společná podposloupnost X36DSA 2005

35 35 / 9The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … C B E A D D E A CDBDADE 0 C A: B: Pole NSP pro “CBEADDEA” a “DECDBDA” Nejdelší společná podposloupnost X36DSA 2005

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


Stáhnout ppt "1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log."

Podobné prezentace


Reklamy Google