Ozet Selection Sort Selection Sort Insertion Sort Linear Search.. Growth Rates. Implementation. Once dizinin en buyuk element ini bul ve bunu en son pozisyondaki element le degistir, daha sonra en buyuk ikinci element I bul ve bunu sondan ikinci pozisyondaki element le degistir. Bu isleme dizinin tamami siralanciya kadar devam et 11/17/2004 Veri Yapilari 10.1 11/17/2004 Veri Yapilari 10.2 Selection Sort 1 5 0 2 6 3 4 Insertion Sort 1 5 0 2 4 3 6 1 3 0 2 4 5 6 Dizideki element ler daha once siralanmis dizinin element leri dikkate alinarak birer birer uygun pozisyonlara konur 1 2 0 3 4 5 6 11/17/2004 Veri Yapilari 10.3 11/17/2004 Veri Yapilari 10.4
Insertion Sort 1 5 0 2 6 3 4 1 0 5 2 6 3 4 0 1 5 2 6 3 4 0 1 2 5 6 3 4 0 1 2 5 3 6 4 0 1 2 3 5 6 4 11/17/2004 Veri Yapilari 10.5 current current current Linear Search -7 9-5 2 8 3-4 0 1 2 3 4 5 6 Target is -5 Bastan baslayarak i bulana kadar (son a kadar) devam et Element ler herhangi bir sirada olabilir Linked List ler icin uygun 11/17/2004 Veri Yapilari 10.6 Lower Part Kosullar List sirali. Elemet lere randomly erisilebilme. 11/17/2004 Veri Yapilari 10.7 Other uses of binary search To find where a function is zero. Compute functions. Tree data structures. Data processing. Debugging code. Upper Part 11/17/2004 Veri Yapilari 10.8
-1 2 3 5 8 10 15 0 1 2 3 4 5 6-1 2 3 5 8 10 15 0 1 2 3 4 5 6 low high low high 11/17/2004 Veri Yapilari 10.9 11/17/2004 Veri Yapilari 10.10 Recall: Growth Rates / Complexity -1 2 3 5 8 10 15 0 1 2 3 4 5 6 high low Constant Logarithmic Linear n log(n) Quadratic Cubic Exponential O(1) O(log(n)) O(n) O(n log(n)) O(n 2 ) O(n 3 ) O(2 n ) 11/17/2004 Veri Yapilari 10.11 11/17/2004 Veri Yapilari 10.12
Algorihm secimi Eger yazacagimiz program bir kac kez kucuk veriler uzerinde calisip discrad (atilacaksa), bu programi yazmak icin bildigimiz ve kolayca implement edebilecegimiz bir algorithm kullaniriz, ve dogrulugundan emin olmak icin debug edip baska seylere bakariz Ancak yazilacak program uzun zaman zarfinda baska insanlar tarafindan kullanilip bakimi yapilacaksa, bu is icin sececegimiz algorithm larde bazi hususlari dikkate almaliyiz Understandability (anlasilabilirlik) Efficiency Genellikle running time akla gelir 11/17/2004 Veri Yapilari 10.13 Algorithm secimi Cogu zaman anlasilabilirlik ve efficieny bir biriyle celisir. Kolay anlasilabilir algorithm efficient degil Efficient program kolay anlasilabilir degil Merge sort selection sort e gore anlasilmasi zor Siralanacak element saysisi 100 ve uzeri dizilerde merge sort insertion sort e gore cok daha efficient Buyuk sayida data lar icin yazilan efficient algorithm lar genelde inefficient ve kolayca anlasilabilen algorithm lara gore anlasilmasi cok daha zordur 11/17/2004 Veri Yapilari 10.14 Running Time in olcumu Running time Programin calisma suresince gecen zaman Bir programin running time nin belirlenmesinde temel olarak iki yaklasim var Benchmarking: az sayida tipik program input lari gelistirilir. Benchmark inputlarinin o program icin input set inin iyi temsilcileri oldugu varsayilir. Yani benchmark inputlarinda iyi performans gosteren programin butun input larda da iyi performans gosterdigi kabul edilir Analysis 11/17/2004 Veri Yapilari 10.15 Program Analysis Input lar size (boylarina) gore gruplanir Sorting algorithm lar icin input size siralanacak element lerin sayisi olabilir. n bilinmiyenli n linear equation lerin cozumu icin n input size kabul edilebilir 11/17/2004 Veri Yapilari 10.16
Running Time T(n), input size i n olan program (algorithm) run ettiginde gecmesi gereken zaman biriminin sayisini (miktarini) gosterir T(n) = cn, c constant Programin Running time i input size (n) ile linearly orantili (proportional) Running time, program tarafindan exeute edilen C statement larinin sayisi veya programin standart bir bilgisayarda calistigi zaman gececek olan zaman peryodu olarak dusunulebilir Running Time Cogu zaman running time sadece input size (n) e degil ayni zamanda input a gore de degisebilir Worst-case running time T worst (n) Size i n olan butun input lar icin maximum running time Average running time T avg (n) Size i n olan butun girisler icin ortalama running time 11/17/2004 Veri Yapilari 10.17 11/17/2004 Veri Yapilari 10.18 (2) small = 0; (3) for (j= 1; j <n; j++) (4) if ( A[j] < A[small] (5) small = j; statement frequency small = 0 1 j=1 1 j < n n j++ n-1 if(a[j] < A[small]) n-1 small = j n-1 T worst = 1+1+ n + 3 (n-1) = 4n -1 T worst O(n) dir 11/17/2004 Veri Yapilari 10.19 T(n) 25000 20000 15000 10000 5000 0 Farkli Running Time larin kiyaslanmasi 0 TB = 2n 2 TA =100n 0 20 40 60 80 100 Input size 50 den kucukse program B, program A dan daha hizlidir. 50 den buyuk input size ler icin program A program B den daha hizlidir. Eger input size 100 ise, A, B nin iki kati hiza sahip. Input size 1000 ise A nin hizi B nin hizininin 20 katidir 11/17/2004 Veri Yapilari 10.20
Asymptotic Notation Θ, O, Ω, o, ω Algorithm larin running time (calisma sureleri) ni ifade etmede kullanilirlar Mutlak (exact) running time yerine, ornegin Θ(n 2 ) kullan Domain (tanim kumesi) natural (dogal) sayilar ve range (deger kumesi) pozitive real olan fonksiyonlar icin kullanilir Pratikte iki fonksiyonu kiyaslamada kullanilir 11/17/2004 Veri Yapilari 10.21 Verilen bir g(n) fonksiyonu icin Θ(g(n)) ile bir fonksiyonlar kumesi ifade edilir Θ notation Θ(g(n)) = f(n): 0 c 1 g(n) f(n) c 2 g(n), n n 0 olacak sekilde c 1, c 2 positive real sabitler ve n 0 pozitive dogal sayisi vardir g(n) in f(n) icin asymptotically tight bound oldugu soylenir 11/17/2004 Veri Yapilari 10.22 Ornek 10n 2-3n = Θ(n 2 ) Hangi n 0, c 1, and c 2 ler var? Ornek: c 1 = 9, c 2 = 10, n 0 = 3 secersek 0 c 1 g(n) f(n) c 2 g(n), 0 9n 2 10n 2-3n 10 n 2, n 3 To compare orders of growth, look at leading term 11/17/2004 Veri Yapilari 10.23 O notation Verilen bir g(n) fonksiyonu icin O(g(n)) ile bir fonksiyonlar kumesi ifade edilir O(g(n)) = f(n): 0 f(n) cg(n), n n 0 olacak sekilde c, positive real sabit ve n 0 pozitive dogal sayisi vardir g(n) in f(n) icin asymptotic upper bound oldugu soylenir 11/17/2004 Veri Yapilari 10.24
Verilen bir g(n) fonksiyonu icin Ω(g(n)) ile bir fonksiyonlar kumesi ifade edilir Ω(g(n)) = f(n): 0 cg(n) f(n), n n 0 olacak sekilde c, positive real sabit ve n 0 pozitive dogal sayisi vardir Ω notation Θ, Ω, O arasindaki iliskiler g(n) ve f(n) gibi iki fonksiyon icin, f(n) = Θ(g(n)) ancak ve ancak eger f(n) = O(g(n)) ve f(n) = Ω(g(n)). Yani, Θ(g(n)) = O(g(n)) Ω(g(n)) g(n) in f(n) icin asymptotic lower bound oldugu soylenir 11/17/2004 Veri Yapilari 10.25 11/17/2004 Veri Yapilari 10.26 Running Times The running time O(f(n)) Worst case O(f(n)) Running time Ω(f(n)) Best case Ω(f(n)) Example Insertion sort un worst case time i Θ(n 2 ). Dolayisiyle sorting in running time i O(n 2 ) dir Herhangi bir sorting algoritmasi her bir item a bakmak zorunda, dolayisiyle sorting Ω(n) dir Gercekte merge sort worst case de Θ(n lg n) dir 11/17/2004 Veri Yapilari 10.27 11/17/2004 Veri Yapilari 10.28
o notation Verilen bir g(n) fonksiyonu icin, o(g(n)) bir fonksiyonlar kumesini gosterir o(g(n)) = f(n): 0 f(n) <cg(n) n n 0 olacak sekilde bir c pozitive real sabit ve n 0 positive dogal sayi vardir f(n), n sonsuza dogru yaklastikca g(n) e gore (bagil olarak) insignificant olur Yani: lim [f(n) / g(n)] = 0 g(n) in f(n) icin asymptotically tight olmaksizin upper bound oldugu soylenir 11/17/2004 Veri Yapilari 10.29 Ω notation Verilen bir g(n) fonksiyonu icin, ω(g(n)) bir fonksiyonlar kumesini gosterir ω(g(n)) = f(n): 0 cg(n) <f(n), n n 0 olacak sekilde bir c pozitive real sabit ve n 0 positive dogal sayi vardir f(n), n sonsuza dogru yaklastikca g(n) e gore (bagil olarak) gelisiguzel (arbitrarily) buyuk olur Yani: lim [f(n) / g(n)] = g(n) in f(n) icin asymptotically tight olmaksizin lower bound oldugu soylenir 11/17/2004 Veri Yapilari 10.30 Limits lim [f(n) / g(n)] = 0 f(n) ο(g(n)) lim [f(n) / g(n)] < f(n) Ο(g(n)) 0 < lim [f(n) / g(n)] < f(n) Θ(g(n)) 0 < lim [f(n) / g(n)] f(n) Ω(g(n)) lim [f(n) / g(n)] = f(n) ω(g(n)) Comparison of Functions f g a b f (n) = O(g(n)) a b f (n) = Ω(g(n)) a b f (n) = Θ(g(n)) a = b f (n) = o(g(n)) a < b f (n) = ω (g(n)) a > b 11/17/2004 Veri Yapilari 10.31 11/17/2004 Veri Yapilari 10.32
Properties Transitivity f(n) = Θ(g(n)) & g(n) = Θ(h(n)) f(n) = Θ(h(n)) f(n) = O(g(n)) & g(n) = O(h(n)) f(n) = O(h(n)) f(n) = Ω(g(n)) & g(n) = Ω(h(n)) f(n) = Ω(h(n)) f(n) = o (g(n)) & g(n) = o (h(n)) f(n) = o (h(n)) f(n) = ω(g(n)) & g(n) = ω(h(n)) f(n) = ω(h(n)) Symmetry f(n) = Θ(g(n)) if and only if g(n) = Θ(f(n)) Transpose Symmetry f(n) = O(g(n)) if and only if g(n) = Ω(f(n)) f(n) = o(g(n)) if and only if g(n) = ω((f(n)) 11/17/2004 Veri Yapilari 10.33 Selection Sort Once dizinin en buyuk element ini bul ve bunu en son pozisyondaki element le degistir, daha sonra en buyuk ikinci element i bul ve bunu sondan ikinci pozisyondaki element le degistir. Bu isleme dizinin tamami siralanciya kadar devam et Complexity:?? 11/17/2004 Veri Yapilari 10.34 void selectionsort(float array[], int size) int j, k; int maxposition; float tmp; Insertion Sort for (k = size-1; k > 0; k--) maxposition = 0; for (j = 1; j <= k; j++) if (array[j] > array[maxposition]) maxposition = j; tmp = array[k]; array[k] = array[maxposition]; array[maxposition] = tmp; Complexity: O(n 2 ) Find the maximum in a list 11/17/2004 Veri Yapilari 10.35 Dizideki element ler daha once siralanmis dizinin element leri dikkate alinarak birer birer uygun pozisyonlara konur Complexity:?? 11/17/2004 Veri Yapilari 10.36
void insertionsort(float array[], int size) int j, k; float current; for (k = 1; k < size; k++) current = array[k]; j = k; while (j > 0 && current < array[j-1]) array[j] = array[j-1]; j--; array[j] = current; 11/17/2004 Veri Yapilari 10.37 Linear Search current -7 9-5 2 8 3-4 0 1 2 3 4 5 6 Bastan baslayarak i bulana kadar (son a kadar) devam et Element ler herhangi bir sirada olabilir Linked List ler icin uygun Complexity: O(n 2 ) 11/17/2004 Complexity:?? Veri Yapilari 10.38 Linear Search int linearsearch(float array[], int size, int ) int i; for (i = 0; i < size; i++) if (array[i] == ) return i; return -1; 11/17/2004 Veri Yapilari 10.39 Complexity:?? Complexity: O(n) 11/17/2004 Veri Yapilari 10.40 Kosullar List sirali. Elemet lere randomly erisilebilme.
Case 1: < list[] list: lower New upper upper Case 2: list[] < list: lower New upper lower 11/17/2004 Veri Yapilari 10.41 int binarysearch(float array[], int size, int ) int lower = 0, upper = size - 1, ; while (lower <= upper) = (upper + lower)/2; if (array[] > ) upper = - 1; else if (array[] < ) lower = + 1; The section where else the could be found return ; halves in size each time return -1; 11/17/2004 Veri Yapilari Complexity: O(log(n)) 10.42 Comparison Array Linked List Selection Sort Insertion Sort Linear Search 11/17/2004 Veri Yapilari 10.43