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

Digitální učební materiál

Digitální učební materiál

C# konzole Podíl dvou čísel, podmínka IF

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

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

Čí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: Měření teploty Číslo DUM: III/2/FY/2/1/14 Vzdělávací předmět: Fyzika Tematická oblast: Fyzikální

Čí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: Model atomu Číslo DUM: III/2/FY/2/2/2 Vzdělávací předmět: Fyzika Tematická oblast: Elektrické a

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

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

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

Sada 1 - Základy programování

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

Úvod do programování

Sada 1 - Základy programování

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

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

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

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

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

Sada 1 - Základy programování

Anotace. Jednotky (tvorba a využití), struktury (typ record),

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

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

Časová a prostorová složitost algoritmů

Sada 1 - Základy 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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Více o konstruktorech a destruktorech

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

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

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

Úvod do programování. Lekce 1

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

Anotace. Dynamické programování, diskrétní simulace.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Algoritmy I, složitost

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Funkční objekty v C++.

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

Závěrečná zkouška z informatiky 2011

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

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

Vector datový kontejner v C++.

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

Standardní algoritmy v C++.

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

EU další instituce a orgány

Čí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: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

Algoritmizace a programování

Mgr. Renáta Rellová. Výukový materiál zpracován v rámci projektu EU peníze školám

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

Šablony, kontejnery a iterátory

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

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

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

Poslední nenulová číslice faktoriálu

Funkce, intuitivní chápání složitosti

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

Sada 1 - Základy programování

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

Zlomky. Složitější složené zlomky

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

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

Střední průmyslová škola Zlín

Přijímací zkouška z informatiky Dz

Skripty - úvod. Linux - skripty 2

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

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

Základní díly a pojmy PC

Význam cestovního ruchu po stránce ekonomické II.

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

DTP Základy programování Úvod do předmětu

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Základy programování (IZP)

Programování v C++ 1, 1. cvičení

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

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

ARMÁDA ČESKÉ REPUBLIKY

Operační systém. Mgr. Renáta Rellová. Výukový materiál zpracován v rámci projektu EU peníze školám

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_144_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 IV. 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 13. 7. 2013 Odpilotováno dne 2. 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 IV. - Výpočetní složitost algoritmů Algoritmus, časová 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).

Výpočetní složitost algoritmů 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).

Algoritmická analýza Algoritmická analýza je rozložení určitého postupu na konečný počet přesně určených kroků (operací). Výsledkem algoritmické analýzy je algoritmus. Krok algoritmu je operace proveditelná v konstantním čase. Např. aritmetická operace (+,-,.), porovnání dvou hodnot (čísel), přiřazení ( pro jednoduché typy, ale ne pro pole),. 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).

Složitost algoritmu Pokud řešíme nějakou programátorskou úlohu, často nás napadne více různých řešení a potřebujeme se rozhodnout, které z nich je nejlepší. Abychom to mohli posoudit, potřebujeme si zavést měřítka, podle kterých budeme různé algoritmy porovnávat. Nás u každého algoritmu budou zajímat dvě vlastnosti: čas, po který algoritmus běží, a paměť, kterou při tom spotřebuje. 1. Čas nebudeme měřit v sekundách (protože stejný program na různých počítačích běží rozdílnou dobu), ale v počtu provedených operací. Pro jednoduchost budeme předpokládat, že aritmetické operace, přiřazování, porovnávání apod. nás stojí jednotkový čas. Ona to není úplná pravda, tyto operace se ve skutečnosti přeloží na procesorové instrukce, které se teprve zpracovávají. Ale nám postačí vědět, že těch instrukcí bude vždy konstantní počet. 2. Množství použité paměti můžeme zjistit tak, že prostě spočítáme, kolik bajtů paměti náš program použil. Nám obvykle bude stačit menší přesnost, takže všechna čísla budeme považovat za stejně velká a velikost jednoho prohlásíme za jednotku prostoru. Budeme proto oba parametry algoritmu určovat v závislosti na velikosti vstupu a hledat funkci, která nám tuto závislost popíše.

Časová složitost algoritmu doba výpočtu měří se počtem instrukcí. Je to funkce, která každé hodnotě N udávající velikost konkrétního řešeného problému, přiřazuje počet operací vykonaných při výpočtu daného algoritmu. Tato funkce je zpravidla rostoucí (ale může být i neklesající). Časová složitost algoritmu funkce, která vyjadřuje, kolik kroků (operací) max. udělá daný algoritmus pro vstup velikosti n. Paměťová (prostorová) složitost algoritmu paměťové nároky měří se v bytech nebo počtem jednoduchých proměnných, které budou při výpočtu zapotřebí. Závislost paměťových nároků algoritmu na velikosti řešeného problému nebo vstupních dat. Časová složitost problému je časová složitost nejoptimálnějšího algoritmu, který řeší daný problém, tedy Složitost problému je složitost nejlepšího algoritmu, který ho řeší. Podobné souvislosti platí i pro paměťovou složitost programu.

