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

Podobné dokumenty
Algoritmy I, složitost

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

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

COMPLEXITY

Asymptotická složitost algoritmů

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

Časová složitost algoritmů

Časová složitost / Time complexity

Složitost. Teoretická informatika Tomáš Foltýnek

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

10. Složitost a výkon

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

Základní informace o předmětu Otázka:

IB111 Úvod do programování skrze Python

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

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

Tato tematika je zpracována v Záznamy přednášek: str

Digitální učební materiál

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

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Časová složitost algoritmů, řazení a vyhledávání

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Základy algoritmizace a programování

Dynamické programování

Časová a prostorová složitost algoritmů

Datové struktury 2: Rozptylovací tabulky

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

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

Matematická analýza ve Vesmíru. Jiří Bouchala

Hledání k-tého nejmenšího prvku

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Binární vyhledávací stromy pokročilé partie

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

a a

Funkce jedné reálné proměnné. lineární kvadratická racionální exponenciální logaritmická s absolutní hodnotou

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

Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

(FAPPZ) Petr Gurka aktualizováno 12. října Přehled některých elementárních funkcí

Kapitola 7: Integrál. 1/17

Kapitola 7: Neurčitý integrál. 1/14

Metoda nejmenších čtverců Michal Čihák 26. listopadu 2012

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

1 Mnohočleny a algebraické rovnice

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

NPRG030 Programování I, 2018/19 1 / :25:37

Návrh Designu: Radek Mařík

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Logaritmické a exponenciální funkce

Digitální učební materiál

Algoritmizace a programování

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

7. Rozdělení pravděpodobnosti ve statistice

Logaritmus. Logaritmus kladného čísla o základu kladném a různém od 1 je exponent, kterým. umocníme základ a, abychom dostali číslo.

Základní spádové metody

9.3. Úplná lineární rovnice s konstantními koeficienty

Logaritmus, logaritmická funkce, log. Rovnice a nerovnice. 3 d) je roven číslu: c) -1 d) 0 e) 3 c) je roven číslu: b) -1 c) 0 d) 1 e)

2. Složitost, grafové algoritmy (zapsal Martin Koutecký)

Kombinatorika, výpočty


Dodatek 2: Funkce dvou proměnných 1/9

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech

Interpolace Lagrangeovy polynomy. 29. října 2012

Základní datové struktury III: Stromy, haldy

Databáze, sítě a techniky programování X33DSP

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

Diferenciál a Taylorův polynom

Složitosti základních operací B + stromu

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

pouze u některých typů rovnic a v tomto textu se jím nebudeme až na

5. Vyhledávání a řazení 1

VZOR. Vzor přijímacího testu do magisterského studia oboru Otevřená informatika

Stromy, haldy, prioritní fronty

0.1 Úvod do lineární algebry

Základy algoritmizace, návrh algoritmu

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

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

Funkce jedn e re aln e promˇ enn e Derivace Pˇredn aˇska ˇr ıjna 2015

Bakalářská matematika I

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

LDF MENDELU. Simona Fišnarová (MENDELU) LDR druhého řádu VMAT, IMT 1 / 22

8.3). S ohledem na jednoduchost a názornost je výhodné seznámit se s touto Základní pojmy a vztahy. Definice

Digitální učební materiál

Základy algoritmizace a programování

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

15. Moduly. a platí (p + q)(x) = p(x) + q(x), 1(X) = id. Vzniká tak struktura P [x]-modulu na V.

1 Mnohočleny a algebraické rovnice

ALGEBRA. 1. Pomocí Eukleidova algoritmu najděte největší společný dělitel čísel a a b. a) a = 204, b = 54, b) a = , b =

Poznámka: V kurzu rovnice ostatní podrobně probíráme polynomické rovnice a jejich řešení.

Aplikovaná matematika I

Třídění a vyhledávání Searching and sorting

IB111 Úvod do programování skrze Python

Šablona pro zadávání otázek pro přijímací řízení pro akademický rok 2009/2010

9. Je-li cos 2x = 0,5, x 0, π, pak tgx = a) 3. b) 1. c) neexistuje d) a) x ( 4, 4) b) x = 4 c) x R d) x < 4. e) 3 3 b

