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

Sada 1 - Základy programování

Digitální učební materiál

Šablony, kontejnery a iterátory

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

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

IB111 Úvod do programování skrze Python

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

Úvod do programování

Digitální učební materiál

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.

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

Šablony, kontejnery a iterátory

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

Bubble sort. příklad. Shaker sort

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

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

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

Programovací jazyk Pascal

Několik příkladů v Turbo Pascalu

Standardní algoritmy vyhledávací.

Sada 1 - Základy programování

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

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

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

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

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

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

Anotace. Pointery, dynamické proměnné

IB111 Úvod do programování skrze Python

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

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

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

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Vector datový kontejner v C++.

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

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

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

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

Abstraktní datové typy

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

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

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

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

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

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

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

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

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

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

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

Sada 1 - Základy programování

Informatika Algoritmy

Funkční objekty v C++.

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

Sada 1 - Základy programování

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

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

Rekurze a rychlé třídění

Základy algoritmizace a programování

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

Digitální učební materiál

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

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

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

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

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

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

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

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

Abstraktní třídy, polymorfní struktury

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

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

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

Elegantní algoritmus pro konstrukci sufixových polí

Třídění a vyhledávání Searching and sorting

Rozhledy matematicko-fyzikální

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

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

Anotace. pointery (pars prima). Martin Pergel,

Algoritmizace prostorových úloh

Vstupní a vstupní proudy v C++

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

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

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

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_150_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 X. Třídění dat II. - Přihrádky : Bucket Sort, Radix Sort 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 10. 8. 2013 Odpilotováno dne 20. 2. 2014 ve třídě 4.A Vzdělávací oblast Vzdělávací obor Tematický okruh Informatika a informační a komunikační technologie Informatika a výpočetní technika Algoritmus Téma Algoritmus X. - Třídění dat II. - Přihrádky : Bucket Sort, Radix Sort Klíčová slova Algoritmus, přihrádkové třídění dat, Radix 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).

Přihrádkové třídění dat Bucket Sort a Radix Sort

Pro hloubavé Bucket Sort Přihrádkové algoritmy - algoritmy řadící nikoliv na základě porovnávání, ale využívající vlastností prvků řazené sekvence k provádění distribucí (roztřídění). V rámci algoritmu Bucket Sort se využívá předpoklad, že prvky řazené sekvence jsou z prostoru, jehož velikost je malá, daná nějakou konstantou (např. každý prvek řazené sekvence je z množiny {1,2,3,...,m}). Bucket Sort využívá m počítadel. I-té počítadlo uvádí počet výskytů i-tého elementu v sekvenci. Jediným průchodem sekvencí lze určit hodnoty počítadel a získat seřazenou sekvenci.

Bucket Sort Příklad: Mějme prvky m=3 {1,2,3} a řazenou sekvenci S. Sekvence S - prvek "2" a prvek "1" jsou v sekvenci obsaženy dvakrát Budeme tedy postupovat následujícím způsobem: 1) vytvoříme m počítadel (věder - buckets) Vytvořená tři počítadla 2) každý prvek ze sekvence S je vložen do jednoho z m počítadel Každý prvek je ve správném počítadle 3) přetáhneme prvky z jednotlivých počítadel do původní sekvence S

Časová složitost Bucket Sort Algoritmus Bucket Sort má asymptotickou časovou složitost O(m + n), kde n je počet prvků řazené sekvence a m je počet počitadel. Bucket Sort je algoritmus s lineární časovou složitostí.

Přihrádkové třídění Radix Sort velmi jednoduché třídění Data na vstupu (v řádcích) 853 322 636 7 739 89 320 231 259 48 385 801 540 270 932 691 547 958 500 235 483 415 206 357 24 122 11 564 Přihrádky: Čísla rozdělím do přihrádek, nejprve podle jednotek, pak beru postupně přihrádky (s rozdělenými čísly podle jednotek) od 0 do 9 a obsah každé přihrádky rozdělím do dalších přihrádek, tentokrát podle desítek, vybírám ze přihrádky podle pořadí, jak jsem do přihrádky ukládal, když skončím, pak beru postupně přihrádky ( podle desítek) od 0 do 9 a obsah každé přihrádky rozdělím do nových přihrádek, nyní podle stovek. Dodržuji výběr z každé přihrádky, podle pořadí, jak bylo do ní ukládáno.

