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

Sada 1 - Základy programování

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

Úvod do programování

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

Základy algoritmizace a programování

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Několik příkladů v Turbo Pascalu

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

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

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

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í

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

Tematická oblast: Programování 2 (VY_32_INOVACE_08_2_PR) Anotace: Využití ve výuce: Použité zdroje:

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

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

Třídění čísel v poli = vnitřní třídění (řazení)

1 Úvod do Turbo Pascalu

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

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

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

ALGORITMY A DATOVÉ STRUKTURY

NPRG030 Programování I, 2017/18 1 / :22:16

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

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

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

Sada 1 - Základy programování

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Algoritmy I, složitost

Algoritmizace řazení Bubble Sort

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

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

Digitální učební materiál

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

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

Časová složitost / Time complexity

EU další instituce a orgány

Programovací jazyk Pascal

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

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.

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

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

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

IB111 Úvod do programování skrze Python

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

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Sada 1 - Základy programování

Anotace. pointery (pars prima). Martin Pergel,

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

Sada 1 - Základy programování

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

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

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

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

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

Čí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 a programování

Implementace LL(1) překladů

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

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

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

ÚČETNICTVÍ Bankovní účty, úvěrové účty

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

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

Algoritmizace prostorových úloh

ÚČETNICTVÍ Charakteristika daňové evidence

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

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

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Kateřina Raichová. Materiál je publikován pod licencí Creative Commons.

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

ÚČETNICTVÍ Způsoby pořízení dlouhodobého majetku

Časová a prostorová složitost algoritmů

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

Pole a kolekce. v C#, Javě a C++

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

Prioritní fronta, halda

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

3. Derivace funkce Definice 3.1. Nechť f : R R je definována na nějakém okolí U(a) bodu a R. Pokud existuje limita f(a + h) f(a) lim

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

Digitální učební materiál

Sada 1 - Základy programování

Digitální učební materiál

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

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_147_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 VII. Nejhorší, průměrný a nejlepší případ algoritmu Metodický pokyn: Při výuce nutno postupovat individuálně. Pokud není uvedeno jinak, je použitý materiál z vlastních zdrojů autora DUM.

Autor Ing. Pavel Bezděk Vytvořeno dne 28. 7. 2013 Odpilotováno dne 27. 1. 2014 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 VII. - Nejhorší, průměrný a nejlepší případ algoritmu Algoritmus, nejhorší případ 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).

Složitost algoritmu v nejlepším, průměrném a nejhorším případě

Nejhorší, průměrný a nejlepší případ Opět si vše vysvětlíme jen na časové složitosti. Pro paměťovou složitost je to obdobné. Velká část algoritmů běží pro různé vstupy stejné velikosti různou dobu. U takových algoritmů pak můžeme rozlišovat složitost v nejhorším případě, v nejlepším případě a třeba i průměrnou časovou složitost. Časová složitost v nejhorším případě Časová složitost z hlediska nejhoršího případu udává pro každé N, jak nejdéle může trvat výpočet podle algoritmu s libovolnými vstupními daty velikosti N. Má význam horní meze, kterou doba výpočtu s daty velikosti N rozhodně nepřekročí. Analýzou algoritmu často snadno určíme jeho časovou složitost v nejhorším případě, nebo aspoň hrubší horní odhad této složitosti. Časová složitost v průměrném případě určuje pro každé N průměrnou délku výpočtu při zadání dat velikosti N. Má význam doby, kterou můžeme v průměru očekávat, že bude k výpočtu zapotřebí. Většinou lépe charakterizuje algoritmus, než složitost v nejhorším případě. Obvykle je ale dost obtížné průměrnou časovou složitost zjistit. Proto častěji při posuzování algoritmů pracujeme se složitostí z hlediska nejhoršího případu. Časová složitost v nejlepším případě Ve zvláštních případech mohou být vstupní data taková, že se algoritmu zjednoduší výpočet a jeho složitost je nižší, ale pouze v tom zvláštním případě. Má význam dolní meze, doba výpočtu s daty velikosti N rozhodně nebude menší než v tomto případě, přičemž k této min. době může dojít jen ve zvláštním případě (výjimečně). Většinou nepoužíváme!

