ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)

Slides:



Advertisements
Podobné prezentace
Programovací jazyk C++
Advertisements

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.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
10. Dynamické datové struktury
ALGO – Algoritmizace 6. cvičení
Algoritmy a datové struktury
Red-Black Stromy Binární Vyhledávací Stromy, u kterých je časová složitost operací v nejhorším případě rovná O(log n)
ALGO – Algoritmizace 7. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
ALGO – Algoritmizace 1. cvičení
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ší.
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
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í
Skip-List je datová struktura, která může být použita jako náhrada za vyvážené stromy. představují pravděpodobnostní alternativu k vyváženým stromům (struktura.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
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ř.
Řadicí algoritmy autor: Tadeáš Berkman.
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
PB161 – Programování v jazyce C++ Objektově Orientované Programování
Algoritmy a programovací techniky
Algoritmy vyhledávání a řazení
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
Jiří Znoj - zno Tvorba konkordace Algoritmy II 3. projekt, 5. zadání Jiří Znoj - zno
Další abstraktní datové typy
JavaScript Podmínky, cykly a pole.
Sorty Bubble, Insert a Quick
0 / 1X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
Aplikační počítačové prostředky X15APP MATLAB Katedra elektroenergetiky, Fakulta elektrotechniky ČVUT, Technická 2, Praha 6 Ing. Zbyněk Brettschneider.
1 / 2X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
ALGO – Algoritmizace 4. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – cyklus do-while Mgr. Lenka Švancarová.
1 / 3The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log 2 (n)),
Rekurze. volání podprogramu opětovně v jeho těle –v době, kdy předchozí volání ještě nebylo ukončeno Druhy rekurze přímá rekurze nepřímá rekurze.
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.
Úvod do programování 5. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Algoritmy vyhledávání a řazení Zatím nad lineární datovou strukturou (polem) …
Algoritmy vyhledávání a řazení Zatím nad lineární datovou strukturou (polem) …
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Inf Cykly ve vývojových diagramech
Výška stromu - algoritmus
Rekurze.
Programovací jazyk C++
ZAL – 6. cvičení 2016.
Úvod do programování 6. hodina
Algoritmizace a programování
Vytváření dokumentace algoritmů
Rekurze.
Abstraktní datové typy
Řazení INSERT SORT Tak co budu ŘADIT ?.
Oblast platnosti identifikátoru (1)
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Podprogramy.
Algoritmy vyhledávání a řazení
Různé algoritmy mají různou složitost
ALG 09 Radix sort (přihrádkové řazení) Counting sort
ALG 08 Merge sort -- řazení sléváním
Algoritmizace a datové struktury (14ASD)
Algoritmizace Dynamické programování
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
ALG 14 Vícedimenzionální data Řazení vícedimenzionálních dat
Dynamické programování Optimální binární vyhledávací strom
Algoritmy vyhledávání a řazení
Hledání k-tého nejmenšího prvku
Transkript prezentace:

ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1

Selection sort T O U B J R M A K D Z E A T O U B J R M K D Z E A O U B A4B33ALG 2010/06 Selection sort Neseřazeno Seřazeno T O U B J R M A K D Z E Start min A T O U B J R M K D Z E Krok1 A O U B J R M T K D Z E 2

Selection sort B A O U J R M T K D Z E A B U O J R M T K D Z E D A B U A4B33ALG 2010/06 Selection sort min B Krok 2 A O U J R M T K D Z E A B U O J R M T K D Z E min Krok 3 D A B U O J R M T K Z E A B D O J R M T K U Z E 3

. . . . . . . . . . . . Selection sort O A B D E J K M T R U Z A B D E A4B33ALG 2010/06 Selection sort . . . . . . min Krok k O A B D E J K M T R U Z A B D E J K M O R U Z T k . . . . . . Seřazeno A B D E J K M O R T U Z 4