Jednotky 0 1 2 3 4 5 6 7 8 9 320 231 322 853 24 385 636 7 48 739 540 801 932 483 564 235 206 547 958 89 270 691 122 415 357 259 500 11 Desítky 0 1 2 3 4 5 6 7 8 9 500 11 320 231 540 853 564 270 483 691 801 415 322 932 547 357 385 206 122 235 48 958 89 7 24 636 259 739 Horní prvek ve sloupci - začátek pole Dolní prvek ve sloupci - konec pole Stovky 0 1 2 3 4 5 6 7 8 9 7 122 206 320 415 500 636 739 801 932 11 231 322 483 540 691 853 958 24 235 357 547 48 259 385 564 89 270 Výstup 7 11 24 48 89 122 206 231 235 259 270 320 322 357 385 415 483 500 540 547 564 636 691 739 801 853 932 958 Pole přihrádek seřadím za sebou a mám setříděné vstupní pole

Popis průběhu třídění Toto třídění je zvláštní v tom, že se třídí podle cifer (nebo jiné sekvence). Zopakujeme si tedy postup pro trojciferná čísla. Rozdělíme je do přihrádek 0, 1, 2 9, a to podle jejich poslední cifry. Poté vezmeme přihrádku 0, ze které budeme vybírat čísla (vybíráme podle pořadí, jak jsme čísla do přihrádky ukládali) a přiřazovat je podle druhé cifry do přihrádek 0, 1, 2 9. Nebudou to ovšem ty samé přihrádky, ale přihrádky pro druhý řád. Tak budeme pokračovat i s čísly z přihrádek 1 9 prvního řádu. Teď postupně budeme brát čísla z přihrádek 2. řádu. Začneme opět u 0 a umístíme je do přihrádky 0 9 třetího řádu, a to právě podle třetí cifry. Čísla z přihrádek se berou v takovém pořadí, v jakém jsme je vložili. Použijeme tedy frontu (data, která jdou první dovnitř, jdou první ven, na rozdíl od zásobníku, kde data, která jsme uložili naposledy, čteme jako první). Jako příklad uvedu cestu čísla 473. V prvním rozmisťování se číslo dostane do přihrádky číslo 3. Z té je při následujícím přemístění přesunuto do přihrádky druhého řádu s číslem 7 a na závěr je přesunuto do přihrádky třetího řádu s číslem 4.

Princip Radix Sort Třídící algoritmus Radix Sort je, stejně jako Bucket Sort, založen na řazení pomocí distribucí (rozdělování). Radix Sort lze využít v případě, že prvky řazené sekvence lze chápat jako sekvence cifer, popřípadě písmen nebo jiných symbolů. Radix Sort je postaven na algoritmu Bucket Sort, ale je použitelný pro mnohem rozsáhlejší univerzální množiny, z nichž vybíráme prvky řazené posloupnosti. 1. řazení dle nejméně významné cifry (jednotky) 2. řazení dle významnější cifry (desítky) 3. řazení dle nejvýznamnější cifry (stovky) Každý z těchto kroků je implementován jako Bucket Sort. V každém kroku budeme potřebovat m počítadel. V našem příkladě jsme pracovali s dekadickými ciframi, a proto potřebujeme v každém kroku 10 počítadel (buckets) v intervalu <0,9>. Obecně lze Radix Sort užít v případě, že řazené prvky jsou P-ciferná přirozená čísla soustavě o základu R. Každý prvek je tedy v intervalu <0,R-1>. Radix Sort má v tomto případě počítadel. P-kroků. V každém kroku se užívá přesně R

Časová složitost algoritmu Radix Sort Předpokládejme, že jednotlivé kroky algoritmu Radix Sortu lze provádět vždy jedním průchodem sekvence, tedy v O(n). Potom celková časová složitost algoritmu bude součtem těchto kroků. Počet těchto kroků je dán počtem cifer P, z nichž jsou složeny tříděné prvky sekvence. Algoritmus Radix Sort má tedy dobu běhu O(nP), kde n je počet prvků řazené sekvence. Tato rychlost je ale vyvážena tím, že je algoritmus omezen pouze na sekvence cifer, popřípadě písmen nebo jiných symbolů a není tedy tak univerzální jako ostatní třídící algoritmy.

program Prihradkove_Trideni const N = 10; {pocet zaznamu} D = 1; {dolni mez klice} H = 999; {horni mez klice} type Pole = array[1..n] of record var i:integer; A:Pole; procedure PrihradkoveTrideni(var A: Pole); var B: Pole; {setridene zaznamy} C: array[d..h] of integer; {hranice prihradek} I, K: integer; begin {Velikosti prihradek:} for I:= D to H do C[I]:= 0; klic: integer; {cosi dalsiho...} end; Přihrádkové třídění Pascal for I:= 1 to N do begin K := A[I].klic; C[K] := C[K] + 1 end;{konce prihradek:} for I:= D+1 to H do C[I] := C[I] + C[I-1];{Zarazeni zaznamu do prihradek:} for I:= N downto 1 do begin K:= A[I].klic; B[C[K]]:= A[I]; C[K]:= C[K] -1 end; A := B {Predani setrideneho pole ven:} end; { konec procedury PrihradkoveTrideni} begin writeln('zadej ',N,' tridenych cisel z rozmezi od ',D,' do ',H,' :'); for i:=1 to N do read(a[i].klic); PrihradkoveTrideni(A); writeln('setrideno:'); for i:=1 to N do write(a[i].klic:5); writeln end. Pro hloubavé

