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

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

Digitální učební materiál

Digitální učební materiál

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

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

Časová složitost / Time complexity

Časová a prostorová složitost algoritmů

Algoritmy I, složitost

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

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Binární soubory (datové, typované)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Čí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

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

Čí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í

Čí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:

Šablony, kontejnery a iterátory

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Standardní algoritmy vyhledávací.

Čí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

Čí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

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Šablony, kontejnery a iterátory

Množina v C++ (set, multiset).

NPRG030 Programování I, 2018/19 1 / :03:07

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

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

Asymptotická složitost algoritmů

Čí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í

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

ALGORITMY A DATOVÉ STRUKTURY

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

Mělká a hluboká kopie

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

Sada 1 - Základy programování

Čí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:

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

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

IB111 Úvod do programování skrze Python

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Základy algoritmizace a programování

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

DUM 20 téma: Test dávky

for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Čí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

Dynamické 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

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Sada 1 - Základy programování

Čí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í

Sada 1 - Základy programování

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

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

Programovací jazyk Pascal

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

Vector datový kontejner v C++.

Digitální učební materiál

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

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

Přijímací zkouška na navazující magisterské studium 2015

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

Množina čísel int stl-set-int.cpp

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Numerická stabilita algoritmů

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

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

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

10. Složitost a výkon

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

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

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

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

Čí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:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

Digitální učební materiál

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

68. ročník Matematické olympiády 2018/2019

Úvod do programování

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

NPRG030 Programování I, 2016/17 1 / :58:13

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

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

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_145_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 V. Druhy výpočetní složitosti 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 18. 7. 2013 Odpilotováno dne 9. 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 V. - Druhy výpočetních složitostí algoritmu Algoritmus, lineární složitost, kvadratická složitost 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).

Druhy výpočetní složitosti algoritmů

Časová složitost Časová složitost zkoumá náročnost výpočtu v závislosti na velikosti argumentů. Konstantní složitost Algoritmy, jejichž výpočet trvá vždy konstantní počet kroků, mají konstantní časovou složitost. Bez ohledu na velikost vstup. dat, vykoná algoritmus konstantní počet kroků - k. Logaritmická složitost Existují i algoritmy, které pracují déle než konstantně, ale kratčeji než lineárně, jsou to algoritmy s logaritmickou časovou složitostí - log(n). Například když pro 5 vstupních prvků vykoná algoritmus 4 instrukce (kroky), pro 10 vstupních prvků vykoná algoritmus 5 instrukcí, pro 100 vstupních prvků vykoná algoritmus 11 instrukcí. Můžeme říct, že algoritmus má logaritmickou časovou složitost - log(n).

Lineární složitost Algoritmus, jehož doba výpočtu lineárně stoupá s velikostí dat, má lineární časovou složitost. Obecně tedy můžeme říct, že s každým dalším prvkem ve vstupních datech vzroste časová složitost o konstantní počet kroků. Algoritmus má lineární časovou složitost - n. Lineárně logaritmická složitost Můžeme mít i algoritmy pracující déle než lineárně, ale méně než kvadraticky, logaritmy se složitostí n*log(n) Kvadratická složitost Předpokládejme, že porovnání dvou prvků trvá konstantní počet kroků. S každým prvkem seznamu se projdou ostatní prvky seznamu. Tedy se n-krát provede n kroků, kde n je délka seznamu s. Což nám dává složitost n*n, neboli n 2. Budeme říkat, že algoritmus jehož výpočet trvá n 2 kroků, má kvadratickou časovou složitost - n 2. Dále ještě existují algoritmy, jejichž výpočet trvá n 3 kroků. Takové algoritmy mají kubickou časovou složitost n 3. Obecně o algoritmech se složitostí n a, kde a je konstanta, říkáme, že mají polynomiální časovou složitost - n a.

Exponenciální složitost Dále ještě existují algoritmy, jejichž výpočet trvá a n kroků (nejčastěji 2 n ), kde a je konstanta nebo n* n kroků. Takové algoritmy mají exponenciální časovou složitost 2 n nebo n n. Faktoriální složitost Jestliže výpočet trvá n*(n-1)*(n-2)*(n-3)* *4*3*2*1 kroků neboli n! (nfaktoriál), takové algoritmy mají faktoriální časovou složitost n! Je to složitost a n < n! < n n. Proto ji někdy řadíme mezi exponenciální složitosti.

Rychlé algoritmy - polynomiální časová složitost - n a Velmi rychlé algoritmy Konstantní složitost k konstanta nebo číslo měnící se jen malém rozsahu s rostoucí velikostí dat Logaritmická složitost log(n) Lineální složitost n Lineárně logaritmická složitost n*log(n) Pomalejší algoritmy Kvadratická složitost n 2 Kubická složitost n 3

Velmi pomalé algoritmy - nepolynomiální (exponenciální) časová složitost Exponenciální složitost a n např. 2 n Faktoriální složitost n! Exponenciální složitost n n

