Digitální učební materiál

Podobné dokumenty
Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

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

Časová složitost / Time complexity

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

Digitální učební materiál

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.

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

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

Určování složitosti algoritmů. Základy diskrétní matematiky, BI-ZDM

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Výpočty s hustotou Číslo DUM: III/2/FY/2/1/10 Vzdělávací předmět: Fyzika Tematická oblast:

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Teplota Číslo DUM: III/2/FY/2/1/13 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální veličiny

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Měření teploty Číslo DUM: III/2/FY/2/1/14 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

PRÁVNÍ ZÁKLADY STÁTU- ÚSTAVA

Úvod do informatiky. Miroslav Kolařík

Vzdělávací materiál. vytvořený v projektu OP VK. Název školy: Gymnázium, Zábřeh, náměstí Osvobození 20. Číslo projektu: CZ.1.07/1.5.00/34.

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

Digitální učební materiál

Digitální učební materiál

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Měření délky Číslo DUM: III/2/FY/2/1/2 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální

Střední odborná škola a Střední odborné učiliště, Hořovice

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Skládání a rozkládání sil Číslo DUM: III/2/FY/2/1/17 Vzdělávací předmět: Fyzika Tematická oblast:

Základy algoritmizace, návrh algoritmu

Asymptotická složitost algoritmů

PŘEDNÁŠKA 2 POSLOUPNOSTI

Matematika (KMI/PMATE)

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Lom světla II.část Číslo DUM: III/2/FY/2/3/18 Vzdělávací předmět: Fyzika Tematická oblast: Optika

10. Složitost a výkon

Střední odborná škola a Střední odborné učiliště, Hořovice

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Brzdné síly Číslo DUM: III/2/FY/2/1/18 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Hustota Číslo DUM: III/2/FY/2/1/9 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální veličiny a

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Digitální učební materiál

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Model atomu Číslo DUM: III/2/FY/2/2/2 Vzdělávací předmět: Fyzika Tematická oblast: Elektrické a

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

1 Posloupnosti a řady.

Střední odborná škola a Střední odborné učiliště, Hořovice

GE - Vyšší kvalita výuky CZ.1.07/1.5.00/

Úvod do problematiky

Časová složitost algoritmů

Markovské metody pro modelování pravděpodobnosti

Fyzikální korespondenční seminář MFF UK

0.1 Úvod do matematické analýzy

Zimní semestr akademického roku 2014/ prosince 2014

Dynamické programování

MIDTERM D. Příjmení a jméno:

Numerická matematika 1

Střední odborná škola a Střední odborné učiliště, Hořovice

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

Střední odborná škola a Střední odborné učiliště, Hořovice

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


COMPLEXITY

Matematická analýza pro informatiky I. Limita posloupnosti (I)

Výukový materiál zpracován v rámci projektu EU peníze školám

DIGITÁLNÍ UČEBNÍ MATERIÁL. Gymnázium Česká a Olympijských nadějí, České Budějovice, Česká 64

Statistická teorie učení

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

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Optické vlastnosti oka Číslo DUM: III/2/FY/2/3/17 Vzdělávací předmět: Fyzika Tematická oblast:

Tematická oblast: Informační a komunikační technologie (VY_32_INOVACE_09_1_IT) Autor: Ing. Jan Roubíček. Vytvořeno: červen až listopad 2013.

Diferenciální počet funkcí jedné proměnné

ARMÁDA ČESKÉ REPUBLIKY

PSK1-9. Číslicové zpracování signálů. Číslicový signál

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

EU další instituce a orgány

IV. Základní pojmy matematické analýzy IV.1. Rozšíření množiny reálných čísel

Základy algoritmizace a programování

Číslo projektu: CZ.1.07/1.4.00/ Název DUM: Elektroskop a jednotka elektrického náboje Číslo DUM: III/2/FY/2/2/4 Vzdělávací předmět: Fyzika

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

Dynamické programování

Střední odborná škola a Střední odborné učiliště, Hořovice

OFFICE MS EXCEL SEZNÁMENÍ S PROGRAMEM

Střední odborná škola a Střední odborné učiliště, Hořovice

