Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Lower Bounds for Sorting

Benzer bir sunumlar


... konulu sunumlar: "Lower Bounds for Sorting"— Sunum transkripti:

1 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

2 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

3 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

4 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

5 Counting-Sort (A, B, k) 1. for i  1 to k do 2. C[i]  0
3. for j  1 to length[A] do C[A[j]]  C[A[j]] + 1 5. for i  2 to k do C[i]  C[i] + C[i-1] 7. for j  length[A] downto 1 do B[C[A[ j ]]]  A[j] C[A[j]]  C[A[j]] - 1 Algoritma Analizi

6 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

7 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

8 Ornek 928    495    Algoritma Analizi

9 Radix-Sort(A, d) 1. for i  1 to d
do use a stable sort to sort array A on digit i Algoritma Analizi

10 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

11 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

12 An Example Algoritma Analizi

13 Bucket-Sort (A) 1. n  length[A] 2. for i  1 to n
do insert A[i] into list B[ nA[i] ] 4. for i  0 to n-1 do sort list B[i] with insertion sort 6. Concatenate the lists B[i]s together in order Algoritma Analizi


"Lower Bounds for Sorting" indir ppt

Benzer bir sunumlar


Google Reklamları