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

Slides:



Advertisements
Podobné prezentace
Rovnice a nerovnice s neznámou pod odmocninou
Advertisements

Lomené výrazy – sčítání a odčítání lomených výrazů
Dualita úloh lineárního programování a analýza citlivosti
Soustava lineárních rovnic
Neurčitý integrál. Příklad.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
Algoritmy a datové struktury
PA081 Programování numerických výpočtů
ALGO – Algoritmizace 1. cvičení
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Algoritmy I Cvičení č. 4.
Lineární rovnice se dvěma neznámými
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.
Metody řazení s lineární časovou složitostí
LOGISTICKÉ SYSTÉMY 8/14.
Soustava lineárních nerovnic
Řadicí algoritmy autor: Tadeáš Berkman.
REDUKCE DAT Díváme-li se na soubory jako na text, pak je tento text redundantní. Redundance vyplývá z:  některé fráze nebo slova se opakují  existuje.
SWI072 Algoritmy komprese dat1 Algoritmy komprese dat Teorie informace.
Informatika I 2. přednáška
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
F U N K C E.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Algoritmy a programovací techniky
KOMBINAČNÍ LOGICKÉ FUNKCE
Časová složitost algoritmů, řazení a vyhledávání
Časová složitost algoritmů
TEORIE HER.
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.
Jedno-indexový model a určení podílů cenných papírů v portfoliu
Derivace funkce. Velikost populace v čase t 0 je N (t 0 ). Velikost populace v čase t  t 0 je N ( t ). Přírůstek populace za jednotku času je [N(t) –
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární.
Teorie čísel Prvočíslo Generování prvočísel: Erathosenovo síto
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
Repetitorium z matematiky Podzim 2012 Ivana Medková
(řešení pomocí diskriminantu)
Kvadratické nerovnice
Ryze kvadratická rovnice
R OVNICE A NEROVNICE Lineární rovnice s absolutní hodnotou I. VY_32_INOVACE_M1r0106 Mgr. Jakub Němec.
Exponenciální funkce. y = f ( x ) = e x D ( f ) = R R ( f ) = (0, +∞)
:-) Asymptotická složitost algoritmů Autor: Antonín DANĚK Semestrální projekt 1 – Y14TED.
Soustavy lineárních rovnic Matematika 9. ročník Creation IP&RK.
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 18 – Výrazy a operace s mnohočleny – teorie NÁZEV ŠKOLY Střední škola a Vyšší odborná škola cestovního.
Korelace. Určuje míru lineární vazby mezi proměnnými. r < 0
Repetitorium z matematiky Podzim 2012 Ivana Medková
Soustava lineárních rovnic
Operační výzkum Lineární programování Dopravní úloha nevyrovnaná.
ZAL – 3. cvičení 2016.
Název projektu: Moderní výuka s využitím ICT
Kvadratické nerovnice
Nerovnice v podílovém tvaru
Induktivní statistika
Základy zpracování geologických dat Rozdělení pravděpodobnosti
VY_32_INOVACE_RONE_03 Rovnice a nerovnice Lineární nerovnice.
Soustava lineárních nerovnic
Řešení nerovnic Lineární nerovnice 1
Nerovnice v podílovém tvaru
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
ALG 09 Radix sort (přihrádkové řazení) Counting sort
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Algoritmizace a datové struktury (14ASD)
Autor: Honnerová Helena
Algoritmizace Dynamické programování
Soustavy lineárních rovnic
Induktivní statistika
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Definiční obory. Množiny řešení. Intervaly.
Dynamické programování Optimální binární vyhledávací strom
Transkript prezentace:

Různé algoritmy mají různou složitost X36DSA 2006 / 1 ∞ Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … Různé algoritmy mají různou složitost Algoritmus a program není totéž Algoritmus a program není totéž

