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

Podobné dokumenty
Základy řazení. Karel Richta a kol.

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

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

Algoritmizace prostorových úloh

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

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

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

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

Dynamické datové struktury III.

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

IB111 Úvod do programování skrze Python

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Bubble sort. příklad. Shaker sort

Pokročilé řazení. Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský a Michal Píše

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Algoritmy I, složitost

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

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

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

Algoritmizace řazení Bubble Sort

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

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

Různé algoritmy mají různou složitost

Složitost UPR 2008/09 1

Algoritmy I. Třídění ALGI 2010/2011

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.

IB111 Úvod do programování skrze Python

TGH07 - Chytré stromové datové struktury

Prioritní fronta, halda

Sada 1 - Základy programování

SORT STABILITY

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)

Stromy, haldy, prioritní fronty

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

Dynamické programování. Optimální binární vyhledávací strom

Rekurze a rychlé třídění

Rekurzivní algoritmy

Základní datové struktury III: Stromy, haldy

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

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

R zné algoritmy mají r znou složitost

TGH07 - Chytré stromové datové struktury

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

Techniky návrhu algoritmů

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Časová složitost algoritmů, řazení a vyhledávání

Digitální učební materiál

Základy algoritmizace a programování

Dynamické datové struktury IV.

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

Maturitní téma: Programovací jazyk JAVA

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

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Prohledávání do šířky = algoritmus vlny

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

Časová složitost algoritmů

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

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.

Stromy. Jan Hnilica Počítačové modelování 14

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

ˇ 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

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

Dynamické programování

Šablony, kontejnery a iterátory

ALGORITMY A DATOVÉ STRUKTURY

Digitální učební materiál

Elegantní algoritmus pro konstrukci sufixových polí

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

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Úvod do programování 6. hodina

5 Rekurze a zásobník. Rekurzivní volání metody

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

Tato tematika je zpracována v Záznamy přednášek: str

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Binární vyhledávací stromy pokročilé partie

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

13. Třídící algoritmy a násobení matic

Paralelní a distribuované výpočty (B4B36PDV)

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Časová a prostorová složitost algoritmů

Dynamicky vázané metody. Pozdní vazba, virtuální metody

TGH05 - Problém za milion dolarů.

IB111 Úvod do programování 1 / 62

a) b) c) Radek Mařík

Algoritmy a datové struktury

Základy programování (IZP)

Praktická cvičení algoritmů

Transkript:

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

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

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

Selection sort...... min Krok k A B D E J K M T R U Z O 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

Selection sort for( int i = 0; i < n-1; i++ ){ // select min jmin = i; for( int j = i+1; j < n; j++ ) if( a[j] < a[jmin] ) jmin = j; } // put min to its place min = a[jmin]; a[jmin] = a[i]; a[i] = min; 5

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

Selection sort Krok k A B D E J K M T R U Z O k n-k přesuny. 3 Celkem přesunů n 1 3 3(n- 1) k 1 7

Selection sort Shrnutí Celkem testů 1 2 (n n) 2 = (n 2 ) Celkem přesunů 3(n- 1) = (n) Celkem operací 1 2 (n n) + 3(n- 1) = (n 2 ) 2 Asymptotická složitost Selection Sortu je (n 2 ) 8

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

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

Insertion sort...... Krok k B K O R T U M A J D Z E 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

Insertion sort for( int i = 1; i < n; i++ ){ // find & make place for a[i] insval = a[i]; int 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 Krok k B K M 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

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

Bubble sort Start T O B U J R M A K D Z E 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 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 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 Fáze 3 atd B J O M A K D R T E U Z... Fáze n-1... A B D E J K M O R T U Z n-2 Seřazeno A B D E J K M O R T U Z 18

Insertion sort for( int lastpos = n-1; lastpos > 0; lastpos-- ) for( int 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 = 1 2 (n n) 2 = (n 2 ) Celkem přesunů 1 2 (n n) 2 0 = (1) = (n 2 ) nejlepší případ nejhorší případ Asymptotická složitost Bubble Sortu je (n 2 ) 19

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! úloha "jejich" práce naše práce úloha Rozděl! úloha Rozděl! úloha Vyřeš částečnou úlohu Vyřeš částečnou úlohu Sluč! Sluč! řešení řešení řešení 21

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

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

Quicksort A B D E J K M O R T U Z Opanováno! 24

Quicksort Dělení Pivot pivot Init Pivot M il ir M A K D R B T O J U Z E 25

Quicksort Dělení Pivot il ir Krok 1 M M A K D R B T O J U Z E il ir E A K D R B T O J U Z M 26

Quicksort Dělení Krok 2 Pivot M il ir 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í Krok 3 Pivot M ir il E A K D J B T O R U Z M ir il Stop Rozděl! Init Pivot E il ir E A K D J B T O R U Z M 28

Quicksort Dělení Krok 1 Pivot E il ir 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í Pivot E B il ir A K D J E T O R U Z M Krok 2 ir il ir il Stop B A D K J E T O R U Z M Rozděl! Init Pivot B il B ir A D K J E T O R U Z M 30

Quicksort Dělení Pivot B il ir B A D K J E T O R U Z M Krok 1 il ir ir il Stop Rozděl! Init Pivot B A B D K J E T O R U Z M il ir A B D K J E T O R U Z M 31

Quicksort Dělení Krok 1 Pivot B il ir ir == il viz kód... A B D K J E T O R U Z M Další oddíl Init Pivot K A B il ir D K J E T O R U Z M atd... atd 32

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--;} il K il K D ir ir K K K D U D K } while( il <= ir ); } if( low < ir ) qsort( a, low, ir ); if( il < high ) qsort( a, il, high ); Rozděl! 33

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