Jednoduché počítání složitosti Časová a paměťová složitost dá určovat i intuitivně. Představme si, že máme danou posloupnost N celých čísel, ze které chceme vybrat maximum. Použijeme algoritmus, který za maximum prohlásí nejprve první číslo posloupnosti. Pak toto maximum postupně porovnává s dalšími čísly posloupnosti, a pokud je některé větší, učiní z něj nové maximum. Program Maximum; const N=10; type Pole = array[1..n] of integer; var P: Pole; Max,i: integer ; begin For i:=1 to N do begin write(i,'.prvek pole: '); readln(p[i]); end; Max:=P[1]; For i:=2 to N do begin if P[i]>Max then Max:=P[i] end; writeln('maximum= ',Max); repeat until keypressed; end.

#include <iostream> //Maximalni prvek pole using namespace std; int i,maximum,pom; const int index=10; int pole[index]; int main() { cout<<"zadej prvky pole"<<endl; for (i=0;i<index;i++) { cout<<"zadej "<<i<<". prvek pole:"; cin >>pole[i]; } cout<< endl; cout<<"zadali jste tyto prvky pole: "<<endl; for (i=0;i<index;i++) { cout<<i<<". prvek pole: "<<pole[i]<<endl; } cout << endl; pom=pole[0]; for (i=1;i<index;i++) { if (pom<pole[i]) pom=pole[i]; } maximum=pom; cout<<"nejvetsi prvek pole je "<< maximum<<endl; return 0; } Program maximální prvek pole v C++ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je (jméno a příjmení autora). 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).

Časová a paměťová složitost hledání maxima Algoritmus provede N 1 porovnání a max. N přiřazení. Intuitivně časová složitost bude lineárně záviset na N, protože porovnání dvou čísel i přiřazení nám zabere jednotkový čas. Paměťová složitost bude také na N záviset lineárně, protože každé číslo z posloupnosti budeme uchovávat v paměti. Pokud bychom si nepamatovali celou posloupnost, ale vždy jen poslední přečtený člen, stačilo by nám jen konstantně mnoho proměnných, takže paměťová složitost by klesla na konstantní (nezávislou na N ) a časová by zůstala stejná.

Výpis násobků čísel od 1 do K Mějme dané číslo K. Naším úkolem je vypsat tabulku všech násobků čísel od 1 do K: Uděláme jen zjednodušený zápis programu, který pro zjištění složitosti bude stačit: Pro i = 1 až K: Pro j = 1 až K: Vypiš i*j a mezeru Přejdi na nový řádek Tabulka má velikost K 2 a na každém jejím políčku strávíme jen konstantní čas. Proto časová složitost bude záviset na čísle K kvadraticky, tedy bude K 2. Paměťová složitost bude buď konstantní, pokud hodnoty budeme jen vypisovat, anebo kvadratická, pokud si tabulku budeme ukládat do paměti. Poznámka: Můžeme si také všimnout, že tabulku nemusíme vypisovat celou, ale bude nám stačit jen její dolní trojúhelníková část, i tak budeme muset spočítat (K K K)/2 + K = K 2 /2 + K/2 hodnot, což je stále řádově kvadratické vzhledem ke K.

Metoda Kouknu a vidím Můžeme tuto metodu použít na určování časové složitosti u těch nejjednodušších algoritmů. Spočívá jen v tom, že se podíváme, kolik nejvíc obsahuje náš program vnořených cyklů. Řekněme, že máme k cyklů a že každý běží od 1 do N. Potom je časová složitost N k. Vzhledem k čemu budeme složitosti určovat? Složitosti obvykle určujeme vzhledem k velikosti vstupu (počet čísel, případně znaků na vstupu). Tento počet si označme N. Časovou i paměťovou složitost pak vyjádříme vzhledem k tomuto N. To je vidět třeba na výběru maxima v předchozím textu.

Pro hloubavé: Složitost algoritmu v závislosti na více proměnných Někdy se nám hodí určit složitost v závislosti na více než jedné proměnné. Pokud bychom například chtěli vypisovat všechny dvojice podstatného a přídavného jména ze zadaného slovníku, strávíme tím čas, který bude záviset nejen na celkové velikosti slovníku, ale i na tom, kolik obsahuje podstatných a kolik přídavných jmen. Častým příkladem, kde si velikost vstupu potřebujeme rozdělit do více proměnných, jsou algoritmy pracující s grafy. V případě grafů obvykle vyjadřujeme složitost pomocí proměnných N a M, kde N je počet vrcholů grafu a M je počet jeho hran. Ne vždy, ale určujeme složitosti v závislosti na velikosti vstupů. Například pokud je velikost vstupu konstantní, složitost určíme vzhledem k hodnotám proměnných na vstupu. Třeba u příkladu s tabulkou násobků jsme složitost určili vzhledem k velikosti tabulky, kterou jsme dostali na vstupu. Jiným příkladem může být vypsání všech prvočísel menších než dané 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-18]. 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.