Rychlost... Jeden algoritmus (program, postup, metoda…) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 1 / 1 Rychlost... Jeden algoritmus (program, postup, metoda…) je rychlejší než druhý. Co ta věta znamená ?? Algoritmus a program není totéž

rostoucí funkci asymptotická složitost, X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 2 / 1 Asymptotická složitost y y x x Každému algoritmu lze jednoznačně přiřadit zvanou 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ší. rostoucí funkci asymptotická složitost, Algoritmus a program není totéž

Asymptotická složitost X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 3 / 1 Asymptotická složitost Y Y ~ zatížení systému (trvání výpočtu) X X ~ naše požadavky (rozsah vstupních dat) Algoritmus a program není totéž

if (a[i] < min) min = a[i]; if (a[i] > max) max = a[i]; X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 4 / 1 Příklady Najdi min and max hodnotu v poli — STANDARD Find max and min in the array min max a 3 3 3 2 7 10 5 –10 4 6 min max a 3 3 3 2 7 10 5 –10 4 6 if (a[i] < min) min = a[i]; if (a[i] > max) max = a[i]; min max a 2 3 3 2 7 10 5 –10 4 6 Algoritmus a program není totéž

for ( i = 1; i < a.length; i++) { if (a[i] < min) min = a[i]; X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 5 / 1 Příklady Najdi min and max hodnotu v poli — STANDARD min max a 2 7 3 2 7 10 5 –10 4 6 atd... min max a hotovo –10 10 3 2 7 10 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]; } Algoritmus a program není totéž

if ( a[i] < min) min = a[i]; if (a[i+1] > max) max = a[i+1];} X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 6 / 1 Příklady Najdi min and max hodnotu v poli — RYCHLEJI! min max a 3 3 3 2 7 10 5 –10 4 6 min max a 3 3 3 2 7 10 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 max a 2 7 3 2 7 10 5 –10 4 6 Algoritmus a program není totéž

if ( a[i] < min) min = a[i]; if (a[i+1] > max) max = a[i+1];} X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 7 / 1 Příklady Najdi min and max hodnotu v poli — RYCHLEJI! min max a 2 7 3 2 7 10 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 max a 10 3 2 7 10 5 –10 4 6 Algoritmus a program není totéž

for (i=1; i < a.length-1; i=i+2 ) { if (a[i] < a[i+1]) { X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 8 / 1 Příklady Najdi min and max hodnotu v poli — RYCHLEJI! min max a hotovo –10 10 3 2 7 10 5 –10 4 6 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];}} kód Algoritmus a program není totéž

Počítání složitosti A B X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 9 / 1 Počítání složitosti aritmetická operace porovnání dvou čísel přesun čísla v paměti Elementární operace A Složitost celkový počet elementárních operací zjednodušení B Složitost celkový počet elementárních operací nad daty Algoritmus a program není totéž

Počítání složitosti B C X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 10 / 1 Počítání složitosti B Složitost celkový počet elementárních operací nad daty další zjednodušení C Složitost celkový počet porovnání čísel (znaků) .v datech Takto složitost mnohdy počítáme Algoritmus a program není totéž

for ( i = 1; i < a.length; i++){ if (a[i] < min) min = a[i]; X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 11 / 1 Počítání složitosti Najdi min and max hodnotu v poli — STANDARD A Složitost 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]; } a.length = N 1 1 Všechny operace 1 N N–1 N–1 0...N–1 exkluzive! N–1 Případ nejlepší 1 + 1 + 1 + N + N–1 + N–1 + 0 + N–1 + 0 = 4N nejhorší 1 + 1 + 1 + N + N–1 + N–1 + N–1 + N–1 = 5N–1 Algoritmus a program není totéž