Střední odborná škola a Střední odborné učiliště, Hořovice

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.

Vzdělávací materiál. vytvořený v projektu OP VK CZ.1.07/1.5.00/ Anotace. Ohmův zákon I VY_32_INOVACE_F0204. Fyzika

Základy teorie množin

Vzdělávací materiál. vytvořený v projektu OP VK. Název školy: Gymnázium, Zábřeh, náměstí Osvobození 20. Číslo projektu: CZ.1.07/1.5.00/34.

Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.

Inovace výuky prostřednictvím šablon pro SŠ

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

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

Transkript:

Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_146_IVT Autor: Ing. Pavel Bezděk Tematický okruh: Algoritmy Datum tvorby: červenec 2013 Ročník: 4. ročník a oktáva Anotace: Algoritmus VI. Asymptotická výpočetní složitost algoritmu Metodický pokyn: Při výuce nutno postupovat individuálně. Části DUM Pro hloubavé jsou určeny pro zájemce o studium na technických a matematicko-fyzikálních oborech vysokých škol. Pokud není uvedeno jinak, je použitý materiál z vlastních zdrojů autora DUM.

Autor Ing. Pavel Bezděk Vytvořeno dne 23. 7. 2013 Odpilotováno dne 16. 12. 2013 ve třídě 8.Y Vzdělávací oblast Vzdělávací obor Tematický okruh Téma Klíčová slova Informatika a informační a komunikační technologie Informatika a výpočetní technika Algoritmus Algoritmus VI. - Asymptotická složitost algoritmu Algoritmus, asymptotická složitost algoritmu Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Pavel Bezděk. Dostupné z Metodického portálu www.rvp.cz ; ISSN 1802-4785. Provozuje Národní ústav pro vzdělávání, školské poradenské zařízení a zařízení pro další vzdělávání pedagogických pracovníků (NÚV).

Asymptotická složitost algoritmu

Jen konečnost algoritmu vždy nestačí Je třeba poznamenat, že abstraktní kritérium konečnosti je pro praktické použití ještě příliš slabé. V praxi je třeba zajistit, aby algoritmus skončil v rozumném čase. Za rozumný čas lze v praxi považovat takový čas, který nám umožní smysluplně využít výsledek. Např. existuje jednoduchý algoritmus, který dokáže určit, zda v dané šachové pozici může hráč na tahu vynutit vítězství a zároveň dokáže určit nejlepší možný tah. Tento algoritmus se však nedá použít, protože by na svou činnost potřeboval ohromné množství času, i když je toto množství konečné. Zároveň by takový algoritmus spotřeboval ohromné množství paměti, což je další praktický zřetel, který se uplatňuje při volbě algoritmu. I když průměrná počítačová paměť stále narůstá, pro některé algoritmy jí nebude nikdy dost.

Asymptotická složitost algoritmu Pro vyčíslení výpočetní složitosti algoritmů v závislosti na velikosti vstupních dat se používá asymptotický zápis závislosti výpočetního času na rozsahu úlohy (typicky na počtu vstupních údajů). Například O(log N) znamená, že počet kroků algoritmu závisí logaritmicky na velikosti vstupních dat. Pokud u takového algoritmu zdvojnásobíme rozsah vstupních údajů, doba výpočtu se zvýší o jednu jednotku času, pokud bude vstupních dat čtyřikrát více, doba výpočtu se prodlouží o dvě jednotky času, a tak dále. To je třeba případ nalezení jednoho prvku o určité hodnotě v seznamu prvků seřazeném podle hodnoty (např. nalezení jména v telefonním seznamu). V této části textu se budeme věnovat pouze časové složitosti. Všechna pravidla, která si řekneme, pak budou platit i pro paměťovou složitost. U určování časové složitosti nás bude především zajímat, jak se algoritmy chovají pro velké vstupy.

Závislost množství dat na délce běhu programu Asymptotická složitost O(N) O(N^3) čas 24 22 20 18 16 14 12 10 8 6 4 2 0 0 10 20 data

