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

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

Digitální učební materiál

Digitální učební materiál

Sada 1 - Základy programování

Šablony, kontejnery a iterátory

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

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

Digitální učební materiál

Úvod do programování

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

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

Základy algoritmizace a programování

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.

Šablony, kontejnery a iterátory

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

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

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

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

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

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

1 Úvod do Turbo Pascalu

Digitální učební materiál

Anotace. pointery (pars prima). Martin Pergel,

Algoritmizace řazení Bubble Sort

map, multimap - Asociativní pole v C++.

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

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

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

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

Standardní algoritmy vyhledávací.

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

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

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

Časová složitost algoritmů

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

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í

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

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

Algoritmizace prostorových úloh

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

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

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

Sada 1 - Základy programování

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

každého programátora, a tak není divu, že třídicí algoritmy jsou jedny z nejstudovanějších.

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

Více o konstruktorech a destruktorech

Programovací jazyk Pascal

Dynamické datové struktury III.

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

Vector datový kontejner v C++.

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

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

Standardní algoritmy v C++.

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

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

Paralelní grafové algoritmy

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

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

Struktura programu v době běhu

Prioritní fronta, halda

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

Sada 1 - Základy programování

Praktická cvičení algoritmů

Zadání k 2. programovacímu testu

Časová a prostorová složitost algoritmů

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

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

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

Sada 1 - Základy programování

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

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

Iterátory v C++. int pole[20]; for (int *temp = pole, temp!= &pole[20]; temp++) { *temp = 0;

Hledání k-tého nejmenšího prvku

Digitální učební materiál

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Abstraktní třídy, polymorfní struktury

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

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

5. Vyhledávání a řazení 1

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

Marketing cestovního ruchu

Funkční objekty v C++.

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

Základy řazení. Karel Richta a kol.

Rozhledy matematicko-fyzikální

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

Informatika Algoritmy

ALGORITMY A DATOVÉ STRUKTURY

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

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_149_IVT Autor: Ing. Pavel Bezděk Tematický okruh: Algoritmy Datum tvorby: srpen 2013 Ročník: 4. ročník a oktáva Anotace: Algoritmus IX. Třídění dat I. - Insert Sort, Select Sort 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 6. 8. 2013 Odpilotováno dne 17. 2. 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 IX. - Třídění dat I. - Insert Sort, Select Sort Algoritmus, třídění dat, Insert Sort, Select Sort 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).

Třídění dat Insert Sort a Select Sort

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 Pascal {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.

#include <iostream> //#include <conio.h> const int POCET=10; void insert(int p[],int n); using namespace std; int main() { Třídění přímým vkládáním INSERT SORT C++ int a[pocet]={8,3,7,1,10,5,6,4,2,9}; // pole tridenych prvku int pole[pocet]; // vstupní pole pro trideni int pole3[pocet+1]; // Pole pro insertsort int pocet=pocet; // vstupni parametr - pocet prvku int k; for (k=0; k<pocet; k++) // pole tridenych prvku presuneme pole[k]=a[k]; // do vstupniho pole pro trideni cout<< "Prvky pole, ktere mame setridit: "<<endl; for (k=0; k<pocet; k++) // cyklus pro zobrazeni vysledku cout<< pole[k]<<" "; for (k=0; k<pocet; k++) // pole tridenych prvku presuneme pole3[k+1]=a[k]; // do vstupniho pole pro trideni cout<<endl; 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).

insert(pole3,pocet); // zde pouziji o 1 delsi pole3 cout<<("setridene pole (insertsort): \n"); for (k=1; k<=pocet; k++) // cyklus pro zobrazeni vysledku cout<< pole3[k]<<" " ; cout<< ("\n"); // zalomi radek po vytisteni vysledku for (k=0; k<pocet; k++) pole[k]=a[k]; return 0; } 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).

void insert(int p[],int n) // trideni vkladanim - insertsort // zde jsou tridene prvky ulozeny v poli od indexu 1 // p[0] plni ulohu zarazky { int i,j; for (i=2;i<=n;i++) { p[0] = p[i]; j = i-1; while (p[0] < p[j]) { } } } p[j+1] = p[0]; p[j+1] = p[j]; j--; 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).

Schéma třídění INSERT SORT - přímé vkládání II. 45 56 13 43 95 19 7 68 prvek 45 56 13 43 95 19 7 68 pole 45 56 13 43 95 19 7 68 nesetříděná část pole porovnávané prvky setříděná část pole III. 45 56 13 43 95 19 7 68 prvek 45 56 13 43 95 19 7 68 pole 45 13 56 43 95 19 7 68 13 45 56 43 95 19 7 68 IV. 13 45 56 43 95 19 7 68 prvek 13 45 56 43 95 19 7 68 pole 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. 13 43 45 56 95 19 7 68 prvek 13 43 45 56 95 19 7 68 pole 13 43 45 56 95 19 7 68 13 43 45 56 95 19 7 68 13 43 45 56 95 19 7 68 13 43 45 56 95 19 7 68 nesetříděná část pole porovnávané prvky setříděná část pole VI. 13 43 45 56 95 19 7 68 prvek 13 43 45 56 95 19 7 68 pole 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. 13 19 43 45 56 95 7 68 prvek 13 19 43 45 56 95 7 68 pole 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 nesetříděná část pole porovnávané prvky setříděná část pole VIII. 7 13 19 43 45 56 95 68 prvek 7 13 19 43 45 56 95 68 pole 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95 7 13 19 43 45 56 68 95 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í Insert Sort 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) C: časová složitost průměr. př.: C= (N 2 -N-2)/4 M=(N 2-9N-10)/4 M: paměťová složitost nejhorší př. : C= (N 2 -N)/2-1 M=N 2 +3N-4)/2 Asymptotická složitost : časová O(n 2 ) - nejhorší a prům. př.; O(n) - nejlepší př. paměťová O(n 2 ) - nejhorší a prům. 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í.