for ( i = 1; i < a.length; i++){ if (a[i] < min) min = a[i]; X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 12 / 1 Počítání složitosti Najdi min and max hodnotu v poli — STANDARD B složitost 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]; } a.length = N 1 1 Operace nad daty N–1 0...N–1 N–1 0...N–1 Případ nejlepší 1 + 1 + N–1 +0 + N–1 + 0 = 2N nejhorší 1 + 1 + N–1 + N–1 + N–1 + N–1 = 4N–2 Algoritmus a program není totéž

for ( i = 1; i < a.length; i++){ if (a[i] < min) min = a[i]; X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 13 / 1 Počítání složitosti Najdi min and max hodnotu v poli — STANDARD C složitost 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]; } a.length = N pouze testy v datech N–1 N–1 vždy N–1 + N–1 = 2N–2 testů Algoritmus a program není totéž

Počítání složitosti C 3 2 7 10 5 –10 4 6 X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 14 / 1 Počítání složitosti Najdi min and max hodnotu v poli — RYCHLEJI! C složitost a.length = N N pouze testy v datech a 3 2 7 10 5 –10 4 6 Jedna dvojice — 3 testy (N–1)/2 dvojic vždy 3(N–1)/2 = (3N – 3)/2 testů Algoritmus a program není totéž

X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 15/ 1 Počítání složitosti Velikost pole N Počet testů STANDARDNÍ 2 (N – 1) RYCHLEJŠÍ (3N – 3)/2 poměr STD./RYCHL. 11 20 15 1.33 21 40 30 51 100 75 101 200 150 201 400 300 501 1 000 750 1 001 2 000 1 500 2 001 4 000 3 000 5 001 10 000 7 500 1 000 001 2 000 000 1 500 000 Tab. 1 Algoritmus a program není totéž

X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 16 / 1 Příklady data pole a: 1 –1 –2 5 1 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 –2 5 1 součet = 4 pole b: 4 4 2 4 4 3 4 4 2 7 výsledek = 3 Algoritmus a program není totéž

int sumArr(int[] a) { /*snadné*/ } sumArr X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 17/ 1 Příklady funkce int sumArr(int[] a) { /*snadné*/ } sumArr POMALÁ metoda count = 0; for (int i = 0; i < b.length; i++) if (b[i]==sumArr(a)) count++; return count; sumArr RYCHLÁ metoda count = 0; sumOf_b = sumArr(a); for (int i = 0; i < b.length; i++) if (b[i]==sumOf_b) count++; return count; Algoritmus a program není totéž

Počítání složitosti 1 –1 –2 5 4 2 4 3 4 2 7 1 –1 –2 5 4 4 2 4 3 4 2 7 X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 18 / 1 Počítání složitosti a.length == n b.length == n pole a: 1 –1 –2 5 POMALÁ metoda ≈ n x n = n2 operací Kvadratická složitost pole b: 4 2 4 3 4 2 7 a.length == n b.length == n pole a: 1 –1 –2 5 RYCHLÁ metoda součet a: 4 ≈ 2 x n operací Lineární složitost pole b: 4 2 4 3 4 2 7 Algoritmus a program není totéž

X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 19 / 1 Počítání složitosti Velikost pole N POMALÁ metoda operací N2 RYCHLÁ metoda 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 Algoritmus a program není totéž

X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 20 / 1 Počítání složitosti Velikost pole N Poměr rychlostí řešení 1. úlohy řešení 2. úlohy 11 1.33 5.5 21 10 .5 51 25 .5 101 50 .5 201 100 .5 501 250 .5 1 001 500 .5 2 001 1 000 .5 5 001 2 500 .5 1 000 001 500 000 .5 Tab. 3 Algoritmus a program není totéž

Příklady ! ! Hledání v seřazeném poli — lineární, POMALÉ dané pole X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 21 / 1 Příklady Hledání v seřazeném poli — lineární, POMALÉ 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 Algoritmus a program není totéž