Program SortRadix; Uses Crt, Dos; Type AType = Array [1..400] of Integer; Ptr = ^Node; Node = Record Info : Integer; Link : Ptr; end; LType = Array [0..9] of Ptr; Var Ran : AType; MaxData : Integer; Přihrádkové třídění Pascal Pro hloubavé 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).

Procedure ReadData (Var A : AType; Var MaxData : Integer); Var I : Integer; Begin MaxData := 10; For I := 1 to MaxData do read(a [I]); end; Procedure WriteArray (A : AType; MaxData : Integer); Var I : Integer; Begin For I := 1 to MaxData do Write (A [I] : 7); Writeln; end; Procedure Insert (Var L : LType; Number, LN : Integer); Var P, Q : Ptr; Begin New (P); P^.Info := Number; P^.Link := Nil; Q := L [LN]; if Q = Nil then L [LN] := P else begin While Q^.Link <> Nil do Q := Q^.Link; Q^.Link := P; end; 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).

Procedure Refill (Var A : AType; Var L : LType); Var I, J : Integer; P : Ptr; begin J := 1; For I := 0 to 9 do begin P := L [I]; While P <> Nil do begin A [J] := P^.Info; P := P^.Link; J := J + 1; end; end; For I := 0 to 9 do L [I] := Nil; 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).

Procedure RadixSort (Var A : AType; MaxData : Integer); Var L : LType; I, divisor, ListNo, Number : Integer; begin For I := 0 to 9 do L [I] := Nil; divisor := 1; While divisor <= 1000 do begin I := 1; While I <= MaxData do begin Number := A [I]; ListNo := Number div divisor MOD 10; Insert (L, Number, ListNo); I := I + 1; end; Refill (A, L); divisor := 10 * divisor; end; 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).

begin clrscr; writeln; writeln(' Put the numbers to sort: '); ReadData (Ran, MaxData); writeln (' Unsorted : '); writearray (Ran, MaxData); writeln; writeln(' Start sorting! '); writeln; Delay(500); RadixSort (Ran, MaxData); writeln (' Sorted : '); writearray (Ran, MaxData); writeln; writeln; end. writeln(' Press the spacebar to exit the program '); repeat until keypressed; 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).

#include <iostream> #include <vector> #include <math.h> using namespace std; void printsorted(int x[], int length); vector < vector <int> > buckets; void radixsort(int x[],int length) //Begin Radix Sort } { int temp; int m=0; for(int i=0;i<7;i++) { for(int j=0;j<length;j++) { temp=(int)((x[j])/pow(10,i))%10; //Determine which bucket each element should enter buckets[temp].push_back((x[j])); } //Transfer results of buckets back into main array for(int k=0;k<10;k++) buckets[k].clear(); { for(int l=0;l<buckets[k].size();l++) { x[m]=buckets[k][l]; m++; } } m=0; //Clear previous bucket } buckets.clear(); printsorted(x,length); Přihrádkové třídění C++ Pro hloubavé 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 printsorted(int x[], int length) { for(int i=0;i<length;i++) cout<<x[i]<<endl; } int main(){ int testcases; cout<<"how many numbers do you want to sort? "<<endl; int input[testcases]; buckets.resize(10); int number; cout<<"put the numbers: "<<endl; for(int i=0;i<testcases;i++) { cout<<i<<". number: "; cin>>number; input[i]=number; } cout<<endl; cout<<"i print sorted numbers:"<<endl; cin>>testcases; } radixsort(input,testcases); 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).

Doporučené video Radix Sort: http://www.youtube.com/watch?v=ibtn8ry7v5k

Použité zdroje Algoritmy a datové struktury [online]. 20. 07. 2002 [cit. 2013-08-10]. Dostupné z: http://www.alg.webzdarma.cz/diplomka/kap5/bucket.html BÖHM, Martin. Programátorská kuchařka: Recepty z programátorské kuchařky [online]. Praha: KSP MFF UK Praha, 2011/2012 [cit. 2013-08-10]. 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.