Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.

Slides:



Advertisements
Podobné prezentace
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Advertisements

Algoritmizace od algoritmu k Pascalu.
Vnitřní řazení v poli (in sito)
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
10. Dynamické datové struktury
Třetí cvičení Podmíněné příkazy Cykly Break a Continue Switch Return
Vyhodnocování dotazů slajdy k LS I155 Jaroslav Pokorný.
Algoritmy a datové struktury
ALGO – Algoritmizace 1. cvičení
Programování v Pascalu Přednáška 6
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Metody řazení s lineární časovou složitostí
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Informatika I 3. přednáška
Jazyk vývojových diagramů
ALGO – Algoritmizace 9. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Řadicí algoritmy autor: Tadeáš Berkman.
Procedury a funkce Základní charakteristika a použití v programu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Informatika I 2. přednáška
Algoritmy a programovací techniky
Organizace a zpracování dat I
Stromy.
KIV/PPA1 cvičení 7 Cvičící: Pavel Bžoch. Osnova cvičení Zadání samostatné práce –Vysvětlení nejasností –Způsob odevzdání –Hodnocení Řazení Vyhledávání.
Algoritmizace a programování Třídící algoritmy - 12
Časová složitost algoritmů
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – OPAKOVANÝM VÝBĚREM NEJVĚTŠÍHO PRVKU (SELECTSORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – PŘÍMOU VÝMĚNOU (BUBBLESORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko, Adámkova.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
IGrid index Roman Krejčík. Obsah Motivace Prokletí dimenze Míry podobnosti IGrid, IGrid+ Experimentální porovnání.
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Pascal - cykly.
Sorty Bubble, Insert a Quick
STROMY Datová struktura sestávající z uzlů
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
Typy cyklů Do...Loop For...Next For Each...Next.
Tento výukový materiál vznikl v rámci Operačního programu Vzdělávání pro konkurenceschopnost 1. KŠPA Kladno, s. r. o., Holandská 2531, Kladno,
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
doc. RNDr. Zdeněk Botek, CSc.
Pascal – if Mgr. Lenka Švancarová.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
VISUAL BASIC PRALG.
doc. RNDr. Zdeněk Botek, CSc.
doc. RNDr. Zdeněk Botek, CSc.
Cvičení 2 Podmíněné příkazy, cykly. Podmíněné příkazy Podmínka – jakýkoliv logický výraz ( a=1,……..) ( a=1,……..) Příkaz – vlastní instrukce, která se.
Algoritmizace a programování Pole – Příklady 3. Třídění polí V poli máme prvky a chceme je setřídit: V poli máme prvky a chceme je setřídit: od nejmenšího.
Hromadná korespondence 2 Word Předmět: Informační a komunikační technologie Autor: Milan Franek.
Algoritmy a programovací techniky Třídící algoritmy.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Výška stromu - algoritmus
ZAL – 6. cvičení 2016.
Strukturované typy proměnných v programovacím jazyce Pascal - 2.hodina
Složitost algoritmu Pojem „složitost“ algoritmu zahrnuje nejen časovou, ale také paměťovou náročnost algoritmu. Tímto problémem se zabývá jeden celý obor.
© Copyright Radim Štefan
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
ALG 09 Radix sort (přihrádkové řazení) Counting sort
Algoritmizace a datové struktury (14ASD)
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Transkript prezentace:

Třídění Seminář IVT

Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší do nejmenší hodnoty klíče) příklady data žáků, pracovníků, … jistých osob dle příjmení a jména (podle abecedy) – kombinovaný klíč data narození místa bydliště knihy v knihovně dle autora žánru

Druhy třídění vnitřní všechna tříděná data se vejdou do paměti rychlost třídění závisí jen na počtu porovnání a výměn dat vnější data se do paměti nevejdou třídí se po částech, setříděné části odkládají zpět do vnější paměti, pak se vše postupně slučuje rychlost třídění závisí na počtu porovnání, výměn dat a přístupové rychlosti vnějších pamětí (disku)

Metody stabilní - zachovává vzájemné pořadí údajů se shodnými primárními klíči – tj. třídíme-li osoby dle příjmení a bude se vyskytovat více osob stejného příjmení, zachová se ve výsledku jejich pořadí dle původních dat přirozená, pokud doba potřebná ke třídění již setříděné posloupnosti je menší než doba, potřebná pro setřídění náhodně uspořádané posloupnosti.

Požadavky na algoritmus jednoduchost přirozenost stabilita časová složitost co možná nejmenší paměťová náročnost

Algoritmy s časovou složitostí O(N 2 ) kvadratická složitost Select Sort Bubble Sort Shaker Sort Insert Sort třídíme v původní poli, nepotřebujeme další pomocné pole

Select Sort Třídění výběrem – opakovaný výběr největšího (nejmenšího) prvku z dosud nesetříděné posloupnosti a jeho přehození s posledním (prvním) prvkem 1.průchod polem – v n-prvkovém poli najdeme maximum a prohodíme tento prvek s posledním n-tým prvkem 2.průchod polem – v poli s (n-1) prvky opět najdeme maximum a prohodíme tento prvek s posledním tj. (n-1). prvkem 3.průchod polem – v poli s (n-2) prvky opět najdeme maximum a prohodíme tento prvek s posledním tj. (n-2). prvkem … pokračujeme, dokud nezbude jen jediný prvek – ten už je na svém místě

Select Sort i = n, n-1 … 2 j = 2, 3, … i max = 1 A[j] > A[max] max = j tmp = A[i] A[i] = A[max] A[max] = tmp + - Start Stop

SelectSort procedure SelectSort ( var A: TPole ; N : word); var I, J, max : word; tmp : TPrvek; {typ prvku pole} begin for I := N downto 2 do begin max := 1 ; for J := 2 to I do begin if A[J] > A[max] then max := J end; tmp := A[I]; A[I] := A[max]; A[max] := tmp end end;

Bubble Sort třídění probubláváním – porovnávají se vždy prvky ležící vedle sebe – je-li levý prvek větší než pravý, prohodí se 1.průchod polem – n-prvkové pole – porovná se první prvek s druhým, je-li první větší než druhý, prohodí se. Porovná se druhý se třetím (event. se prohodí), třetí se čtvrtým …Touto cestou se na pozici posledního tj n. prvku dostane největší prvek 2.průchod polem – (n-1) prvkové pole – opět se porovnává první s druhým, druhý s třetím atd. na pozici (n-1). prvku se dostane – probublá – 2. největší prvek … pokračujeme, dokud nezbude jen jediný prvek – ten už je na svém místě Zkrácení algoritmu – kontrolujeme, zda došlo k výměně – pokud nikoliv, je celé pole setříděno!!!

Bubble Sort – delší verze i = 1, 2 … n - 1 j = 1, 2, … n - i A[j] > A[j + 1] tmp = A[j] A[j] = A[j+1] A[j+1] = tmp Start Stop + -

Bubble Sort procedure BubbleSort ( var A: TPole ; N : word); var I, J : word; tmp : TPrvek; begin for I := 1 to N - 1 do for J := 1 to N - i do if A[J] > A[J+1] then begin tmp := A[J]; A[J] := A[J+1]; A[J+1] := tmp end;

Bubble Sort – zkrácená verze i = 1, 2 … n -1 j = 1, 2, … n - i A[j] > A[j + 1] tmp = A[j] A[j] = A[j+1] A[j+1] = tmp + - vymena = true vymena = false vymena + - Stop Start

Bubble Sort – zkrácená verze procedure BubbleSort ( var A: TPole ; N : word); var I, J : word; tmp : TPrvek; vymena : boolean; begin for I := 1 to N - 1 do begin vymena := false; for J := 1 to N - i do begin if A[J] > A[J+1] then begin vymena := true; tmp := A[J]; A[J] := A[J+1]; A[J+1] := tmp end; if not vymena then break; end;

Shaker Sort třídění setřásáním – podobné jako BUBBLE SORT, ale střídavě se prochází oboustranně 1.průchod polem – zprava – porovná se poslední s předposledním, předposlední s předpředposledním … 2.průchod polem – zleva – porovnává se první s druhým, druhý s třetím atd. nyní máme na prvním a posledním místě správné prvky – nejmenší a největší pokračujeme v poli s n-2 prvky Zkrácení algoritmu – pamatujeme si, u jakého prvku došlo k výměně

Shaker Sort – setřásání j = R, R-1, … L A[j] < A[j - 1] tmp = A[j] A[j] = A[j -1] A[j -1] = tmp Start + - L=2 R = n + Stop L = L+1 j = L, L+1, … R A[j] < A[j - 1] tmp = A[j] A[j] = A[j -1] A[j -1] = tmp - R = R - 1 L > R

Shaker Sort var I, J, L, R : word; tmp : TPrvek; begin L := 2; R := N; repeat for J := R downto L do begin if A[J-1] > A[J] then begin tmp := A[J-1]; A [J-1] := A[J]; A[J] := tmp; end; L := L+1; for J := L to R do if A[J-1] >A[J] then begin tmp :=A[J-1]; A[J-1] := A[J]; A[J] := tmp; end; R := R - 1; until L > R end;

Shaker Sort – setřásání zkráceně j = R, R-1, … L A[j] < A[j - 1] tmp = A[j] A[j] = A[j -1] A[j - 1] = tmp K = j Start + - L=2 R = n K = n + Stop L = K+1 j = L, L+1, … R A[j] < A[j - 1] tmp = A[j] A[j] = A[j - 1] A[j -1] = tmp K = j - R = K - 1 L > R

Shaker Sort - zkráceně var I, J, L, R, K : word; tmp : TPrvek; begin L := 2; R := N; repeat for J := R downto L do begin if A[J-1] > A[J] then begin tmp := A[J-1]; A [J-1] := A[J]; A[J] := tmp; K := J ; end; L := K+1; for J := L to R do if A[J-1] >A[J] then begin tmp :=A[J-1]; A[J-1] := A[J]; A[J] := tmp; K := J ; end; R := K - 1; until L > R end;

Insert Sort třídění zatřiďováním – jednotlivé prvky se postupně zatřiďují do již setříděné části pole zatřiďování z pravého konce setříděného pole (se zarážkou – nárazníkem) binární zatřiďování

Insert Sort i = 2, 3 … n X < A[j] A[j+1] = A[J] j = j – X = A[i] A[0] = X j = i - 1 Stop Start A[j+1] = X

Insert Sort procedure InsertSort ( var A: TPole ; N : word); var I,J : word; X : TPrvek; begin for I := 2 to N do begin X := A[I]; A[0] := X; J := I-1; while X < A[J] do begin A[J+1] := A[J]; J := J - 1 end; A[J+1] := X end end;

Binary Insert Sort i = 2, 3 … n X < A[M] R = M – 1 Start Stop + - X = A[i] L = 1 R = i – 1 L = M + 1 M = int(L + R)/2 L >R + - j = i, i - 1 … L+1 A[L] =X A[j] = A[j-1]

Binary Insert Sort - složitost n.log(n) procedure BinaryInsertSort(var A : TPole ; N : word) ; var i, j, L, R, M : word; X : TPrvek; begin for i := 2 to N do begin X := A[i] ; L := 1 ; R := i - 1; while L <= R do begin M := (L + R) div 2 ; if X < A[M] then R := M - 1 else L := M + 1; end; for j := i downto L + 1 do A[j] := A[j - 1]; A[L] := X; end end;