Příklady ! Hledání v seřazeném poli — binární, RYCHLÉ najdi 863 ! X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 22 / 1 Příklady Hledání v seřazeném poli — binární, RYCHLÉ 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 839 860 863 938 939 966 968 983 993 2 testy 839 860 863 938 966 968 983 993 839 860 863 938 2 testy 839 863 938 ! 1 test 863 938 Algoritmus a program není totéž

X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 23 / 1 Exponent, logarimus a půlení intervalu N … k N =2k … . . . 8 =23 3 8 4 =22 2 4 2 N = 2k => 1 2 =21 1 k = log2(N) 1 =20 Algoritmus a program není totéž

lineární hledání — případ binární hledání nejhorší případ poměr X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 24/ 1 Počítání složitosti Počet testů lineární hledání — případ binární hledání nejhorší případ Velikost pole poměr nejlepší nejhorší průměrný 5 1 3 0.6 10 5.5 7 0.79 20 10.5 9 1.17 50 25.5 11 2.32 100 50.5 13 3.88 200 100.5 15 6.70 500 250.5 17 14.74 1 000 1000 500.5 19 26.34 2 000 2000 1000.5 21 47.64 5 000 5000 2500.5 25 100.02 1 000 000 500 000.5 59 8 474.58 ! Tab. 4 Algoritmus a program není totéž

pro různé časové složitosti X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 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) Počet operací složitost log2 n n n log2 n n2 n3 n4 2n n! 10 3,3 s 10 s 33 s 0,1 ms 1 ms 10 ms 3,6 s 20 4,3 s 20 s 86 s 0,4 ms 8 ms 160 ms 1 s 77000 let 40 5 s 40 s 0,2 ms 1,6 ms 64 ms 2,56 s 12,7 dnů 1034 let 60 5,8 s 60 s 0,35 ms 3,6 ms 0,2 s 13 s 36000 let 1068 let 500 9 s 0,5 ms 4,5 ms 0,25 s 125 s 17 hod 10137 let 101110 let 1000 10 s 1 ms 10 ms 1 s 17 min 11,6 dnů 10287 let 102554 let Tab. 5 Algoritmus a program není totéž

 O  Řád růstu funkcí Řád růstu funkcí X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 26 / 1 Řád růstu funkcí  O  Řád růstu funkcí Algoritmus a program není totéž

Řád růstu funkcí e(x) = 1.072 (x+26.44) p(x) = (x2+100) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 27 / 1 Řád růstu funkcí y e(x) = 1.072 (x+26.44) p(x) = (x2+100) 1 16 x Algoritmus a program není totéž

Řád růstu funkcí Zoom out! : p(x) = (x2+100) e(x) = 1.072 (x+26.44) 1 X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 28 / 1 Řád růstu funkcí Zoom out! : p(x) = (x2+100) 1 16 y e(x) = 1.072 (x+26.44) předchozí pohled x Algoritmus a program není totéž

Řád růstu funkcí Zoom out! : e(x) = 1.072 (x+26.44) p(x) = (x2+100) 1 X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 29 / 1 Řád růstu funkcí Zoom out! : e(x) = 1.072 (x+26.44) y p(x) = (x2+100) 1 16 předchozí pohled x Algoritmus a program není totéž