Transkript:

/ 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 lze jednoznačně přiřadit rostoucí funkci zvanou asymptotická složitost, která charakterizuje počet operací algoritmu v závislosti na rostoucím rozsahu vstupních dat. Čím pomaleji tato funkce roste, tím je algoritmus rychlejší.

Asymptotická složitost 3/ 1 Y Y ~ zatížení systému (trvání výpočtu) X X ~ naše požadavky (rozsah vstupních dat)

Příklady 4 / 1 Najdi min and max Find hodnotu max and v poli min in the STANDARD array min 3 max 3 a 3 2 7 10 0 5 10 4 6 min 3 max 3 a 3 2 7 10 0 5 10 4 6 if (a[i] < min) min = a[i]; if (a[i] > max) max = a[i]; min 2 max 3 a 3 2 7 10 0 5 10 4 6

Příklady 5 / 1 Najdi min and max hodnotu v poli STANDARD min max a 2 7 3 2 7 10 0 5 10 4 6 atd... hotovo min max 10 10 a 3 2 7 10 0 5 10 4 6 kód min = a[0]; max = a[0]; for ( i = 1; i < a.length; i++) { if (a[i] < min) min = a[i]; if (a[i] > max) max = a[i]; }

Příklady 6 / 1 Najdi min and max hodnotu v poli RYCHLEJI! min 3 max 3 a 3 2 7 10 0 5 10 4 6 min 3 max 3 a 3 2 7 10 0 5 10 4 6 if (a[i] < a[i+1]) { if ( a[i] < min) min = a[i]; if (a[i+1] > max) max = a[i+1];} min 2 max 7 a 3 2 7 10 0 5 10 4 6

Příklady 7 / 1 Najdi min and max hodnotu v poli RYCHLEJI! min max a 2 7 3 2 7 10 0 5 10 4 6 if (a[i] < a[i+1]) { if ( a[i] < min) min = a[i]; if (a[i+1] > max) max = a[i+1];} else { if ( a[i] > max) max = a[i]; if (a[i+1] < min) min = a[i+1];} min 0 max 10 a 3 2 7 10 0 5 10 4 6

Příklady 8 / 1 Najdi min and max hodnotu v poli RYCHLEJI! hotovo min max 10 10 a 3 2 7 10 0 5 10 4 6 kód min = a[0]; max = a[0]; for (i=1; i < a.length-1; i=i+2 ) { if (a[i] < a[i+1]) { if ( a[i] < min) min = a[i]; if (a[i+1] > max) max = a[i+1];} else { if ( a[i] > max) max = a[i]; if (a[i+1] < min) min = a[i+1];}}

9 / 1 Počítání složitosti Elementární operace aritmetická operace porovnání dvou čísel přesun čísla v paměti Složitost A celkový počet elementárních operací zjednodušení Složitost B celkový počet elementárních operací nad daty

10 / 1 Počítání složitosti Složitost B celkový počet elementárních operací nad daty další zjednodušení Složitost C celkový počet porovnání čísel (znaků).v datech Takto složitost mnohdy počítáme

11 / 1 Počítání složitosti Najdi min and max hodnotu v poli STANDARD Složitost Všechny operace Případ A 1 1 a.length = N min = a[0]; max = a[0]; 1 N for ( i = 1; i < a.length; i++){ N 1 if (a[i] < min) min = a[i]; N 1 0...N 1 N 1 exkluzive! if (a[i] > max) max = a[i]; } nejlepší nejhorší 1 + 1 + 1 + N + N 1 + N 1 + 0 + N 1 + 0 = 4N 1 + 1 + 1 + N + N 1 + N 1 + N 1 + N 1 = 5N 1

12 / 1 Počítání složitosti Najdi min and max hodnotu v poli STANDARD složitost Operace nad daty Případ B 1 1 a.length = N min = a[0]; max = a[0]; for ( i = 1; i < a.length; i++){ N 1 0...N 1 if (a[i] < min) min = a[i]; N 1 0...N 1 if (a[i] > max) max = a[i]; } nejlepší nejhorší 1 + 1 + N 1 +0 + N 1 + 0 = 2N 1 + 1 + N 1 + N 1 + N 1 + N 1 = 4N 2

