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

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

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

Podobné prezentace


Prezentace na téma: "Dynamické programování Optimální binární vyhledávací strom"— Transkript prezentace:

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

2 Optimální binární vyhledávací strom
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Optimální binární vyhledávací strom Vyvážený, ale ne optimální 0.04 Hugo 0.01 0.09 Dana Lea 0.08 0.05 0.05 0.03 Ben Fred Jack Nick Ann Cole Edna Gene Irma Ken Mark Orrie 0.03 0.12 0.04 0.22 0.06 0.15 0.02 0.01 Pravděpodobnost dotazu Klíč Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

4 Cena vyváženého stromu
X36DSA 2005 Θ(n·log2(n)), … Cena vyváženého stromu klíč pravděp. pk hloubka dk pk  dk Ben Cole Dana Edna Fred Gene Hugo Irma Lea Jack Ken Mark Nick Orrie Ann 0.08 0.12 0.01 0.04 0.05 0.22 0.06 0.09 0.15 0.02 0.03 3 4 2 1 0.08 0.12 0.01 0.04 0.05 0.22 0.06 0.09 0.15 0.02 0.03  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  4 = 0.60  4 = 0.08  3 = 0.09  4 = 0.12  4 = 0.04 Cena celkem: 3.47 Cena celkem = prům. poč. testů na jednu operaci Find. Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

6 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …
Cena optimálního BVS klíč pravděp. pk hloubka dk pk  dk Ben Cole Dana Edna Fred Gene Hugo Irma Lea Jack Ken Mark Nick Orrie Ann 0.03 3 2 5 4 1 0.08 0.12 0.01 0.04 0.05 0.22 0.06 0.09 0.15 0.02 0.03  3 = 0.24  2 = 0.24  5 = 0.05  4 = 0.16  3 = 0.15  1 = 0.22  3 = 0.18  3 = 0.27  4 = 0.20  2 = 0.30  5 = 0.10  4 = 0.12 0.08 0.12 0.01 0.04 0.05 0.22 0.04 0.06 0.05 0.15 0.09 0.02 0.03 0.01 Cena celkem 2.56 Zrychlení : = 1 : 0.74 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

7   Výpočet ceny optimálního BVS Rekurzivní myšlenka pi pi
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Výpočet ceny optimálního BVS pk Xyz C1k cena levého podstromu uzlu k C2k Cena pravého podstromu uzlu k C2k C1k L k-1 k k+1 R Rekurzivní myšlenka pk k-1 i=L pi R i=k+1 pi Cena = C1k + + C2k + + pk Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

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

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

11 Datové struktury pro výpočet optmálního BVS
X36DSA 2005 The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(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) R R N L 1 1 L 2 2 3 3 L ≤ R L ≤ R N+1 N+1 diagonála ... L= R diagonála ... L= R Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

12  Výpočet optimálního BVS Cena konkrétního optimálního podstromu
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Výpočet optimálního BVS Cena konkrétního optimálního podstromu L=3, R=9 p1 p2 p3 a b c d e i=L R pi + L  k  R C(L,R) = min { C(L, k-1) + C(k+1,R) } C(L,R) = min{ 0+x, p3+y, a+z, b+t, c+w, d+p9, e+0 } p4 x p5 y p6 z p7 t p8 w p9 pN Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

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

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

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

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

18 Výpočet optimálního BVS
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Výpočet optimálního BVS Ceny optimálních podstromů 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 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 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

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

21 Nejdelší společná podposloupnost
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Nejdelší společná podposloupnost 1 2 8 3 4 5 6 7 An: (a1, a2, ..., an) A8: C B E A D D E A Bm: (b1, b2, ..., bm) Ck: (c1, c2, ..., ck) B7: D E C D B D A C4: E D D A Ck = LCS(An, Bm) Rekurzivní pravidla: ( an = bm ) ==> (ck = an = bm) & (Ck-1 = LCS (An-1, Bm-1) ) 1 2 8 3 4 5 6 7 1 2 8 3 4 5 6 7 A8: C B E A D D E A A7: C B E A D D E A B7: D E C D B D A B6: D E C D B D A C4: E D D A C3: E D D A Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

22 Nejdelší společná podposloupnost
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Nejdelší společná podposloupnost ( an != bm ) & (ck != an ) ==> (Ck = LCS (An-1, Bm) ) 1 2 8 3 4 5 6 7 1 2 8 3 4 5 6 7 A7: C B E A D D E A6: C B E A D D E B6: D E C D B D B6: D E C D B D C3: E D D C3: E D D ( an != bm ) & (ck != bm ) ==> (Ck = LCS (An, Bm-1) ) 1 2 8 3 4 5 6 7 1 2 8 3 4 5 6 7 A5: C B E A D A5: C B E A D B5: D E C D B B4: D E C D B C2: E D C2: E D Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

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

24 Nejdelší společná podposloupnost
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Nejdelší společná podposloupnost Konstrukce DP tabulek pro LCS void findLCS() { for( int a=1; a<=n; a++ ) for( int 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; } } Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

25 Nejdelší společná podposloupnost
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … Nejdelší společná podposloupnost 1 2 3 4 5 6 7 C B: D E C D B D A Pole NSP pro “CBEADDEA” a “DECDBDA” 1 C 1 1 1 1 1 2 B 1 1 2 2 2 3 E 1 1 1 2 2 2 4 A 1 1 1 2 2 3 A: 5 D 1 1 1 2 2 3 3 6 D 1 1 1 2 2 3 3 7 E 1 2 2 2 2 3 3 8 A 1 2 2 2 2 3 4 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …

26 Nejdelší společná podposloupnost
The complexity of different algorithms varies: O(n), Ω(n2), Θ(n·log2(n)), … 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-1, b-1); // recursion ... print(A[a]); // ... reverses the sequence! } else if( arrows[a][b] == UP ) outLCS(a-1,b); outLCS(a,b-1); Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …


Stáhnout ppt "Dynamické programování Optimální binární vyhledávací strom"

Podobné prezentace


Reklamy Google