Řád růstu funkcí Zoom out! : e(x) = 1.072 (x+26.44) p(x) = (x2+100) 1 X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 30 / 1 Řád růstu funkcí Zoom out! : e(x) = 1.072 (x+26.44) y p(x) = (x2+100) 1 16 x předchozí pohled atd:… e(1000) = 9843181236605408906547628704342.9 p(1000) = 62506.25 … Algoritmus a program není totéž

 (f(x)) Řád růstu funkcí y f(x) x g2(x)   (f(x)) g1(x)   (f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 31 / 1 Řád růstu funkcí  (f(x)) g2(x)   (f(x)) g1(x)   (f(x)) y f(x) g3(x)   (f(x)) x Pozor, obrázek není pravdivý, je jen ilustrační Algoritmus a program není totéž

Řád růstu funkcí (f(x))  Omega V množině (f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 32 / 1 Řád růstu funkcí (f(x))  Omega V množině (f(x)) se octne každá funkce g(x), která od určitého bodu x0 (není nijak předem předepsáno, kde by x0 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é x0 a c>0 takové, že c·g(x) > f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  (f(x)) Algoritmus a program není totéž

Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 33 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že c·g(x) > f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  (f(x)) c = 1 y e(x) = 1.072 (x+26.44) x0 = 60 p(x) = (x2+100) 1 16 x (x2+100) 1 16 x > 60  e(x) > p(x), tj. 1.072 (x+26.44) > tudíž platí e(x)  (p(x)) (ověřte!) Algoritmus a program není totéž

Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 34 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že c·g(x) > f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  (f(x)) b(x) = x + 3 x 4·r(x) = 4(x–1) y c = 4 r(x) = x–1 x0 = 3.1 b(x) = x + 3 x r(x) = x–1 x x > 3.1  4·r(x) > b(x), tj. 4(x-1) > x + 3 x (ověřte!) tudíž platí r(x)  (b(x)) Algoritmus a program není totéž

Řád růstu funkcí 200 000 Typické ukázky x2  Ω(x) x3  Ω(x2) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 35 / 1 Řád růstu funkcí Typické ukázky x2  Ω(x) x3  Ω(x2) xn+1  Ω(xn) 2x  Ω(x2) 2x  Ω(x3) 2x  Ω(x5000) x  Ω(log(x)) xlog(x)  Ω(x) x2  Ω(xlog(x) ) 2x  Ω(x20000) x20000  Ω(x) x Ω(1) vždy f(x) > 1  f(x) Ω(1) těžko uvěřitelné 200 000 x  Ω(log(x)200 000) Algoritmus a program není totéž

O(f(x)) Řád růstu funkcí y f(x) x g2(x)  O(f(x)) g1(x)  O(f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 36 / 1 Řád růstu funkcí g2(x)  O(f(x)) y f(x) g1(x)  O(f(x)) O(f(x)) g3(x)  O(f(x)) x Pozor, obrázek není pravdivý, je jen ilustrační Algoritmus a program není totéž

Řád růstu funkcí O(f(x)) O Omikron V množině O(f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 37 / 1 Řád růstu funkcí O(f(x)) O Omikron V množině O(f(x)) se octne každá funkce g(x), která od určitého bodu x0 (není nijak předem předepsáno, kde by x0 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é x0 a c>0 takové, že c·g(x) < f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  O(f(x)) Algoritmus a program není totéž

Řád růstu funkcí ověřte! X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 38 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že c·g(x) < f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  O(f(x)) y c = 1 e(x) = 1.072 (x+26.44) x0 = 60 p(x) = (x2+100) 1 16 x (x2+100) 1 16 x > 60  p(x) < e(x), tj. < 1.072 (x+26.44) tudíž platí p(x)  O(e(x)) ověřte! Algoritmus a program není totéž

Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 39 / 1 Řád růstu funkcí Takže: pokud najdeme nějaké x0 a c>0 takové, že c·g(x) < f(x) všude napravo od x0, (někdy stačí c=1) je jisto, že g(x)  O(f(x)) b(x) = x + 3 x x0 = 1 y r(x) = x–1 b(x) = x + 3 x r(x) = x–1 x x > 1  r(x) < b(x), tj. x–1 < x + 3 x tudíž platí r(x)  O(b(x)) Algoritmus a program není totéž

 Řád růstu funkcí 200 000 f  Ω(g) g  O(f) x  O(x2) x2  O(x3) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 40 / 1 Řád růstu funkcí  f  Ω(g) g  O(f) x  O(x2) x2  O(x3) xn  O(xn+1) x2  O(2x) x3  O(2x) x5000  O(2x) log(x)  O(x) x  O(xlog(x)) xlog(x)  O(x2) x20000  O(2x) x O(x20000) 1 O(x) vždy f(x) > 1  1  O(f(x)) těžko uvěřitelné x 200 000 log(x)200 000  O( ) Algoritmus a program není totéž

(f(x)) Řád růstu funkcí f(x) y x g2(x)  (f(x)) g1(x)  (f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 41 / 1 Řád růstu funkcí g2(x)  (f(x)) f(x) y (f(x)) g1(x)  (f(x)) g3(x)  (f(x)) x Pozor, obrázek není pravdivý, je jen ilustrační Algoritmus a program není totéž

Řád růstu funkcí  Theta (f(x)) = Ω(f(x))  O(f(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(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)) Algoritmus a program není totéž

Řád růstu funkcí f(x)  (g(x))  g(x)  (f(x)) b(x) = x + 3 x X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 43 / 1 Řád růstu funkcí f(x)  (g(x))  g(x)  (f(x)) b(x) = x + 3 x y r(x) = x–1 b(x) = x + 3 x r(x)  (b(x)) r(x) = x–1 r(x)  O(b(x)) x r(x)  (b(x)) b(x)  (r(x)) Algoritmus a program není totéž

Řád růstu funkcí g(x)  O(f(x))  (f(x)) = (f(x) + g(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 44 / 1 Řád růstu funkcí Pravidla (a > 0)  (f(x)) = (a  f(x)) 1. g(x)  O(f(x))  (f(x)) = (f(x) + g(x)) 2. 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 4  2n + 3  2n-1 + 5  2n/2  (2n) 1.8x + 600  log2(x)  (x) 0.1x5 + 200x4 + 7x2 - 3  (x5) –’’–  O(x5) –’’–  (x5) x3 + 7x1/2 + 5(log2(x))4  (x3) 13  3x + 9x12 + 42x-4 + 29  (3x) Algoritmus a program není totéž

6 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 45 / 1 Řád růstu funkcí  (f(x)) = { g(x) ; x0>0,c>0 x>x0: c·f(x) < g(x) }  (f(x)) = { g(x) ; x0>0,c>0 x>x0: g(x) < c·f(x) }  (f(x)) = { g(x) ; x0>0,c1>0, c2>0 x>x0: c1·f(x) < g(x) < c2·f(x) } Pozor, obrázky jsou jen ilustrační Algoritmus a program není totéž

f(x)  Ω(g(x)) & f(x)  (g(x)) X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(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)) Pozor! Porovnání rychlosti algoritmů Algoritmus A je asymptoticky pomalejší než algoritmus B, když fA(n)  Ω(fB(n)) & fA(n)  (fB(n)), kde fA(n), resp. fB(n) je funkce určující počet operací, které provede algoritmus A, resp. B, při zpracování dat o rozsahu n. Algoritmus a program není totéž

Řád růstu funkcí Řád růstu funkce X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 47 / 1 Řád růstu funkcí Řád růstu funkce Řá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2n + 32n-1 + 52n/2  (2n) Řád růstu ff(n) je 2n hh(x) = x + log2(x) -  (x) x Řád růstu hh(x) je x Algoritmus a program není totéž

Asymptotická složitost X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 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áž. Algoritmus a program není totéž

Asymptotická složitost X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 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 (n2). 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. Algoritmus a program není totéž

Asymptotická složitost X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(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í. Algoritmus a program není totéž

    ( ) ( ) ( ) O( ) Asymptotická složitost X36DSA 2006 Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … 51 / 1 Asymptotická složitost  ( )  ( )  ( )  O( ) Algoritmus a program není totéž

Různé algoritmy mají různou složitost X36DSA 2006 / 1 ∞ Různé algoritmy mají různou složitost: O(n), Ω(n2), Θ(n·log2(n)), … Různé algoritmy mají různou složitost Algoritmus a program není totéž Algoritmus a program není totéž