Hledání max. prvku v poli Program Maximum; uses Crt; const N=20; type Pole = array[1..n] of integer; var P: Pole; Max,i, Kolikaty: integer ; begin clrscr; writeln; Writeln('Vyhledani max. prvku v poli:'); writeln('pole ma 20 prvku.'); writeln('chces-li vice prvku pole,'); writeln('pak zmen konstantu N ve zdrojovem textu programu!'); writeln; writeln('mas-li mene prvku pole, nez je 20,'); writeln('pak do ostatnich (neobsazenych) prvku pole zadej nuly.'); writeln; writeln;

For i:=1 to N do begin write(i:3,'.prvek pole: '); readln(p[i]); end; Max:=P[1]; Kolikaty:=1; For i:=2 to N do begin if P[i]>Max then begin Max:=P[i]; Kolikaty:=i; end; end; writeln; writeln; writeln('maximun = ',Max); writeln('maximalni prvek je ',Kolikaty,'. prvek v poli.'); repeat until keypressed; end.

Časová složitost hledání max. prvku Časovou složitost určujeme podle počtu základních operací v našem případě operace přiřazení a porovnání. Nejhorší případ: Prvky pole seřazeny od nejmenšího k největšímu Pole: 4, 6, 8, 9, 15, 18, 22, 35, 41, 50 Max= první prvek pole 1x přiřazení Kolikaty:=1 1x přiřazení Cyklus 2 až N P[i]>Max (N-1)x 1 porovnání Max=P[i] (N-1)x 1 přiřazení Kolikaty:=i (N-1)x 1 přiřazení Celkem 1+1+N-1+N-1+N-1=3N-1 Časová složitost lineární 3N-1 Nejlepší případ: Max. prvek je první v poli Pole: 50, 41, 35, 22, 18, 15, 9, 8, 6, 4 Max= první prvek pole 1x přiřazení Kolikaty:=1 1x přiřazení Cyklus 2 až N P[i]>Max (N-1)x 1 porovnání žádné přiřazení v cyklu Celkem 1+1+N-1=N +1 Časová složitost lineární N+1 Průměrný případ: Prvky pole nejsou seřazeny Pole: 22, 8, 4, 35, 18, 50, 6, 41, 9, 15 Max= první prvek pole 1x přiřazení Kolikaty:=1 1x přiřazení Cyklus 2 až N P[i]>Max (N-1)x 1 porovnání Max=P[i] c x 1 přiřazení c leží v intervalu <1,(N-1)> Kolikaty:=i c x 1 přiřazení c leží v intervalu <1,(N-1)> Časová složitost lineární N+1+2c Celkem 1+1+N-1+c+c=N+1+2c c leží v intervalu <1,(N-1)>

Asymptotická složitost hledání max. prvku Asymptotická časová složitost Nejlepší případ N+1 O(N) Průměrný případ N+1+2c O(N) Nejhorší případ 3N-1 O(N) Asymptotická paměťová složitost Ve všech případech potřebujeme N paměťových buněk pro pole a jednu buňku pro maximum a jednu pro Kolikaty. Celkem N+2. Takže asymptotická složitost tohoto algoritmu je v nejhorším i nejlepším případě lineární, tak nikdy nebude horší nebo lepší než lineární. Tedy je vždy lineární O(N)! Asymptotická paměťová složitost je vždy O(N) - lineární!