13 / 1 Počítání složitosti Najdi min and max hodnotu v poli STANDARD složitost C pouze testy v datech min = a[0]; max = a[0]; for ( i = 1; i < a.length; i++){ N 1 if (a[i] < min) min = a[i]; N 1 a.length = N if (a[i] > max) max = a[i]; } vždy N 1 + N 1 = 2N 2 testů

14 / 1 Počítání složitosti Najdi min and max hodnotu v poli RYCHLEJI! složitost C pouze testy v datech a N a.length = N 3 2 7 10 0 5 10 4 6 Jedna dvojice 3 testy (N 1)/2 dvojic vždy 3(N 1)/2 = (3N 3)/2 testů

15/ 1 Velikost pole N Počítání složitosti Počet testů STANDARDNÍ 2 (N 1) Počet testů RYCHLEJŠÍ (3N 3)/2 poměr STD./RYCHL. 11 20 15 1.33 21 40 30 1.33 51 100 75 1.33 101 200 150 1.33 201 400 300 1.33 501 1 000 750 1.33 1 001 2 000 1 500 1.33 2 001 4 000 3 000 1.33 5 001 10 000 7 500 1.33 1 000 001 2 000 000 1 500 000 1.33 Tab. 1

Příklady 16 / 1 data pole a: 1 1 0 2 5 1 0 pole b: 4 2 4 3 4 2 7 úloha Kolik prvků pole b je rovno součtu prvků pole a? řešení pole a: 1 1 0 2 5 1 0 součet = 4 pole b: výsledek = 3 4 2 4 3 4 2 7

funkce Příklady int sumarr(int[] a) { /*snadné*/ } POMALÁ metoda count = 0; for (int i = 0; i < b.length; i++) if (b[i]==sumarr(a)) count++; return count; 17/ 1 count = 0; sumof_b = sumarr(a); RYCHLÁ metoda for (int i = 0; i < b.length; i++) if (b[i]==sumof_b) count++; return count;

18 / 1 pole a: Počítání složitosti 1 1 0 2 5 1 0 a.length == n b.length == n POMALÁ metoda pole b: 4 2 4 3 4 2 7 n x n = n 2 operací Kvadratická složitost pole a: 1 1 0 2 5 1 0 a.length == n b.length == n RYCHLÁ metoda součet a: 4 2 x n operací pole b: 4 2 4 3 4 2 7 Lineární složitost

19 / 1 Počítání složitosti Velikost pole N POMALÁ metoda RYCHLÁ metoda operací N 2 operací 2N poměr POMALÁ/RYCHLÁ 11 121 22 5.5 21 441 42 10.5 51 2 601 102 25.5 101 10 201 202 50.5 201 40 401 402 100.5 501 251 001 1 002 250.5 1 001 1 002 001 2 002 500.5 2 001 4 004 001 4 002 1 000.5 5 001 25 010 001 10 002 2 500.5 1 000 001 1 000 002 000 001 2 000 002 500 000.5 Tab. 2

20 / 1 Počítání složitosti Velikost pole N Poměr rychlostí řešení 1. úlohy Poměr rychlostí řešení 2. úlohy 11 1.33 5.5 21 1.33 10.5 51 1.33 25.5 101 1.33 50.5 201 1.33 100.5 501 1.33 250.5 1 001 1.33 500.5 2 001 1.33 1 000.5 5 001 1.33 2 500.5 1 000 001 1.33 500 000.5 Tab. 3

Příklady Hledání v seřazeném poli lineární, POMALÉ 21 / 1 dané pole Seřazené pole: velikost = N 363 369 388 603 638 693 803 833 836 839 860 863 938 939 966 968 983 993 najdi 993! testů: N 363 369 388 603 638 693 803 833 836 839 860 863 938 939 966 968 983 993 najdi 363! testů: 1 363 369 388 603 638 693 803 833 836 839 860 863 938 939 966 968 983 993

