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.

Podobné dokumenty
Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

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

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

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

Struktura programu v době běhu

PODPROGRAMY PROCEDURY A FUNKCE

dovolují dělení velkých úloh na menší = dekompozice

Programovací jazyk Pascal

NPRG030 Programování I, 2015/16 1 / :25:32

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Časová a prostorová složitost algoritmů

DUM 06 téma: Tvorba makra pomocí VBA

Více o konstruktorech a destruktorech

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

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

Programujeme v softwaru Statistica

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

Funkce, podmíněný příkaz if-else, příkaz cyklu for

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Rekurze. Jan Hnilica Počítačové modelování 12

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

1. D Y N A M I C K É DAT O V É STRUKTUR Y

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

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

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

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

Programovani v Maplu Procedura

Sada 1 - Základy programování

Anotace. Pointery, dynamické proměnné

Anotace. Pointery. Martin Pergel,

Úvod do programování

Programování v jazyce JavaScript

Anotace. Dijkstrův algoritmus,

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

Rekurzivní algoritmy

Digitální učební materiál

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Sada 1 - Základy programování

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Anotace. pointery (pars prima). Martin Pergel,

Maturitní otázky z předmětu PROGRAMOVÁNÍ

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

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

Sdílení dat mezi podprogramy

2 Strukturované datové typy Pole Záznam Množina... 4

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

6. Příkazy a řídící struktury v Javě

Úvod do programování. Lekce 5

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

Řídicí struktury. alg3 1

Digitální učební materiál

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Anotace. Ordinalni typy - typ char, funkce ord, chr, succ, prev, inc, dec,

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Podprogramy; procedury a funkce

5 Rekurze a zásobník. Rekurzivní volání metody

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

ISU Cvičení 7. Marta Čudová

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

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

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

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Numerická stabilita algoritmů

PROGRAMOVÁNÍ V SHELLU

Implementace LL(1) překladů

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

PSK3-9. Základy skriptování. Hlavička

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Základní datové struktury III: Stromy, haldy

Informatika 8. třída/6

Algoritmizace prostorových úloh

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

Objektově orientované programování

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Prohledávání do šířky = algoritmus vlny

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

53. ročník Matematické olympiády 2003/2004

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Algoritmizace a programování

Principy indukce a rekursivní algoritmy

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

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

Příloha Jazyk Coach

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Transkript:

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

Další pojmy složitosti Složitost v nejlepším případě, složitost v průměrném případě průměrný počet kroků algoritmu přes jednotlivé instance dané délky, amortizovaná složitost průměrný počet kroků při potenciálně nekonečně mnoha po sobě jdoucích operací uvažujeme nejhorší možnou posloupnost, složitost problému řeší, jak efektivní algoritmus existovat může a jak efektivní algoritmus už existovat nemůže.

Definice funkcí a procedur Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu. Procedury a funkce představují možnost je naprogramovat jednou a použít mnohokrát. Procedura: Součást programu schopná přijmout parametry a zpracovat. Funkce: Součást programu schopná přijmout parametry, zpracovat a vrátit výsledek. Příklady: Přejdi ulici, vypiš hlášení; dojed vlakem někam, spočítej faktoriál.

Definice funkcí function nazev(argument :typ;...):navratovy typ Zahajujeme kĺıčovým slovem function, následuje název funkce, argumenty (parametry) zapisujeme do kulatých závorek jako bychom definovali proměnné. Jednotlivé parametry oddělujeme středníkem, za dvojtečkou pak uvedeme návratový typ dotyčné funkce. Návratová hodnota se přiřadí do proměnné jmenující se stejně jako příslušná funkce.

Příklad program x; var a:integer; function secti(a:integer; b:integer):integer; secti:=a+b; end. a:=secti(5,10); writeln(a);

Scope resolution Kromě globálních proměnných vznikají i proměnné lokální. Pokud je konflikt v názvu globální a lokální proměnné, platí ta lokální, jako v minulém příkladu. Proměnné jsou předávány hodnotou, tedy hodnota proměnné je okopírována. Příklad: function secti(a:integer; b:integer):integer; secti:=a+b; a:=0; x:=5; y:=10; c:=secti(x,y); writeln(x); end.

Předání argumentu referencí (odkazem) Co když naopak chceme obsah předávané proměnné ve funkci změnit? Použijeme při popisu argumentu kĺıčové slovo var: function f(var a:integer; b:integer):integer; a:=5; b:=5;... x:=0; y:=0; a:=f(x,y); writeln(x); writeln(y);... Výsledek: 5 a 0; není-li referencí předána proměnná chyba!

Funkce bez parametrů Má smysl definovat funkci bez parametrů (kupř. chceme-li načítat). V tom případě můžeme vynechat kulaté závorky jak při definici, tak při volání: function x:integer; x:=10;... a:=x;...

Procedury Procedury jsou funkce, které nevracejí hodnotu. procedure jmeno(argumenty);... jmeno(argumenty);... Příklad: procedure vyp(a:integer;b:integer); writeln(a); writeln(b); {Vypsali jsme argumenty}... vyp(5,10);...

Vnořené funkce a procedury Proceduru či funkci lze definovat i uvnitř jiné procedury nebo funkce: procedure f(a:integer); procedure g(b:integer); writeln( Proc. g v procedure f s par-em,b); writeln( Procedura f s parametrem,a); g(2);{volame vnorenou proc. g}

Scope resolution Procedura/funkce vidí jen funkce (procedury) vnořené přímo do sebe (ne do svých vnořených funkcí/procedur)! Vnořené funkce vnášejí další zmatek do významu proměnných (a dokonce procedur a funkcí). Identifikátor má takový význam, jaký je v danou chvíli nejlokálnější.

Příklad procedure f(h:integer); procedure g(b:integer); procedure h(c:integer); writeln( Procedura h s par.,c); writeln( Procedura g s parametrem,b); h(5); writeln( Funkce f s parametrem,h); g(3); f(5); {zatim OK, ale h(4) udela chybu!}

Rekurze Může mít dobrý smysl volat z funkce sebe sama. Této metodě říkáme rekurze. Rekurze není nic jiného, než vtipně pojmenovaná indukce! Příklady: Úředníci na úřadech, Faktoriál, Caesarův kód...

Úředníci na úřadech Člověk chce nechat provést úřední výkon. Úředník požaduje vyplnění papírů vyžadující návštěvy dalších úřadů. Řešení: procedure vypln(musime vyplnit:seznam papiru); var x:seznam papiru; for papir in musime vyplnit do x:=zeptej se urednika(papir); vypln(x);

Faktoriál n! = 1 2... n Jak tuto funkci naprogramovat? Cyklem: fakt:=1; for i:=1 to n do fakt:=fakt*i; nebo rekurzí.

Faktoriál rekurzí: function faktorial(a:integer):integer; if a<2 then faktorial:=1; else faktorial:=a*faktorial(a-1); Jaká je složitost výpočtu funkce faktoriál?

Přednášející jde do posluchárny Přednášející při cestě po posluchárny na schodech vždycky bud to šlápne na následující schod, nebo jeden schod překročí. Kolika způsoby může vylézt do posluchárny F1? (schody nepočítejte, jejich počet odhadněte) Nápady?

Přednášející do posluchárny řešení Vzniká rekurence f n = f n 1 +f n 2. Rekurence není nic jiného, než matematický zápis rekurze. Řešení: function schody(a:integer):integer; if a=1 then schody=1; else if a=2 then schody=2; else schody:=schody(a-1)+schody(a-2); Jaký je problém? Ano, příšerná složitost.