Zložitosť algoritmov IB110 1 / 21 Zložitost algoritmov • koreknosť algoritmu sama o sebe nezaručuje jeho použiteľnosť • dĺžka výpočtu a jeho pamäťová náročnosť • časová a priestorová zložitosť • zložitosť výpočtu závisí na vstupnej inštancii • zložitosť algoritmu vyjadrujeme ako funkciu dĺžky vstupnej inštancie 2/21 Optimalizácia zložitosti algoritmu Optimalizácia zložitosti algoritmu a na úrovni kompilácie • programátorská optimalizácia 3/21 Optimalizácia zložitosti algoritmu Optimalizácia - príklad 1 Vstup zoznam študentov a počet bodov, ktoré získali v záverečnom teste predmetu I BI 10 L(1),...,L(N) Výstup normalizované body (1) Nájdi maximálny počet bodov, MAX (2) každý bodový zisk vynásob hodnotou 100 a vydeľ hodnotou MAX Optimalizácia zložitosti algoritmu Implementácia (1) štandartne (2) for / from 1 to N do /.(/) <- /.(/) x 100/MAX od pre každé /.(/) potrebujeme 1 násobenie a 1 delenie Optimalizácia (1) štandartne (2) FAKTOR <- 100/ MAX (3) for / from 1 to A/ do /.(/) <- /.(/) x FAKTOR od zlepšenie o cca 50% I Optimalizácia zložitosti algoritmu Optimalizácia - príklad 2 • vyhľadávanie prvku X v neusporiadanom zozname • implementácia pomocou cyklu, v ktorom sa realizujú dva testy: (1) našli sme XI a (2) prehľadali sme celý zoznam? • optimalizácia: na koniec zoznamu pridáme prvok X a v cykle testujeme len podmienku (1) • po ukončení cyklu overujeme, či nájdený prvok X sa nachádza vo vnútri zoznamu alebo na jeho konci • zlepšenie o cca 50% Asymptotická zložitost Zložitosť • je zlepšenie o 50% (60%, 90% ...) dostačujúce? • ako charakterizovať zložitosť algoritmu? • ako porovnať zložitosť dvoch algoritmov? zložitosť algoritmu ako funkcia dĺžky vstupnej inštancie zložitosť v najhoršom prípade asymptotická zložitosť, O-notácia Asymptotická zložitost Asymptotická zložitost • jednoduchá charakterizácia efektivity algoritmu • umožňuje porovnat relatívnu efektivitu rôznych algoritmov • charakterizuje, ako rastie zložitost algoritmu s rastúcou dĺžkou vstupnej inštancie O-notácia Symbolom o{g{rí)) označujeme množinu fukciít.ž. ö{g{n)) = {f(n) | existuje kladná konštanta c a no také, že 0 < f (n) < cg{rí) pre všetky n > no}. Rovnosť f (n) = ö{g{n)) vyjadruje, že f {n) je prvkom množiny ö{g{n)). 8/21 Asymptotická zložitost Asymptotická zložitost - príklad Binárne vyhladávanie položky Y v telefónnom zozname s N položkami Xi,X2,...,XN pre N = 1000000 lineárne vyhľadávanie až 1 000 000 porovnaní zložitosť 0{N) binárne vyhľadávanie postup: v prvom kroku porovnaj Y s X500000 podľa výsledku porovnaj v druhom kroku Y buď s X250000 alebo s X750000 v najhoršom prípade 20 porovnaní zložitosť C(log2(A/)) Prečo? sme ako zložitosť vyhľadávania sme uvažovali len počet porovnaní? J 9/21 I Asymptotická zložitosť Robustnost O-notácie Fakt O-notácia zakrýva konštantné faktory • časová zložitosť algoritmu je relatívny pojem • zložitosť je relatívna voči fixovanej množine elementárnych inštrukcií • každý programovací jazyk resp. kompilátor môže mať inú množinu elementárnych inštrukcií • pokiaľ používajú štandartné inštrukcie, tak rozdiel v časovej zložitosti je práve o konštantný faktor • O-notácia je invariantná voči takýmto implementačným detailom Nevýhoda O-notácie: skryté konštanty, hraničná hodnota no 10 / 21 Analýza zložitosti algoritmov Príklad — bubblesort i procedure Bubblesort(4, n) 2 for / = 1 to n — 1 do 3 for j = 1 to n — i do 4 if A\j] > A\j + 1] then vymeň A\j] s A\j + 1] fi 5 od 6 od riadok 4 čas 0(1) for cyklus 3-5 čas ö{n — i) for cyklus 2-6 čas ö(Y,i=i(n ~ ')) = 0{n{n - 1) - E^i1 /) = 0(n2) celková časová zložitosť je ö{n2) Analýza zložitosti algoritmov Príklad — vnorené cykly 1 ľ max then max <— S[i] fi od Minimum nájdeme medzi zvyšnými n — 1 prvkami podobne. Celkove (n — 1) + (n — 2) porovnaní. Analýza zložitosti algoritmov Maximálny a minimálny prvok Prístup Rozdeľ a panuj O pole rozdeľ na dve (rovnako veľké) podpostunosti Q nájdi minimum a maximum oboch pod postupností Q maximálny prvok postupnosti je väčší z maximálnych prvkov pod postupností; podobne minimálny prvok function MAXMlN(x,y) if y — x < 1 then return (max(S[x], S[y]), min(S[x], S[y])) else (maxi, mini) <— Maxmin(x, [(x + y)/2j) (max2, mini) <- Maxmin(|_(x + y)/2j + 1, y) return (max(maxl, max2) min(m/nl, min2)) fi Analýza zložitosti algoritmov Maximálny a minimálny prvok Zložitosť: (počet porovnaní) T(n) 1 pre n = 2 7(Ln/2j)+7([n/2]) + 2 pre n > 2 Indukciou k n overíme, že T (n) < |n — 2. Pre n = 2 platí f • 2 - 2 > 1 = 7(2). Q Predpokladajme platnosť nerovnosti pre všetky hodnoty 2 < i < n, dokážeme jej platnosť pre n. T(n) = T([n/2\)+T(\n/2]) + 2 indukčný predp. <§Ln/2j-2 + |rn/2l-2 + 2 = |#i-2 Priemerná a očakávaná zložitost Priemerná a očakávaná zložitosť Priemerná zložitosť priemer zložitostí výpočtov na všetkých vstupoch danej dĺžky Quicksort - zložitost v najhoršom prípade je ö{n2), priemerná zložitost je ö{n log n) Očakávaná zložitosť zložitosť jednotlivých výpočtov je vážená frekvenciou výskytu príslušných vstupných inštancií Výhody: presnejšia informácia o efektivite algoritmu v prípade očakávanej zložitosti je relevancia voči aplikačnej oblasti Nevýhody: obtiažna analýza v prípade očakávanej zložitosti nutnost poznat presnú frekvenciu vstupných inštancií 16 / 21 Horné a dolné odhady zložitosti Horné a dolné odhady zložitosti Zložitosť algoritmu • v najlepšom prípade • v najhoršom prípade • priemerná zložitosť • očakávaná zložitosť Zložitosť problému • dolný odhad zložitosti problému • horný odhad zložitosti problému — zložitosť konkrétneho algoritmu pre problém • zložitosť problému I Horné a dolné odhady zložitosti Dolný odhad zložitosti problému - techniky Informačná metóda riešenie problému v sebe obsahuje isté množstvo informácie a v každom kroku výpočtu sme schopní určiť len časť tejto informácie (násobenie matíc, cesta v grafe, triedenie) Metóda sporu Varianta A: za predpokladu, že algoritmus má zložitosť menšiu než uvažovanú hranicu, vieme skonštruovať vstup, na ktorom nedá korektné riešenie. Varianta B: za predpokladu, že algoritmus nájde vždy korektné riešenie, vieme skonštruovať vstup, pre ktorý zložitosť výpočtu presiahne uvažovanú hranicu. Redukcia 18 / 21 I Horné a dolné odhady zložitosti Dolný odhad zložitosti pre problém maximálneho prvku postupnosti Dolný odhad Nech algoritmus A je algoritmus založený na porovnávaní prvkov a nech A rieši problém maximálneho prvku. Potom A musí na každom vstupe vykonat aspoň n — 1 porovnaní. < Dôkaz Nech x = (xi,... ,x„) je vstup dĺžky n, na ktorom A vykoná menej než n — 1 porovnaní a nech xr je maximálny prvok v x. Potom v x musí existovať prvok xp taký, že p ^ r a v priebehu výpočtu xp nebol porovnávaný so žiadnym prvkom väčším než on sám. Existencia takého prvku plynie z počtu vykonaných porovnaní. Ak v x zmeníme hodnotu prvku xp na xr + 1, tak A určí ako maximálny prvok xr - spor. n 9/21 Horné a dolné odhady zložitosti Dolný odhad zložitosti pre problém vyhľadávania v telefónnom zozname binárny strom a jeho hĺbka 20 / 21 Horné a dolné odhady zložitosti Výzkum v oblasti zložitosti problémov • optimalizácia dátových štruktúr • dolné odhady zložitosti a dôkaz optimality • priestorová zložitosť • vzťah medzi priestorovou a časovou zložitosťou 21 / 21