for (i = 0; i < n-1; i++) { // select min jmin = i; A4B33ALG 2010/06 Selection sort for (i = 0; i < n-1; i++) { // select min jmin = i; for (j = i+1; j < n; j++) if (a[j] < a[jmin]) jmin = j; // put min min = a[jmin]; a[jmin] = a[i]; a[i] = min; } 5

Algoritmus a program není totéž A4B33ALG 2010/06 Selection sort n Krok k min O A B D E J K M T R U Z k n-k Výběr minima ……. (n-k) testů Celkem testů 6 Algoritmus a program není totéž

Selection sort O A B D E J K M T R U Z n-k k A4B33ALG 2010/06 Selection sort Krok k O A B D E J K M T R U Z n-k k přesuny ……. 3 Celkem přesunů 7

Asymptotická složitost Selection Sortu je (n2) A4B33ALG 2010/06 Selection sort Shrnutí Celkem testů = (n2) Celkem přesunů = (n) Celkem operací + = (n2) Asymptotická složitost Selection Sortu je (n2) 8

Insertion sort T O B K U R M A J D Z E O B K U R M A J D Z E T O T B K A4B33ALG 2010/06 Insertion sort Start T O B K U R M A J D Z E O Krok1 B K U R M A J D Z E T O T B K U R M A J D Z E 9

Insertion sort B K U R M A J D Z E O T B O T K U R M A J D Z E K B U R A4B33ALG 2010/06 Insertion sort B Krok 2 K U R M A J D Z E O T B O T K U R M A J D Z E K Krok 3 B U R M A J D Z E O T B K O T U R M A J D Z E 10

. . . . . . . . . . . . Insertion sort M B K A J D Z E O R T U B K M O A4B33ALG 2010/06 Insertion sort . . . . . . Krok k M B K A J D Z E O R T U B K M O R T U A J D Z E k . . . . . . Seřazeno A B D E J K M O R T U Z 11

while ((j >= 0) && (a[j] > insVal)) { a[j+1] = a[j]; j--; } A4B33ALG 2010/06 Insertion sort for (i = 1; i < n; i++) { // find & make // place for a[i] insVal = a[i]; j = i-1; while ((j >= 0) && (a[j] > insVal)) { a[j+1] = a[j]; j--; } // insert a[i] a[j+1] = insVal; 12

Insertion sort M B K O R T U A J D Z E k A4B33ALG 2010/06 Insertion sort Krok k M B K O R T U A J D Z E k testů + 1 = přesunů testů ……. 1 nejlepší případ k nejhorší případ (k+1)/2 průměrný případ přesunů ……. 2 nejlepší případ k+1 nejhorší případ (k+3)/2 průměrný případ 13

Asymptotická složitost Insertion Sortu je O(n2) (!!) A4B33ALG 2010/06 Insertion sort Shrnutí Celkem testů n − 1 = (n) nejlepší případ (n2 − n)/2 = (n2) nejhorší případ (n2 + n − 2)/4 = (n2) průměrný případ Celkem přesunů 2n − 2 = (n) nejlepší případ (n2 + n − 2)/2 = (n2) nejhorší případ (n2 + 5n − 6)/4 = (n2) průměrný případ Asymptotická složitost Insertion Sortu je O(n2) (!!) 14

Bubble sort T O B U J R M A K D Z E T O B U J R M A K D Z E O T B U J A4B33ALG 2010/06 Bubble sort T O B U J R M A K D Z E Start Fáze 1 T O B U J R M A K D Z E O T B U J R M A K D Z E O B T U J R M A K D Z E 15

Bubble sort O B T U J R M A K D Z E … etc … O B T J R M A K D U Z E O A4B33ALG 2010/06 Bubble sort Fáze 1 O B T U J R M A K D Z E … etc … O B T J R M A K D U Z E Fáze 2 O B T J R M A K D U E Z 16

Bubble sort B O T J R M A K D U E Z … etc … B O J R M A K D T U E Z B A4B33ALG 2010/06 Bubble sort Fáze 2 B O T J R M A K D U E Z … etc … B O J R M A K D T U E Z Fáze 3 B O J R M A K D T E U Z 17

. . . . . . Bubble sort … atd … B J O M A K D R T E U Z A B D E J K M A4B33ALG 2010/06 Bubble sort Fáze 3 … atd … B J O M A K D R T E U Z . . . . . . A B D E J K M O R T U Z Fáze n-1 n-2 Seřazeno A B D E J K M O R T U Z 18

for (lastPos = n-1; lastPos > 0; lastPos--) A4B33ALG 2010/06 Insertion sort for (lastPos = n-1; lastPos > 0; lastPos--) for (j = 0; j < lastPos; j++) if (a[j] > a[j+1]) swap(a, j, j+1); Shrnutí Celkem testů (n-1) + (n-2) + … + 2 + 1 = = (n2) 0 = (1) nejlepší případ Celkem přesunů = (n2) nejhorší případ Asymptotická složitost Bubble Sortu je (n2) 19

Sir Charles Antony Richard Hoare A4B33ALG 2010/06 Quicksort Sir Charles Antony Richard Hoare C. A. R. Hoare: Quicksort. Computer Journal, Vol. 5, 1, 10-15 (1962) 20

Rozděl a panuj! Divide and conquer! Divide et impera! A4B33ALG 2010/06 Rozděl a panuj! Divide and conquer! Divide et impera! "jejich" práce úloha naše práce Rozděl! úloha Rozděl! úloha úloha Vyřeš částečnou úlohu Vyřeš částečnou úlohu Sluč! Sluč! řešení řešení řešení 21

Quicksort Divide & Conquer! M A K D R B T O J U Z E Malá M A K D R B T A4B33ALG 2010/06 Quicksort Myšlenka Divide & Conquer! Start M A K D R B T O J U Z E Malá M A K D R B T O J U Z E Velká Rozděl! E A K D J B T O R U Z M Malá Velká 22

… … … … … … … … . . . Quicksort E A K D J B T O R U Z M B A D K J E M A4B33ALG 2010/06 Quicksort Dvě samostatné úlohy E A K D J B T O R U Z M Rozděl! Rozděl! B A D K J E M O R U Z T Čtyři samostatné úlohy B A D K J E M O R U Z T Rozděl! Rozděl! Rozděl! Rozděl! atd… atd… atd… atd… Rozděluj! . . . … … … … … … … … 23

… … … … … … … … … … … … … … … … … Quicksort A B D E J K M O R T U Z A4B33ALG 2010/06 Quicksort … … … … … … … … … … … … … … … … … A B D E J K M O R T U Z Opanováno! 24

  Quicksort Dělení pivot … … … … iL iR M M A K D R B T O J U Z E A4B33ALG 2010/06 Quicksort Dělení pivot Pivot   … … … … Pivot iL Init iR M M A K D R B T O J U Z E 25

Quicksort Dělení iL iR M M A K D R B T O J U Z E iL iR E A K D R B T O A4B33ALG 2010/06 Quicksort Dělení iL iR Pivot M M A K D R B T O J U Z E Krok 1 iL iR E A K D R B T O J U Z M 26

Quicksort Dělení iL iR M E A K D R B T O J U Z M iL iR E A K D J B T O A4B33ALG 2010/06 Quicksort Dělení iL Pivot iR M Krok 2 E A K D R B T O J U Z M iL iR E A K D J B T O R U Z M 27

 Quicksort Dělení iL iR M E A K D J B T O R U Z M iR iL Stop Rozděl! A4B33ALG 2010/06 Quicksort Dělení iL Pivot iR M Krok 3 E A K D J B T O R U Z M  iR iL Stop Rozděl! iL Pivot iR E Init E A K D J B T O R U Z M 28

Quicksort Dělení iL iR E E A K D J B T O R U Z M iL iR B A K D J E T O A4B33ALG 2010/06 Quicksort Dělení iL Pivot iR E Krok 1 E A K D J B T O R U Z M iL iR B A K D J E T O R U Z M 29

 Quicksort Dělení iL iR E B A K D J E T O R U Z M iL iR iL Stop iR B A4B33ALG 2010/06 Quicksort Dělení iL iR Pivot E B A K D J E T O R U Z M Krok 2 iL  iR iL Stop iR B A D K J E T O R U Z M Rozděl! iL Pivot iR Init B B A D K J E T O R U Z M 30

 Quicksort Dělení iL iR B B A D K J E T O R U Z M iL iR iL iR Stop A A4B33ALG 2010/06 Quicksort Dělení iL iR Pivot B B A D K J E T O R U Z M Krok 1 iL  iR iL iR Stop A B D K J E T O R U Z M Rozděl! iL Pivot iR B Init A B D K J E T O R U Z M 31

== Quicksort Dělení iL iR iL viz kód... iR B A B D K J E T O R U Z M A4B33ALG 2010/06 Quicksort Dělení iL Pivot iR == iL viz kód... iR Krok 1 B A B D K J E T O R U Z M Další oddíl iL iR Pivot K A B D K J E T O R U Z M Init atd... atd… 32

Quicksort iL iR K K D K iL iR K K D U D K Rozděl! A4B33ALG 2010/06 Quicksort void qSort(Item a[], int low, int high) { int iL = low, iR = high; Item pivot = a[low]; do { while (a[iL] < pivot) iL++; while (a[iR] > pivot) iR--; if (iL < iR) { swap(a,iL, iR); iL++; iR--; } else if (iL == iR) { iL++; iR--;} } while( iL <= iR); if (low < iR) qSort(a, low, iR); if (iL < high) qSort(a, iL, high); iL iR K K D K iL iR K K D U D K Rozděl! 33

Cyklus (rozdělení na „malé" a „velké") : A4B33ALG 2010/06 Quicksort Levý index se nastaví na začátek zpracovávaného úseku pole, pravý na jeho konec, zvolí se pivot. Cyklus (rozdělení na „malé" a „velké") : Levý index se pohybuje doprava a zastaví se na prvku vetším nebo rovném pivotovi. Pravý index se pohybuje doleva a zastaví se na prvku menším nebo rovném pivotovi. Pokud je levý index ještě před pravým, příslušné prvky se prohodí, a oba indexy se posunou o 1 ve svém směru. Jinak pokud se indexy rovnají, jen se oba posunou o 1 ve svém směru. Cyklus se opakuje, dokud se indexy neprekříží, tj. pravý se dostane pred levého. Následuje rekurzivní volání (zpracování „malých" a „velkých" zvlášť) na úsek od začátku do pravého(!) indexu včetně a na úsek od levého(!) indexu včetně až do konce, má-li príslušný úsek délku větší než 1. 34

Asymptotická složitost A4B33ALG 2010/06 Quicksort Asymptotická složitost Celkem přesunů a testů (n·log2(n)) nejlepší případ (n·log2(n)) průměrný případ nejhorší případ (n2) Asymptotická složitost Quick Sortu je O(n2), ... … ale! : “Očekávaná” složitost Quick Sortu je (n·log2(n)) (!!) 35

Porovnání efektivity Quicksort N N2 N  log2(N) 1 10 100 33.2 3.0 A4B33ALG 2010/06 Quicksort Porovnání efektivity zpoma- lení (1~1sec) N2 N N2 N  log2(N) N  log2(N) 1 10 100 33.2 3.0 10 000 6 64.4 15.1 1 000 1 000 000 9 965.8 100.3 100 000 000 132 877.1 752.6 100 000 10 000 000 000 1 660 964.0 6 020.6 1 000 000 000 000 19 931 568.5 50 171.7 10 000 000 100 000 000 000 000 232 534 966.6 430 042.9 3 sec 15 sec 1.5 min 13 min 1.5 hod 14 hod 5 dnů tab. 1 36

Quicksort 8 5 12 6 10 11 2 4 1 3 7 9 Ukázka průběhu pivot = = první A4B33ALG 2010/06 Quicksort 8 5 12 6 10 11 2 4 1 3 7 9 Ukázka průběhu pivot = = první v úseku 7 5 3 6 1 4 2 11 10 12 8 9 2 5 3 6 1 4 7 9 10 8 12 11 1 5 3 6 2 4 8 10 9 11 12 4 3 2 6 5 9 10 2 3 4 5 6 2 3 37

A4B33ALG 2010/06 Quicksort 1 2 3 4 5 6 7 8 9 10 11 12 7 5 3 6 1 4 2 9 8 12 10 11 2 5 3 6 1 4 7 9 10 8 11 12 1 2 4 5 3 6 8 9 10 4 3 2 5 6 Schéma rekurzivního volání Quick sortu má podobu pravidelného binárního kořenového stromu. 2 3 4 38

Stabilita řazení Xb Xc Xa Xb Xc Xa A4B33ALG 2010/06 Stabilita řazení Stabilní řazení nemění pořadí prvků se stejnou hodnotou. Hodnoty Xi jsou totožné Neseřazená data Xb Xc Xa Seřaď Seřazená data Xb Xc Xa 39

Stabilita řazení B1 D1 C1 A1 C2 B2 A2 D2 B3 A3 D3 C3 Insert Bubble A4B33ALG 2010/06 Stabilita řazení B1 D1 C1 A1 C2 B2 A2 D2 B3 A3 D3 C3 Insert Bubble Stabilní implementace -- A1 A2 A3 B1 B2 B3 C1 C2 C3 D1 D2 D3 B1 D1 C1 A1 C2 B2 A2 D2 B3 A3 D3 C3 Insert Bubble Nestabilní implementace QuickSort Select Sort Vždy nestabilní!! -- A2 A1 A3 B2 B3 B1 C3 C1 C2 D3 D2 D1 40

Stabilní řazení Záznam: Jméno Příjmení Vstup: Seznam seřazen A4B33ALG 2010/06 Stabilní řazení Záznam: Jméno Příjmení Vstup: Seznam seřazen pouze podle jména. Výstup: Seznam seřazen podle jména i příjmení. Andrew Barbara Charles Cook Amundsen Brown Andrew Amundsen stabilní řazení Barbara Amundsen Seřaď záznamy pouze podle" Charles Amundsen Andrew Brown Příjmení Barbara Brown Charles Brown Andrew Cook Barbara Cook Charles Cook Pořadí záznamů se stejným příjmením se nezměnilo 41

Nestabilní řazení QuickSort A4B33ALG 2010/06 Nestabilní řazení Záznam: Jméno Příjmení Vstup: Seznam seřazen pouze podle jména. Výstup: Původní pořadí jmen je ztraceno. seřazeno Andrew Barbara Charles Cook Amundsen Brown Barbara Amundsen QuickSort Andrew Amundsen Charles Amundsen Barbara Brown Seřaď záznamy pouze podle: Charles Brown Andrew Brown Příjmení Charles Cook Andrew Cook Barbara Cook Pořadí záznamů se stejným příjmením se změnilo. 42