Časová složitost algoritmu x paměťová složitost algoritmu Nejlepší algoritmus má nejmenší složitost. Ale časová a paměťová složitost jdou často proti sobě. V řadě případů platí, že čím více času se snažíme ušetřit, tím více paměti nás to pak stojí, kvůli chytré reprezentaci dat v paměti a různým vyhledávacím strukturám. Musíme si vybrat, zda-li chceme menší složitost časovou nebo paměťovou. Který z těchto faktorů je pro nás důležitější, se musíme rozhodnout vždy u konkrétního příkladu. Nás u valné většiny algoritmů bude nejdříve zajímat časová složitost a až pak složitost paměťová. Budeme se tedy snažit, aby algoritmus měl co nejmenší časovou složitost, i když tím často zvedneme paměťovou složitost. Paměti mají totiž dnešní počítače dost, a tak se málokdy stane, že vymyslíme algoritmus, který má dokonalý čas, ale nestačí nám na něj paměť. Ale přesto si musíme dávat pozor na paměťová omezení, např. šachové algoritmy.

Program faktoriál v C++ /* FAKTORIAL */ #include <iostream> /* hlavickovy soubor vstupy a vostupy */ #include <math.h> /* hlavickovy soubor matematicky */ using namespace std; int f,fak; long double faktorial; void faktor(); int main() { faktor(); return 0; } void faktor() {cout<<endl; cout<<(" Zadej hodnotu cisla ( maximalne cislo 1754 ),")<<endl; cout<<(" pro ktere chces vypocitat faktorial: "); cin >>fak; cout<<endl; if (fak>1754){cout<<(" Byla prekrocena hodnota 1754!")<<endl; cout<<(" Vysledna hodnota faktorialu je tak velka, ze ji PC uz nedokaze spocitat!!")<<endl; cout<<(" Cislo ma vice nez 4930 cislic!!!")<<endl; cout<<(" ")<<fak<<"! = chyba"<<endl; } else { faktorial=1; for (f=1;f<=fak;f++) {faktorial=faktorial*f; }cout<<endl; cout<<(" Faktorial cisla:")<<endl; cout<<" "<<fak<<"! = "<<faktorial<<endl;} } 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).

Program Faktorial; uses Crt; var n,i:integer; f,faktorialn:extended; begin {extended má rozsah 10-4932.. 10 4932 } writeln; writeln; writeln('program Faktorial'); writeln; writeln('maximalni hodnota: 1754!'); writeln('hodnoty vetsi nez 1754!, jsou moc velke i pro pocitac!'); writeln('po zadani hodnoty N stiskni enter!'); writeln; write('zadej N: '); readln(n); if n<=1754 then begin Program Faktoriál Pascal writeln('spravne zadana hodnota z mnoziny {1..1754}'); writeln; f:=1; for i:=1 to n do f:=f*i; faktorialn:=f; writeln('faktorial: ',n,'! = ',faktorialn); end else writeln('hodnota N mimo mnozinu {1..1754}'); writeln; writeln('po precteni vysledku stiskni enter!'); repeat until keypressed; end.

program faktorial; uses Crt; var x:integer; Program faktoriál s funkcí function fact(n:integer): double; {double má rozsah 10-324.. 10 308 } begin var f:double; i:integer; begin f:=1; for i:=1 to n do f:=f*i; fact:=f; end; clrscr; { vymaze obrazovku} writeln; writeln(' Program Faktorial'); writeln; writeln(' Jaky faktorial chces zjistit? '); ale pouze do 170! writeln(' Maximalne muzes zjistit hodnotu 170! '); write(' Zadej cislo:'); read(x); writeln('--------------'); write(' ',x,'!='); write(fact(x)); repeat until keypressed; end. 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).

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). Časová a paměťová složitost faktoriálu Časová Jednotka času = jedna jednoduchá operace, např. přiřazení. Odhadneme kolik operací přiřazení provedeme: 1. f:=1; 1 přiřazení 2. f:=f*i; (for i:=1 to n do f:=f*i; od 1 do n) 1 x n n přiřazení Časová složitost = n+1 závisí lineárně na n lineární Paměťová Kolik program bude potřebovat paměťových buněk? Nebudeme rozlišovat jejich velikost. Uložení hodnot v proměnných x; f; i; n; fact; potřebujeme 5 paměťových buněk Paměťová složitost = 5 nezávisí na n konstantní

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-13]. 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.