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.

Slides:



Advertisements
Podobné prezentace
Funkce Připomeňme si program pro výpočet faktoriálu:
Advertisements

Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Programování 2 Cvičení 5.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Metody (funkce, procedury)
Alg51 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ů.
Sample Solutions CTU Open Contest ANALOG CLOCK.
Čtvrté cvičení Objektové programování Objektový model v Javě
C++0x stručný náhled na nadcházející revizi standardu programovacího jazyka C++ (ISO/IEC 14882) Jan Ringoš.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá Přetěžování metod, rekurze.
SOKOBAN Ondra Mandík, I4a SPŠE Ječná. POPIS Hra bude obsahovat jednoho hráče, bedny, zdi a cílová místa pro bedny. Hráč nesmí procházet zdí. Hráč před.
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Časová složitost algoritmů, řazení a vyhledávání
6. cvičení Polymorfismus
Časová složitost algoritmů
Ukázka odstranění rekurze Přemysl Tišer
Počítače a programování 1
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ZADÁNÍ Sestavte program, který vypočítá obvod a obsah čtverce o straně a. Zajistěte, aby výpočet byl realizován pouze v případě, kdy strana a bude mít.
Sorty Bubble, Insert a Quick
0 / 1X36DSA 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.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Realloc a qsort examples BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
1 / 6X36DSA 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.
1 / 2X36DSA 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.
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Datové struktury a algoritmy Část 7 Vyhledávání a vyhledávací stromy Searching and Search Trees Petr Felkel.
PŘÍKAZ while úkol 1_42.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – procedury Mgr. Lenka Švancarová.
1 / 3The 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)),
České vysoké učení technické Fakulta elektrotechnická Algoritmy II A0B36PRI - PROGRAMOVÁN Í v 1.01.
Funkce, intuitivní chápání složitosti
NEÚPLNÁ PODMÍNKA V JAVĚ úkol 1_26. ZADÁNÍ Napište zdrojový kód k zadanému vývojovému diagramu.
doc. RNDr. Zdeněk Botek, CSc.
ZADÁNÍ Sestavte program, který vytiskne n hvězdiček.
PŘÍKAZ for úkol 1_47.
B AT SOUBORY Jednoduché skripty ve Windows. O PAKOVÁNÍ PŘÍKAZU OPAKUJ. off for /L %i in ( ) do ( echo *** echo %i echo *** ) Zápis: Opakuj.
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Jazyk C# a platforma.NET ZS 2015/2016 Pavel Ježek
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Y36PJC Programování v jazyce C/C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
M2160 – Úvod do programování II
Jazyk C# a platforma .NET ZS 2016/2017
Rekurze.
Programovací jazyk C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Jakub Brodský Ondřej Radosta
Rekurze.
Oblast platnosti identifikátoru (1)
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
private var hodnota:number
Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), …
Algoritmizace Dynamické programování
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Dynamické programování Optimální binární vyhledávací strom
ALG 10 Dynamické programování zkratka: DP Zdroje, přehledy, ukázky viz
Transkript prezentace:

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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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 / 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