Mějme například algoritmus A o časové složitosti N a algoritmus B o složitosti N 3. Sice pro malé hodnoty N bude algoritmus B rychlejší než A, ale pro všechna větší N( od 10 výše) ho už algoritmus A předběhne. Takže pokud bychom si měli mezi těmito algoritmy zvolit, vybereme si algoritmus A. U složitosti nás obvykle nebude zajímat, jak se chová na malých vstupech, protože na těch je rychlý téměř každý algoritmus. Rozhodující pro nás bude složitost na maximálních vstupech (pokud nějaké omezení existuje) anebo složitost pro hodně velké vstupy. Proto si zavedeme tzv. asymptotickou časovou složitost. Představme si, že máme algoritmus se složitostí N 2 /4 + 6*N + 12. Pod asymptotickou složitostí si můžeme představit, že nás zajímá jen nejvýznamnější člen výrazu, podle kterého se pak pro velké vstupy chová celý výraz. To znamená, že: Konstanty u jednotlivých členů můžeme škrtnout (např. 6n se chová podobně jako n). Tím dostáváme N 2 + N + 1. Pro velká N je N + 1 oproti N 2 nevýznamné, tak ho můžeme také škrtnout. Dostáváme tak složitost O(N 2 ). Obecně škrtáme všechny členy, které jsou pro dost velké N menší, než nějaký neškrtnutý člen. Tahle pravidla sice většinou fungují, ale škrtat ve výpočtech přece nemůžeme jen tak. Proto zavádíme operátor O (velké O), díky kterému budeme umět popsat, co přesně naše škrtání znamená, a používat ho korektně. Zapisuje se pomocí Omikron notace ( velké O notace nebo Big O notation )

Asymptotický horní odhad časové složitosti - O(g(n)) Formálně f(n)= O(g(n)), stejně jako f(n) O(g(n)). Big O notation Pro danou funkci g(n) označme množinu funkcí O(g(n)), kde O je velké omikron: O(g(n)) = {f(n): existují-li kladné konstanty c a n 0 takové, že 0 f(n) c*g(n) pro všechny n n 0 }. Zápis f (n) = O(g(n)) lze popsat jako f neroste řádově rychleji než funkce g. f je asymptoticky ohraničena funkcí g shora (až na konstantu) Od určitého n 0 už leží graf funkce f (n) pod grafem funkce c*g(n). Tedy f(n) roste řádově nejvýše tak rychle jako g(n). lim n + f(n)/g(n) = 0 Náročnost algoritmu je vždy stejná nebo menší, než nějaký násobek g(n). Jde o maximální možnou složitost algoritmu. Říkáme, že g(n) je horným odhadem funkce f(n) To znamená, že funkce g shora omezuje funkci f až na multiplikativní konstantu. Proto také f = O(g) někdy čte jako f je asymptoticky menší nebo rovno g. 0 f(n) c*g(n) pro všechny n n 0

Asymptotický horní odhad časové složitosti - O(g(n)) Funkce f se dá shora odhadnout funkcí g (až na multiplikativní konstantu a pro dostatečně velká n).

Pro hloubavé: Asymptotický dolní odhad časové složitosti - Ω(g(n)) Formálně f(n)= Ω(g(n)), stejně jako f(n) Ω(g(n)). Pro danou funkci g(n) označme množinu funkcí Ω(g(n)), kde Ω je velká omega: Ω g(n)) = {f(n): existují-li kladné konstanty c a n 0 takové, že 0 c*g(n) f(n) pro všechny n n 0 }. Zápis f (n) = Ω(g(n)) znamená, že funkce f roste řádově aspoň tak rychle, jako funkce g Od určitého n 0 už leží graf funkce f (n) nad grafem funkce c*g(n). Říkáme, že g(n) je dolním odhadem funkce f(n) Algoritmus pro alespoň jeden vstup bude této složitosti. Náročnost algoritmu je vždy stejná nebo větší, než nějaký násobek g(n). f je asymptoticky ohraničena funkcí g zdola (až na konstantu)

Asymptotický dolní odhad časové složitosti - Ω(g(n)) Funkce f se dá zdola odhadnout funkcí g (až na multiplikativní konstantu a pro dostatečně velká n).