program Primy_Vyber; uses CRT; const N = 10;- type Pole = array[1..n] of integer; var i:integer; A:Pole; Třídění - přímý výběr - Select Sort Pascal procedure PrimyVyber(var A: Pole); {Zacatek deklarace procedury PrimyVyber} var i,j,k: integer; {indexy prvku} X: integer; {pro vymenu prvku} begin for i:=1 to N-1 do {umistit cislo na pozici i} begin k:=i; for j:=i+1 to N do if A[j] < A[k] then k:=j; {vyhledani minima} if k > i then {vymena prvku s indexy i, k} end begin X:=A[k]; A[k]:=A[i]; A[i]:=X end end; {Konec deklarace procedury PrimyVyber} begin {Telo programu} writeln('zadej ', N, ' netridenych cisel:'); for i:=1 to N do read(a[i]); PrimyVyber(A); {Volani procedury PrimyVyber} writeln('setrideno:'); for i:=1 to N do write(a[i]:5); writeln; {Tisk jiz setrideneho pole} end. repeat until keypressed;

#include <iostream> using namespace std; const int index=10; int a[index]; int pole[index]; void select(int p[],int n); // pole tridenych prvku // vstupní pole pro trideni // prototyp funkce select int ii; int main() { cout<<"zadej prvky pole"<<endl; for (ii=0;ii<index;ii++) { cout<<"zadej "<<ii<<". prvek pole:"; cin >>a[ii]; } 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).

cout<< endl; cout<<"zadali jste tyto prvky pole: "<<endl; for (ii=0;ii<index;ii++) { cout<<ii<<". prvek pole: "<<a[ii]<<endl; } cout << endl; int pocet; pocet=index; int kk; for (kk=0; kk<pocet; kk++) pole[kk]=a[kk]; // nebo int pocet=index; // vstupni parametr - pocet prvku // pole tridenych prvku presuneme // do vstupniho pole pro trideni select(pole,pocet); // zavolani funkce select cout<<endl; } return 0; 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).

void select(int p[],int n) { int i,j,k; int x; for (i=0; i<n-1; i++) { k=i; x=p[i]; for (j=i+1; j<n; j++) if (p[j]<x) { k=j; x =p[j]; } p[k]=p[i];p[i]=x; // trideni pole primym vyberem - selectsort // na i-te misto se dostal nejmensi prvek } } //z mnoziny prvku i+1-ho az n-teho cout<<"setridene pole (selectsort):"<<endl; for (i=0; i<n; i++) { cout<<i<<". prvek pole: "<<p[i]<<endl; } cout<<endl; 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).

45 56 13 43 95 19 7 68 I. 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 45 56 13 43 95 19 7 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 II. 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 56 13 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 III. 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 56 43 95 19 45 68 7 13 19 43 95 56 45 68 Schéma třídění SELECT SORT nesetříděná část pole setříděná část pole porovnávané prvky pole porovnávané prvky pole a vznik nového minima výměna 1. prvku ještě nesetříděného pole se nalezeným minimem v nesetříděném poli min. prvek v nesetříd. poli

7 13 19 43 95 56 45 68 IV. 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 nesetříděná část pole setříděná část pole 7 13 19 43 95 56 45 68 V. 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 95 56 45 68 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 VI. 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 VII. 7 13 19 43 45 56 95 68 7 13 19 43 45 56 95 68 7 13 19 43 45 56 68 95 VIII. 7 13 19 43 45 56 68 98 porovnávané prvky pole porovnávané prvky pole a vznik nového minima výměna 1. prvku ještě nesetříděného pole se nalezeným minimem v nesetříděném poli min. prvek v nesetříd. poli

Časová a paměťová složitost přímého výběru SELECT SORT V poli 1..N najdu min. prvek a prohodím s prvním prvkem v poli. Pokud je min. prvek současně prvkem určeným k prohození ( zde 1.prvek ), nic neprovedu V poli 2..N najdu min. prvek a prohodím s druhým prvkem v poli V poli 3..N najdu min. prvek a prohodím s druhým prvkem v poli.. V poli (N-1)..N najdu min. prvek a prohodím s předposledním prvkem v poli C:časová složitost Složitost : nejlepší př.: C= (N 2 -N)/2 M=3(N-1) M: paměťová složitost průměr. př.: C= (N 2 -N)/2 M=N(lnN+0,57) nejhorší př.: C= (N 2 -N)/2; M=N 2 /4+3(N-1) Asymptotická složitost : časová O(n 2 ) Ω(n 2 ) paměťová O(n) - nejlepší O(n*ln n) - průměrná O(n 2 ) nejhorší Přímý výběr zabere vždy O(n 2 ) času, protože při výběru prvku v sekvenci musíme danou sekvenci projít vždy celou.

Doporučená videa Insert Sort: http://www.youtube.com/watch?v=roalu379l3u Select Sort: http://www.youtube.com/watch?v=ns4tptc8whw

Použité zdroje WIRTH, Niklaus. Algoritmy a štruktúry údajov. 2.vyd. Bratislava: Alfa, 1989, 481 s. ISBN 80-050-0153-3.