Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
İleri Algoritma Analizi
Ders7: Algoritmaların ortalama işlem zamanı analizi Arama algoritmaları örneği Prof. Dr. Şahin EMRAH İleri Algoritma Analizi
2
İkili arama algoritması (Binary Search (BS))
Problem: Sıralı bir dizide verilen bir elemanı arama Giriş: Sıralı A[n] dizisi ve bu dizide aranan bir key elemanı Algoritma: Dizinin ortanca elemanı ile key elemanını karşılaştır, eşit çıkarsa aranan eleman budur, ortanca eleman küçük çıkarsa, aranan eleman sağ tarafta, aksi durumda sol taraftadır. Aynı algoritmayı kalan parçaya uygula.
3
Sözde kod Algorithm BS(A,n,key) left←1 right ←n while left<right
mid←floor((left+right)/2) if key=A(mid) then return mid else if key>A(mid) left ←mid+1 else right ←mid-1
4
Ortalama işlem zamanı analizi
Bu algoritma için ortalama karşılaştırma sayısını bulalım: key=A[i] ise bu elemanı bu algoritma ile bulmak için gerekli karşılaştırma sayısı C[i] olsun. Bu durumda ortalama karşılaştırma sayısı Cort=(C[1]+C[2]+…C[n])/n olur.
5
Örnek üzerinde hesaplama
Verilen dizi 1,2,3,4,5,6,7 olsun. Eğer key=4 ise BS algoritması bu değeri 2 karşılaştırma ile (1=left≤right=7 ve A(mid=4)=4) karşılaştırmaları ile bulur. Eğer key=2 veya key=6 ise BS algoritması bu değerleri bulmak için key=4 durumuna ek olarak 3 karşılaştırma daha yapmalıdır (örneğin, key=2 için if key=2>A(mid=4) sonra 1=left<right=3 ve sonra A(mid=2)=2 karşılaştırmaları)
6
Hesaplama(devam) Yani her sonraki parçanın ortasını bulmak için ek olarak 3 karşılaştırma yapmak gerekir
7
Toplam karşılaştırma sayısı
Yani tam olarak 1 değer için (ortanca sayı) 2 karşılaştırma, 2 değer için (sol ve sağ parçaların ortası) 5 karşılaştırma, 4 değer için 8 karşılaştırama,… yapmak gereklidir. Genel durumda 2i-1 değer için tam olarak 3i-1 karşılaştırma yapılmalıdır. Şimdi n= 2k -1 olsun. Cort=(C[1]+C[2]+…C[n])/n=( … 2i-1.(3i-1)+… 2k-1.(3k-1))/n
8
Ortalama karşılaştırma sayısı
Cort=(C[1]+C[2]+…C[n])/n=( … 2i-1.(3i- 1)+… 2k-1.(3k-1))/n=3( …k. 2k-1 )/n- (1+2+… 2k-1)/n Sk= …k. 2k-1 olsun. 2Sk= …k. 2k oldu. Buradan da Sk= 2Sk-Sk=-(1+2+… 2k-1)+ k. 2k = k. 2k - 2k +1= (n+1) log2 (n+1)-n Buradan da Cort=(3(n+1)log2(n+1))/n-4=3log2(n+1)+(3 log2(n+1))/n-4
9
İyileştirlmiş İkili Arama Algoritması
Ana fikir: Gerçekleşmesi daha az olasılıklı olan key=A(mid) karşılaştırmasını en sonda yazmakla algoritmadaki ortalama karşılaştırma sayısını azaltabiliriz.
10
Sözde kod Algorithm IBS(A,n,key) left←1 right ←n while left<right
mid←floor((left+right)/2) if key>A(mid) left ←mid+1 else if key<A(mid) right ←mid-1 else return mid
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.