Příklady Hledání v seřazeném poli binární, RYCHLÉ 22 / 1 najdi 863! 363 369 388 603 638 693 803 833 836 839 860 863 938 939 966 968 983 993 363 369 388 603 638 693 803 833 839 860 863 938 939 966 968 983 993 2 testy 2 testy 839 860 863 938 939 966 968 983 993 839 860 863 938 966 968 983 993 2 testy 839 839 860 863 938 863 938 1 test 863 938

23 / 1 Exponent, logarimus a půlení intervalu k N... N =2 k 3 8 8 =2 3 2 4 4 =2 2 1 2 2 =2 1 N = 2 k => 0 1 1 =2 0 k = log 2 (N)

24/ 1 Počítání složitosti Velikost pole Počet testů lineární hledání případ binární hledání nejhorší případ nejlepší nejhorší průměrný poměr 5 1 5 3 5 0.6 10 1 10 5.5 7 0.79 20 1 20 10.5 9 1.17 50 1 50 25.5 11 2.32 100 1 100 50.5 13 3.88 200 1 200 100.5 15 6.70 500 1 500 250.5 17 14.74 1 000 1 1000 500.5 19 26.34 2 000 1 2000 1000.5 21 47.64 5 000 1 5000 2500.5 25 100.02 1 000 000 1 1 000 000 500 000.5 59 8 474.58 Tab. 4

25/ 1 Počítání složitosti Doba výpočtu pro různé časové složitosti s předpokladem, že 1 operace trvá 1 s (10-6 sec) složitost 10 20 Počet operací 40 60 500 1000 log 2 n 3,3 s 4,3 s 5 s 5,8 s 9 s 10 s n 10 s 20 s 40 s 60 s 0,5 ms 1 ms n log 2 n 33 s 86 s 0,2 ms 0,35 ms 4,5 ms 10 ms n 2 0,1 ms 0,4 ms 1,6 ms 3,6 ms 0,25 s 1 s n 3 1 ms 8 ms 64 ms 0,2 s 125 s 17 min n 4 10 ms 160 ms 2,56 s 13 s 17 hod 11,6 dnů 2 n 1ms 1s 12,7 dnů 36000 let 10 137 let 10 287 let n! 3,6 s 77000 let 10 34 let 10 68 let 10 1110 let 10 2554 let Tab. 5

26 / 1 Řád růstu funkcí Řád růstu funkcí

27 / 1 Řád růstu funkcí 8 7.5 y e(x) = 1.072 (x+26.44) 7 6.5 1 p(x) = (x 2 +100) 16 6-1 0 1 2 3 4 x

28 / 1 Řád růstu funkcí Zoom out! : 25 20 15 10 5 y 1 p(x) = (x 2 +100) 16 e(x) = 1.072 (x+26.44) předchozí pohled 0-5 0 5 10 15 20 x

29 / 1 Řád růstu funkcí Zoom out! : 350 300 250 200 150 100 50 0 y e(x) = 1.072 (x+26.44) 1 p(x) = (x 2 +100) 16 předchozí pohled x 0 10 20 30 40 50 60

30 / 1 Řád růstu funkcí Zoom out! : 10000 8000 6000 y e(x) = 1.072 (x+26.44) 4000 2000 0 0 20 40 60 80 100 1 p(x) = (x 2 +100) 16 x předchozí pohled atd: e(1000) = 9843181236605408906547628704342.9 p(1000) = 62506.25

31 / 1 Řád růstu funkcí (f(x)) g 2 (x) (f(x)) y g 1 (x) (f(x)) f(x) g 3 (x) (f(x)) x Pozor, obrázek není pravdivý, je jen ilustrační

32 / 1 Omega Řád růstu funkcí (f(x)) V množině (f(x)) se octne každá funkce g(x), která od určitého bodu x 0 (není nijak předem předepsáno, kde by x 0 měl být) a) je už vždy větší než funkce f(x) b) sice větší než f(x) není, ale po vynásobení nějakou kladnou konstantou (hodnota konstanty také není nijak předepsána) je už vždy větší než funkce f(x). Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) > f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) (f(x))

33 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) > f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) (f(x)) 10000 8000 y c = 1 x 0 = 60 e(x) = 1.072 (x+26.44) 6000 4000 2000 0 0 20 40 60 80 100 1 p(x) = (x 2 +100) 16 x x > 60 e(x) > p(x), tj. tudíž platí e(x) (p(x)) 1.072 (x+26.44) > 1 16 (x 2 +100) (ověřte!)

