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 2 (n)), … Sorting Různé algoritmy mají různou složitost
2/ 2The 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)), … Sorting The complexity of different algorithms varies X36DSA 2005
3 / 2The 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)), … Sorting From this… X36DSA 2005
4 / 2The 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)), … Sorting …to this! X36DSA 2005
5 / 2The 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)), … Sorting Navrhněte a popište algoritmus pro seřazení balíčku karet. Úkolem je sestavit algoritmus tak, aby využíval co nejmenšího počtu pomocných balíčků. Smíte používat jen jednu ruku a v ní smíte držet vždy nanejvýš jednu kartu. Během řazení můžete (a musíte) odkládat karty do několika pomocných balíčků. Z každého balíčku je vidět a je známa pouze hodnota nejsvrchnější karty a to jen v případě, že leží lícem nahoru. Cvičení X36DSA 2005
6 / 2The 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)), … Sorting Design and describe algorithm to sort a pack of playing cards The task is to construct the algorithm so that it will use as few auxiliary packs as possible. You can use only one hand and you can hold in it no more than one card any time. You can (in fact, you must) lay the cards on some additional auxiliary packs during the sort. Only the value of the uppermost card of any pack is visible and known and this only in case when it lays face up. Exercise X36DSA 2005
7 / 2The 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)), … Sorting Selection Sort Řazení výběrem (minima nebo maxima) X36DSA 2005
8 / 2The 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)), … Selection Sort A A B B D D E E J J M M K K O O R R T T U U Z Z Start Step 1 B B D D E E J J M M K K O O R R U U Z Z T T D D E E K K Z Z B B J J M M O O R R T T U U A A A A min X36DSA 2005
9 / 2The 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)), … Selection Sort Step 2 Step 3 B B D D E E J J M M K K O O R R T T U U Z Z A A E E Z Z B B D D E E Z Z B B A A A A D D E E J J M M K K O O R R U U Z Z T T A A B B J J M M K K O O R R T T U U D D min J J M M K K O O R R T T U U X36DSA 2005
10 / 2The 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)), … Selection Sort Step k Sorted B B D D E E J J K K B B D D E E J J K K O O R R U U Z Z A A A A M M T T k B B D D E E J J K K O O R R U U Z Z A A M M T T …... … M M T T R R U U Z Z O O min X36DSA 2005
11 / 2The 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)), … 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; } X36DSA 2005
12 / 2The 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)), … Selection Sort Step k n-kk n Select minimum ……. (n-k) tests Tests total B B D D E E J J K K A A M M T T R R U U Z Z O O min X36DSA 2005
13 / 2The 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)), … Selection Sort Step k n-k k moves ……. 3 Moves total B B D D E E J J K K A A M M T T R R U U Z Z O O X36DSA 2005
14 / 2The 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)), … Selection Sort Summary Tests total Moves total = (n) Asymptotic complexity of Selection Sort is (n 2 ) = (n 2 ) Operations total + = (n 2 ) X36DSA 2005
15 / 2The 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)), … Sorting Insertion Sort Řazení vkládáním (na adekvátní pozici) X36DSA 2005
16 / 2The 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)), … Insertion Sort A A B B D D E E J J M M K K O O R R T T U U Z Z Start Step 1 B B D D E E M M O O R R Z Z T T D D E E Z Z A A B B M M R R T T O O A A J J K K U U J J K K U U X36DSA 2005
17 / 2The 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)), … Insertion Sort Step 3 B B D D E E M M O O R R Z Z T T A A J J K K U U D D E E M M O O R R Z Z T T A A J J K K U U B B D D E E M M O O R R Z Z A A J J K K U U T T D D E E M M O O R R Z Z A A J J U U T T K K B B B B Step 2 X36DSA 2005
18 / 2The 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)), … Insertion Sort Step k D D E E Z Z A A J J B B D D E E O O R R Z Z A A J J K K U U T T B B M M K K O O R R U U T T M M Sorted B B D D E E J J K K O O R R U U Z Z A A M M T T k …... … X36DSA 2005
19 / 2The 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)), … 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; } X36DSA 2005
20 / 2The 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)), … Insertion Sort Step k D D E E O O R R Z Z A A J J K K U U T T B B M M k tests ……. 1 best case k worst case (k+1)/2 average case tests + 1 = moves moves ……. 3 *) best case k+1 worst case (k+3)/2 average case *) instead of 2 X36DSA 2005
21 / 2The 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)), … Insertion Sort Summary Tests total Moves total = (n 2 ) average case Asymptotic complexity of Insertion Sort is O(n 2 ) (!!) n - 1 (n 2 - n)/2 = (n 2 ) = (n) best case worst case (n 2 + n + 2)/4 = (n 2 ) average case 2n - 2 (n 2 + n - 2)/2 = (n 2 ) = (n) best case worst case (n 2 + 5n - 6)/4 Tests total X36DSA 2005
22 / 2The 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)), … Sorting Bubble Sort Bublinkové třídění X36DSA 2005
23 / 2The 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)), … Bubble Sort A A B B D D E E J J M M K K O O R R T T U U Z Z Start Phase 1 A A B B D D E E J J M M K K O O R R T T U U Z Z A A B B D D E E J J M M K K O O R R T T U U Z Z A A B B D D E E J J M M K K O O R R T T U U Z Z X36DSA 2005
24 / 2The 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)), … Bubble Sort Phase 1 A A B B D D E E J J M M K K O O R R T T U U Z Z A A B B D D E E J J M M K K O O R R T T U U Z Z … etc … Phase 2 A A B B D D E E J J M M K K O O R R T T U U Z Z X36DSA 2005
25 / 2The 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)), … Bubble Sort Phase 2 Phase 3 A A B B D D E E J J M M K K O O R R T T U U Z Z A A B B D D E E J J M M K K O O R R T T U U … etc … A A B B D D E E J J M M K K O O R R T T U U Z Z Z Z X36DSA 2005
26 / 2The 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)), … Bubble Sort Phase 3 Phase n-1 … etc … A A B B D D E E J J M M K K O O R R T T U U Z Z ……... B B D D E E J J K K O O R R U U Z Z A A M M T T Sorted B B D D E E J J K K O O R R U U Z Z A A M M T T n-2n-2 X36DSA 2005
for (lastPos = n-1; lastPos > 0; lastPos--) { for (j = 0; j < lastPos-1; j++) { if (a[j] > a[j+1]) swap(a, j, j+1); 27 / 2The 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)), … Bubble Sort Summary Tests total Moves total 0 = (1) = (n 2 ) best case worst case = (n 2 ) (n-1) + (n-2) + … = Asymptotic complexity of Bubble Sort is (n 2 ) X36DSA 2005
28 / 2The 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)), … QuickSort Sir Charles Antony Richard Hoare C.A.R. Hoare: Quicksort. Computer Journal, Vol. 5, 1, (1962) X36DSA 2005
29 / 2The 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)), … Divide & Conquer! Divide et Impera! The problem The solution The problem The solution Solve the subproblem their work our work Merge! Divide! X36DSA 2005
30 / 2The 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)), … QuickSort A A B B D D E E J J M M K K O O R R T T U U Z Z Small Big A A B B D D E E J J M M K K O O R R T T U U Z Z Small M M O O R R T T U U Z Z Big Divide & Conquer! A A B B D D E E J J K K Start The idea Divide! X36DSA 2005
QuickSort 31 / 2The 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)), … M M O O R R T T U U Z Z A A B B D D E E J J K K Two separate problems M M O O R R T T U U Z Z A A B B D D E E J J K K M M O O R R T T U U Z Z A A B B D D E E J J K K Four separate problems etc… Divide! … …………………… X36DSA 2005
32 / 2The 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)), … QuickSort Conquered! A A B B D D E E J J M M K K O O R R T T U U Z Z … … … … … … … … … … … … … … … … … X36DSA 2005
33 / 2The 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)), … QuickSort pivot A A B B D D E E J J M M K K O O R R T T U U Z Z M M ………… Init iLiR Partitioning Pivot X36DSA 2005
34/ 2The 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)), … QuickSort A A B B D D E E J J M M K K O O R R T T U U Z Z M M iLiR A A B B D D E E J J M M K K O O R R T T U U Z Z iL iR Step 1 Partitioning Pivot X36DSA 2005
35/ 2The 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)), … QuickSort M M iLiR A A B B D D E E J J M M K K O O R R T T U U Z Z A A B B D D E E J J M M K K O O T T U U Z Z iLiR R R Partitioning Step 2 iL Pivot X36DSA 2005
36 / 2The 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)), … QuickSort M M Partitioning Step 3 A A B B D D E E J J M M K K O O T T U U Z Z R R iR iL iR Stop Divide! Init iLiR A A B B D D E E J J M M K K O O T T U U Z Z R R E E Pivot X36DSA 2005
37 / 2The 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)), … QuickSort Partitioning iLiR A A B B D D E E J J M M K K O O T T U U Z Z R R E E Step 1 A A D D J J M M K K O O T T U U Z Z R R B B E E iLiR Pivot X36DSA 2005
iR 38 / 2The 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)), … QuickSort Partitioning E E Step 2 A A D D J J M M K K O O T T U U Z Z R R B B E E iL iR A A D D J J M M K K O O T T U U Z Z R R B B E E iL iR Stop Divide! A A D D J J M M K K O O T T U U Z Z R R B B E E iRiL Init B B Pivot X36DSA 2005
39 / 2The 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)), … QuickSort Partitioning A A D D J J M M K K O O T T U U Z Z R R B B E E iRiL B B A A D D J J M M K K O O T T U U Z Z R R B B E E iR iL iR Stop A A D D J J M M K K O O T T U U Z Z R R B B E E iLiR B B Step 1 Divide! Init Pivot X36DSA 2005
40 / 2The 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)), … QuickSort Partitioning A A D D M M K K O O U U Z Z R R B B iR B B Step 1 iL D D J J M M K K O O T T U U Z Z R R B B E E iRiL Init K K iL iR …….. == Next Partition etc… A A J J E E T T Pivot X36DSA 2005
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); } 41 / 2The 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)), … QuickSort iR iL Divide! iRiL K K K K D D K K K K K K D D D D U U K K X36DSA 2005
Levý index se nastaví na začátek zpracovávaného úseku pole, pravý na jeho konec, zvolí se pivot. Cyklus: 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. Pak nastává rekurzivní volání 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ž / 2The 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)), … QuickSort X36DSA 2005
43 / 2The 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)), … QuickSort Asymptotic complexity (n 2 ) (n·log 2 (n)) best case worst case Tests and moves total average case “Average” complexity of QuickSort is (n·log 2 (n)) (!!) Asymptotic complexity of QuickSort is O(n 2 ) (!!) (n·log 2 (n)) … but! : X36DSA 2005
44 / 2The 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)), … Sorting N2N2 N log 2 (N) N N2N2 Effectivity comparison decele- ration (1~1sec) 3 sec 15 sec 1.5 min 13 min 1.5 hrs 14 hrs 5 days X36DSA 2005
45 / 2The 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)), … Sort stability XbXb XbXb XcXc XcXc XaXa XaXa XbXb XbXb XcXc XcXc XaXa XaXa Stable sort does not change the order of elements with equal value. Stabilní řazení nemění pořadí prvků se stejnou hodnotou. Sort X36DSA 2005
A2A2 A2A2 A1A1 A1A1 A3A3 A3A3 46 / 2The 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)), … Sort stability B1B1 B1B1 D1D1 D1D1 C1C1 C1C1 A1A1 A1A1 C2C2 C2C2 B2B2 B2B2 A2A2 A2A2 D2D2 D2D2 B3B3 B3B3 A1A1 A1A1 A2A2 A2A2 A3A3 A3A3 B 1 B2B2 B2B2 B3B3 B3B3 C1C1 C1C1 C2C2 C2C2 C3C3 C3C3 D1D1 D1D1 D2D2 D2D2 D3D3 D3D3 A3A3 A3A3 D3D3 D3D3 C3C3 C3C3 B2B2 B2B2 B3B3 B3B3 C3C3 C3C3 C1C1 C1C1 C2C2 C2C2 D3D3 D3D3 D2D2 D2D2 D1D1 D1D1 Select Insert Bubble B 1 D1D1 D1D1 C1C1 C1C1 A1A1 A1A1 C2C2 C2C2 B2B2 B2B2 A2A2 A2A2 D2D2 D2D2 B3B3 B3B3 A3A3 A3A3 D3D3 D3D3 C3C3 C3C3 Stable implementation QuickSort -- Always!! Select Insert Bubble Unstable implementation -- X36DSA 2005
47 / 2The 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)), … Sorting Různé algoritmy mají různou složitost X36DSA 2005
48 / 2The 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)), … Sorting The complexity of different algorithms varies X36DSA 2005