Lower Bounds for Sorting Input elementlerinin karsilastirilmasina dayanarak siralama yapan sorting algoritmalari siralama yapmak icin en kotu durumda (n lg n) karsilastirma yapmali. Dolayisiyle merge sort ve heapsort asymptotik olarak optimal. Diger siralama algoritmalari (counting sort, radix sort, bucket sort) karsilastirma isleminden farkli islemler kullanmak suretiyle siralama yapanlarin orderi daha iyi olabilir-- run in linear time. Algoritma Analizi
Decision Tree Herbir internal node ai: aj ile ilistirilir (1 i,j n.) Her bir leave (yaprak) a ise bir permutation (i) ilistirilir. Algoritma Analizi
Lower Bound for Worst Case N elementi siralayan bir decision tree nin yuksekligi (n lg n). Proof: n elementin n! tane permutation i var. Her bir permutasyon farkli bir siralamanin sirasini gosterir, tree en azindan n! yapraga sahip. h yukseklige sahip bir binary tree 2h le yapraktan fazla yapraga sahip olamayacagindan , n! 2h h lg(n!) By Stirling’s approximation: n! > (n/e)n h lg(n!) lg(n/e)n = n lg n - n lg e = (n lg n) Algoritma Analizi
Counting Sort n input elementinin her biri 1 ile k arasinda bir integer, ve k = O(n) ise siralama O(n) zaman alir. Algoritma Analizi
Counting-Sort (A, B, k) 1. for i 1 to k do 2. C[i] 0 3. for j 1 to length[A] do 4. C[A[j]] C[A[j]] + 1 5. for i 2 to k do 6. C[i] C[i] + C[i-1] 7. for j length[A] downto 1 do 8. B[C[A[ j ]]] A[j] 9. C[A[j]] C[A[j]] - 1 Algoritma Analizi
Algorithm Analysis Toplam running time: O(n+k). k=O(n), oldugunda worst case: O(n). for-loop of lines 1-2 takes time O(k) for-loop of lines 3-4 takes time O(n) for-loop of lines 5-6 takes time O(k) for-loop of lines 7-9 takes time O(n) Stable, in place degil. Karsilastirma yapilmiyor: Elemanlarin degerleri kullanilarak array indeksleniyor Algoritma Analizi
Radix Sort Once “least significant digit” (en degersiz digit) e gore siralama yap, daha sonra geri kalan digitlere gore siralama yap. Her bir digit e gore siralama yapan siralama metodu “stable” olmali The key is sort the “least significant digit” first and the remaining digits in sequential order. The sorting method used to sort each digit must be “stable”. Algoritma Analizi
Ornek 392 631 928 356 356 392 631 392 446 532 532 446 928 495 446 495 631 356 356 532 532 446 392 631 495 928 495 928 Algoritma Analizi
Radix-Sort(A, d) 1. for i 1 to d 2. do use a stable sort to sort array A on digit i Algoritma Analizi
Algorithm Analysis Her bir iteration (n+k) zaman alir. Iteration sayisi n: radix sort icin gerekli running time (d n+ d k) dir. d sabit ve k = O(n) ise, radix sort un komplexitesi linear dir. Eger radix sort counting sort u ara stable sort olarak kullaniyorsa, in place siralama yapmaz. Eger memory storage onemli ise, ara siralama icin quicksort veya diger sorting algoritmalari kullanmak tercih edilebilir. Algoritma Analizi
Bucket Sort Counting sort ve radix sort integer lar icin iyi sorting algoritmalaridir. Floating point sayilar icin bucket sort veya diger comparison-based metodlar kullanilir. Input un random bir islemle [0,1) araliginda uniform olarak uretildigini dusunelim (diger araliklar [0,1) araligina scale edilebilir) Temel fikir: araligi n tane esit boyda alt araliklara (buckets) bol, daha sonra n input sayilarini bucket lere yerlestir. Her bir bucket deki elementler kendi icinde siralanir. Daha sonra butun bucket deki sirali elementler birlestirilir. Algoritma Analizi
An Example Algoritma Analizi
Bucket-Sort (A) 1. n length[A] 2. for i 1 to n 3. do insert A[i] into list B[ nA[i] ] 4. for i 0 to n-1 5. do sort list B[i] with insertion sort 6. Concatenate the lists B[i]s together in order Algoritma Analizi