34 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) > f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) (f(x)) b(x) = x + 3 x r(x) = x 1 20 15 10 5 0-5 y c = 4 4 r(x) = 4(x 1) x 0 = 3.1 b(x) = x + 3 x r(x) = x 1 0 1 2 3 4 5 6 7 x x > 3.1 4 r(x) > b(x), tj. 4(x-1) > x + 3 x tudíž platí r(x) (b(x)) (ověřte!)

35 / 1 Řád růstu funkcí Typické ukázky x 2 Ω(x) x 3 Ω(x 2 ) x n+1 Ω(x n ) 2 x Ω(x 2 ) 2 x Ω(x 3 ) 2 x Ω(x 5000 ) x Ω(log(x)) x log(x) Ω(x) x 2 Ω(x log(x) ) 2 x Ω(x 20000 ) x 20000 Ω(x) x Ω(1) vždy f(x) > 1 f(x) Ω(1) těžko uvěřitelné 200 000 x Ω(log(x) 200 000 )

36 / 1 Řád růstu funkcí y g 2 (x) O(f(x)) f(x) g 1 (x) O(f(x)) g 3 (x) O(f(x)) x O(f(x)) Pozor, obrázek není pravdivý, je jen ilustrační

37 / 1 O Omikron Řád růstu funkcí O(f(x)) V množině O(f(x)) se octne každá funkce g(x), která od určitého bodu x 0 (není nijak předem předepsáno, kde by x 0 měl být) a) je už vždy menší než funkce f(x) b) sice menší než f(x) není, ale po vynásobení nějakou kladnou konstantou ( asi < 1 ) (hodnota konstanty také není nijak předepsána) je už vždy menší než funkce f(x). Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) < f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) O(f(x))

38 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) < f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) O(f(x)) 10000 8000 y c = 1 x 0 = 60 e(x) = 1.072 (x+26.44) 6000 4000 2000 0 0 20 40 60 80 100 1 p(x) = (x 2 +100) 16 x 1 x > 60 p(x) < e(x), tj. (x 2 +100) 16 tudíž platí p(x) O(e(x)) < 1.072 (x+26.44) ověřte!

39 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x 0 a c>0 takové, že c g(x) < f(x) všude napravo od x 0, (někdy stačí c=1) je jisto, že g(x) O(f(x)) b(x) = x + 3 x r(x) = x 1 20 15 10 y x 0 = 1 b(x) = x + 3 x 5 r(x) = x 1 0-5 0 1 2 3 4 5 6 7 x x > 1 r(x) < b(x), tj. x 1 < x + 3 x tudíž platí r(x) O(b(x))

40 / 1 Řád růstu funkcí f Ω(g) g O(f) x O(x 2 ) x 2 O(x 3 ) x n O(x n+1 ) x 2 O(2 x ) x 3 O(2 x ) x 5000 O(2 x ) log(x) O(x) x O(x log(x)) x log(x) O(x 2 ) x 20000 O(2 x ) x O(x 20000 ) 1 O(x) vždy f(x) > 1 1 O(f(x)) těžko uvěřitelné 200 000 log(x) 200 000 O( x )

41 / 1 Řád růstu funkcí y (f(x)) g 2 (x) (f(x)) f(x) g 1 (x) (f(x)) g 3 (x) (f(x)) x Pozor, obrázek není pravdivý, je jen ilustrační

42 / 1 Řád růstu funkcí (f(x)) = Ω(f(x)) O(f(x)) Theta V množině (f(x)) se octne každá funkce g(x), která spadá jak do Ω(f(x)) tak do O(f(x)). f(x) (g(x)) g(x) (f(x))

43 / 1 Řád růstu funkcí f(x) (g(x)) g(x) (f(x)) b(x) = x + 3 x r(x) = x 1 r(x) (b(x)) r(x) O(b(x)) 20 15 10 5 0-5 y b(x) = x + 3 x r(x) = x 1 0 1 2 3 4 5 6 7 x r(x) (b(x)) b(x) (r(x))