Pro hloubavé: Asymptotický střední odhad časové složitosti - Θ(g(n)) Formálně f(n)= Θ(g(n)), stejně jako f(n) Θ(g(n)). Pro danou funkci g(n) označme množinu funkcí Θ(g(n)), kde Θ je velká théta: Θ(g(n)) = {f(n): existují-li kladné konstanty c 1, c 2 a n 0 takové, že 0 c 1 *g(n) f(n) c 2 *g(n) pro všechny n n 0 }. Zápis f (n) = Θ(g(n)) znamená, že obě funkce rostou řádově stejně rychle. Říkáme, že g(n) je středním odhadem funkce f(n) Θ(g(n)) algoritmus probíhá asymptoticky stejně rychle jako g(n). Náročnost algoritmu je stejná jako g(n) To znamená, že problém lze řešit algoritmem, který nebude asymptoticky složitější než c 1 *g(n), ale zároveň nikdy nebude asymptoticky lepší než c 2 *g(n). f je asymptoticky ohraničena funkcí g z obou stran (až na konstantu) f(n) je zároveň v O(g(n)) a v Ω(g(n)). 0< lim n + f(n)/g(n) < + Pro libovolné funkce f(n) a g(n) platí f(n) = Θ(g(n)), právě když f(n) = O(g(n)) a současně f(n) = Ω(g(n)).

Asymptotický střední odhad časové složitosti - Θ(g(n)) Funkce f se dá ohraničit funkcí g z obou stran (až na multiplikativní konstanty a pro dostatečně velká n).

Pro hloubavé: Limitní testy Předpokládejme výše uvedené funkce f(n) a g(n). Mějme limitu Potom f(n)=o(g(n)), ale f(n) Ω(g(n)). Říkáme, že: "f(n) roste asymptoticky pomaleji než g(n)". Mějme limitu Potom f(n)= Ω(g(n)), ale f(n) O(g(n)). Říkáme, že: "f(n) roste asymptoticky rychleji než g(n)". Mějme limitu lim n lim f ( n) g( n) f ( n) g n ( n ) lim n ) 0 f ( n) g( n c Pro nějakou konstantu c>0, potom f(n)=θ(g(n)). Říkáme, že: "f(n) a g(n) rostou asymptoticky stejně rychle".

Užití Big O notace Pro nás má význam hlavně O(g(n)) Tedy, že algoritmus nebude mít složitost pro velká n větší než nějaká konstanta krát g(n). Máme tu mez, kterou složitost algoritmu už nepřekročí. Vždy se snažíme vyjádřit relaci O(g(n)) tak, aby g(n) byla co nejjednodušší. Ω(g(n)) a Θ(g(n)) vždy nepočítáme, většinou nám stačí O(g(n)). Notaci O(g(n)) je nutné užívat ve správném smyslu. Jestliže máme algoritmus, který má dobu běhu 10 100 n, což je funkce která je O(n), potom je to asymptoticky lepší než 10n*log n, která jeo(n.log n) i když samozřejmě je lepší využít ten druhý algoritmus s O(n.log n). U asymptotických charakteristik je nutné si uvědomit, že je nelze přeceňovat, respektive nevhodně užívat. Podobně, jestliže máme algoritmus s dobou běhu O(n log(n)) s rozumným konstantním faktorem, pak je takový algoritmus vždy efektivnější než O(n²), který však může být lepší pro malé hodnoty n.

Použité zdroje BÖHM, Martin. Programátorská kuchařka: Recepty z programátorské kuchařky [online]. Praha: KSP MFF UK Praha, 2011/2012 [cit. 2013-07-23]. KSP, Korespondenční seminář z programování: Programátorské kuchařky, 24. ročník KSP. Dostupné z: http://ksp.mff.cuni.cz/tasks/24/cook1.html Licence Creative Commons CC-BY-NC-SA 3.0. Algoritmy a datové struktury [online]. 20. 07. 2002 [cit. 2013-07-23]. Dostupné z: http://algoritmy a datové struktury [online]. 20. 07. 2002 [cit. 2013-07-23]. Dostupné z: http://www.alg.webzdarma.cz/diplomka/kap2/asymptot.html