program Prime_Vkladani; uses CRT; const N = 10; type Pole = array[1..n] of integer; var i:integer; A:Pole; procedure PrimeVkladani(var A: Pole); {začátek deklarace procedury PrimeVkladani} var i,j: integer; {indexy prvku} X: integer; {pro výměnu prvku} Hledat:Boolean; begin for i:=2 to N do {zatřiďujeme číslo z pozice i} begin X:=A[i]; j:=i-1; Hledat:=X<A[j]; while Hledat do Třídění přímým vkládáním INSERT SORT {hledáni správné pozice} begin A[j+1]:=A[j]; j:=j-1; if j=0 then Hledat:=false end; A[j+1]:=X end else end; {konec deklarace procedury PrimeVkladani} begin writeln('zadej ', N, ' netříděných čísel:'); PrimeVkladani(A); {volání procedury PrimeVkladani} Hledat:=X<A[j] for i:=1 to N do read(a[i]); writeln('setříděno:'); for i:=1 to N do write(a[i]:5); repeat until keypressed; end.

Schéma třídění Insert Sort - přímým vkládáním nesetříděná část pole porovnávané prvky setříděná část pole 45 56 13 43 95 19 7 68 II. prvek pole 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 III. prvek pole 45 56 13 43 95 19 7 68 45 13 56 43 95 19 7 68 13 45 56 43 95 19 7 68 IV. prvek pole 13 45 56 43 95 19 7 68 13 45 43 56 95 19 7 68 13 43 45 56 95 19 7 68 13 43 45 56 95 19 7 68 V. prvek pole 13 43 45 56 95 19 7 68

nesetříděná část pole porovnávané prvky setříděná část pole 13 43 45 56 95 19 7 68 VI. prvek pole 13 43 45 56 95 19 7 68 13 43 45 56 19 95 7 68 13 43 45 19 56 95 7 68 13 43 19 45 56 95 7 68 13 19 43 45 56 95 7 68 13 19 43 45 56 95 7 68 VII. prvek pole 13 19 43 45 56 95 7 68 13 19 43 45 56 7 95 68 13 19 43 45 7 56 95 68 13 19 43 7 45 56 95 68 13 19 7 43 45 56 95 68 13 7 19 43 45 56 95 68 7 13 19 43 45 56 95 68 VIII. prvek pole 7 13 19 43 45 56 95 68 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95

Časová a paměťová složitost přímého vkládání Začnu 2. prvkem v poli, porovnám ho s 1. prvkem poli ( s prvkem s hodnotou indexu o 1 menší), pokud je prvek s vyšším indexem menší, prvky prohodím. Pokud je prvek s vyšším indexem větší nebo roven, nic neprovedu. Pak vezmu 3. prvek v poli a porovnám s 2. prvkem ( s prvkem s hodnotou indexu o 1 menší), po porovnání a případném prohození, porovnám 2. prvek s 1.prvkem. Vezmu 4. prvek a porovnám s 3. prvkem, pak 3. prvek s 2. prvkem, 2. prvek s 1. prvkem. Na začátku pole se mi vytváří setříděná část pole, do které postupně vkládám prvky z nesetříděné části pole (na opačné straně pole). Pak vezmu 5. prvek a porovnám s 4. prvkem,., až 2. a 1. prvek. Nakonec beru N. prvek a porovnávám s (N-1). prvkem, (N-1) a (N-2) prvek, až se dostanu k porovnání 2. a 1. prvku Složitost : nejlepší př.: C= (N-1); M=2(N-1) průměr. př.: C = (N 2 -N-2)/4 M=(N 2-9N-10)/4 nejhorší př. : C= (N 2 -N)/2-1 ; M=N 2 +3N-4)/2 C: časová složitost M: paměťová složitost Asymptotická složitost : časová O(n 2 ) - nejhorší a prům. př.; paměťová O(n 2 ) - nejhorší a prům. př.; O(n) - nejlepší př. O(n) - nejlepší př. Když jsou data již správně setříděná (od nejmenší hodnoty k největší), není tedy již co třídit, je složitost časová i paměťová lineární.

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-28]. 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. WIRTH, Niklaus. Algoritmy a štruktúry údajov. 2.vyd. Bratislava: Alfa, 1989, 481 s. ISBN 80-050-0153-3.