44 / 1 Řád růstu funkcí Pravidla 1. (a > 0) (f(x)) = (a f(x)) 2. g(x) O(f(x)) (f(x)) = (f(x) + g(x)) Slovy 1. Multiplikativní konstanta nemá vliv na náležení do množiny (f(x)). 2. Přičtení/odečtení menší funkce nemá vliv na náležení do množiny (f(x)). Příklady 1.8x + 600 log 2 (x) (x) x 3 + 7x 1/2 + 5(log 2 (x)) 4 (x 3 ) 13 3 x + 9x 12 + 42x -4 + 29 (3 x ) 4 2 n + 3 2 n-1 + 5 2 n/2 (2 n ) 0.1x 5 + 200x 4 + 7x 2-3 (x 5 ) O(x 5 ) (x 5 )

6 45 / 1 Řád růstu funkcí (f(x)) = { g(x) ; x 0 >0,c>0 x>x 0 : c f(x) < g(x) } (f(x)) = { g(x) ; x 0 >0,c>0 x>x 0 : g(x) < c f(x) } (f(x)) = { g(x) ; x 0 >0,c 1 >0, c 2 >0 x>x 0 : c 1 f(x) < g(x) < c 2 f(x) } Pozor, obrázky jsou jen ilustrační

46 / 1 Řád růstu funkcí Porovnání rychlosti růstu funkcí Funkce f(x) roste asymptoticky rychleji než funkce g(x), když f(x) Ω(g(x)) & f(x) (g(x)) Porovnání rychlosti algoritmů Pozor! Algoritmus A je asymptoticky pomalejší než algoritmus B, když f A (n) Ω(f B (n)) & f A (n) (f B (n)), kde f A (n), resp. f B (n) je funkce určující počet operací, které provede algoritmus A, resp. B, při zpracování dat o rozsahu n.

47 / 1 Řád růstu funkce Řád růstu funkcí Řád růstu funkce f je taková co nejjednodušší funkce g, pro kterou platí g(x) (f(x)) Manipulace Řád růstu funkce f získáme většinou tak, že zanedbáme 1. Aditivní členy rostoucí pomaleji nebo stejně rychle 2. Multiplikativní konstantu Příklady ff(n) = 4 2 n + 3 2 n-1 + 5 2 n/2 (2 n ) Řád růstu ff(n) je 2 n hh(x) = x + log 2 (x) - x (x) Řád růstu hh(x) je x

48 / 1 Asymptotická složitost Asymptotická složitost algoritmu Asymptotická složitost algoritmu A je řád růstu funkce f(n), která charakterizuje počet elementárních operací algoritmu A při zpracování dat o rozsahu n. Přitom uvažujeme nejnáročnější možná data. (rozsah dat = celkový počet čísel a znaků v nich) Ve většině případů nehraje roli, zda uvažujeme A) počet všech elementárních operací, B) počet všech elementárních operací nad daty, C) počet testů nad daty. Asymptotická složitost vycházívá táž.

49 / 1 Asymptotická složitost Asymptotická složitost předložených ukázek Asymptotická složitost hledání minima v poli o n prvcích je (n). V obou uvedených případech. Asymptotická složitost pomalého zjišťování, kolik čísel v poli je rovno součtu jiného pole, je (n 2 ). Asymptotická složitost rychlého zjišťování, kolik čísel v poli je rovno součtu jiného pole, je (n). Za předpokladu, že obě pole mají délku n. Asymptotická složitost lineárního hledání prvku v poli je O(n). Asymptotická složitost hledání prvku uspořádaném poli pomocí půlení intervalu je O(log(n)). Za předpokladu, že pole má délku n.

50 / 1 Asymptotická složitost Úmluvy Zjednodušení Běžně se zkráceným termínem složitost algoritmu rozumí právě výraz asymptotická složitost algoritmu Zmatení Běžně se v literatuře neříká f(x) náleží do (g(x)), ale f(x) je (g(x)). Rovněž se to tak značí: f(x) = (g(x)) namísto f(x) (g(x)) (a stejně pro O a ). Chápe se to ale beze změny, v původním smyslu náležení.

51 / 1 Asymptotická složitost ( ) ( ) ( ) O( )

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