Quicksort Asymptotická složitost Celkem přesunů a testů (n log 2 (n)) (n log 2 (n)) (n 2 ) nejlepší případ průměrný případ nejhorší případ Asymptotická složitost Quick Sortu je O(n 2 ),... ale! : Očekávaná složitost Quick Sortu je (n log 2 (n)) (!!) 35

Quicksort Porovnání efektivity N N 2 N log 2 (N) 1 1 0 10 100 33.2 3.0 100 10 000 6 64.4 15.1 1 000 1 000 000 9 965.8 100.3 10 000 100 000 000 132 877.1 752.6 100 000 10 000 000 000 1 660 964.0 6 020.6 1 000 000 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 tab. 1 N 2 N log 2 (N) zpomalení (1~1sec) 3 sec 15 sec 1.5 min 13 min 1.5 hod 14 hod 5 dnů 36

Quicksort Ukázka průběhu 8 5 12 6 10 11 2 4 1 3 7 9 7 5 3 6 1 4 2 11 10 12 8 9 pivot = = první v úseku 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

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

Stabilita řazení Stabilní řazení nemění pořadí prvků se stejnou hodnotou. Neseřazená data Hodnoty X i jsou totožné X b X c X a Seřazená data Seřaď X b X c X a 39

Stabilita řazení B 1 D 1 C 1 A 1 C 2 B 2 A 2 D 2 B 3 A 3 D 3 C 3 Insert Bubble -- Stabilní implementace A 1 A 2 A 3 B 1 B 2 B 3 C 1 C 2 C 3 D 1 D 2 D 3 B 1 D 1 C 1 A 1 C 2 B 2 A 2 D 2 B 3 A 3 D 3 C 3 Insert Bubble -- Nestabilní implementace QuickSort Select Sort Vždy nestabilní!! A 2 A 1 A 3 B 2 B 3 B 1 C 3 C 1 C 2 D 3 D 2 D 1 40

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 Andrew Andrew Barbara Barbara Barbara Charles Charles Charles Cook Amundsen Brown Cook Brown Amundsen Amundsen Cook Brown stabilní řazení Seřaď záznamy pouze podle" Příjmení Andrew Barbara Charles Andrew Barbara Charles Andrew Barbara Charles Amundsen Amundsen Amundsen Brown Brown Brown Cook Cook Cook Pořadí záznamů se stejným příjmením se nezměnilo 41

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 Andrew Andrew Barbara Barbara Barbara Charles Charles Charles Cook Amundsen Brown Cook Brown Amundsen Amundsen Cook Brown QuickSort Seřaď záznamy pouze podle: Příjmení Barbara Andrew Charles Barbara Charles Andrew Charles Andrew Barbara Amundsen Amundsen Amundsen Brown Brown Brown Cook Cook Cook Pořadí záznamů se stejným příjmením se změnilo. 42