Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
İleri Algoritma Analizi
Ders5: Rekürsif algoritmaların işlem zamanı analizi Prof. Dr. Şahin EMRAH İleri Algoritma Analizi
2
Introduction to Algorithms (2nd edition)
by Cormen, Leiserson, Rivest & Stein Prof. Dr. Şahin EMRAH İleri Algoritma Analizi
3
Birleştirmeli Sıralama(Merge Sort)
MergeSort algoritmasını hatırlayalım. Bu algoritmanın ana fikri şudur: Önce giriş dizisini her parçada tek eleman kalana kadar rekürsif olarak ortadan ikiye bölelim. Sonra da 2 sıralı komşu parçaya Merge(Birleştirme) algoritması uygulayalım. Merge algoritması 2 sıralı diziyi bir sıralı dizide birleştirmektedir. Bir elemandan oluşan dizi sıralı olduğu için bu algoritmayı aşağıdan yukarıya uyguladığımızda giriş dizisi sıralanmış olacaktır.
4
Örnek Giriş dizisi 23, 22, 10, 12, 3, 7, 6, 25 olsun.
Bu diziyi ortadan iki parçaya ayıralım. Sol parça 23, 22, 10, 12 sağ parça 3, 7, 6, 25 olur. Sonra her iki parçaya aynısı uygulayalım. Bu defa 4 parçamız vardır 23, 22 ; 10, 12; 3, 7 ve 6, 25. Bu 4 parçanın herbirine de aynısını uygularsak 8 parça olur, 23; 22; 10; 12; 3; 7; 6 ve 25. Şimdi 23 ve 22 dizilerine Merge uygularsak dizi 22,23 olarak sıralanacaktır.
5
Örnek(devam) Benzer olarak 10 ve 12 dizileri 10, 12; 3 ve 7 dizileri 3, 7; 6 ve 25 dizileri 6, 25 sıralı dizilerinde birleşecektir. Daha sonra tekrar Merge uygulandığında 22, 23 ve 10, 12 dizileri 10, 12, 22, 23 dizilerinde; 3, 7 ve 6, 25 dizileri 3, 6, 7, 25 dizilerinde birleşecektir. Son olarak 10, 12, 22, 23 ve 3, 6, 7, 25 dizilerine Merge algoritması uygulandığında giriş dizisi 3, 6, 7, 10, 12, 22, 23, 25 olarak sıralanacaktır.
6
Merge algoritması Bu algoritmanın çalışmasını son iki dizi üzerinde anlatalım. Sol parçamız 10, 12, 22, 23 ; sağ parçamız 3, 6, 7, 25 idi. Her parçanın sonuna bu parçanın bittiğini özel olarak kontrol etmemek için +∞ ekleyelim. Sol parça için i, sağ parça için j indisi kullanalım ve her iki indisin başlangıç değeri bir olsun.
7
Merge Algoritması (devam)
Şimdi sonuç olan A dizisine 8 elemanı aşağıdaki gibi yazalım: sol parçadaki L[i] ile sağ parçadaki R[j] elemanını karşılaştıralım, eğer L[i] elemanı R[j] den küçük ise A nın sıradaki elemanına L[i] atayalım ve i yi bir artıralım; aksi durumda A nın sıradaki elemanına R[j] yi atayalım ve j yi bir artıralım. Bu algoritmanın n elemanlı dizi için işlem süresinin θ(n) olacağı kolaylıkla görülmektedir.
8
MergeSort algoritmasının sözde kodu
Bir sonraki 2 slaytta MergeSort algoritmasının sözde kodu yazılmıştır.
9
Copyright © The McGraw-Hill Companies, Inc
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
10
Copyright © The McGraw-Hill Companies, Inc
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display.
11
MergeSort algoritmasının işlem süresi analizi
Algoritmanın n eleman için işlem süresi T(n) olsun. Algoritmadan görüldüğü gibi n eleman için işlem yapmak için 2 tane n/2 sayıda eleman için işlem yapmak, sonra da bunları Merge ile birleşitirmek gerekir. Birleştirme işlemi için θ(n) süresi gerekmektedir. Bu nedenle T(n)=2T(n/2)+ θ(n) olduğunu yazabiliriz. n=1 ise işlem süresi sabit olduğundan T(1)= θ(1) olur.
12
Rekürensler Başka bir deyimle, MergeSort algoritmasını analiz etmek için bir T(n)=2T(n/2)+ θ(n) denkleminden T(n) i bulmamız gerekmektedir. Bu denklemde hem aranan fonksiyon T(n), hem de T(n) in n/2 deki değeri vardır. Aranan fonksiyonun güncel değeri ile önceki veya sonraki değerlerini de içeren denklemlere veya eşitsizliklere rekürens denir.
13
Rekürenslerin çözüm yolları
Rekürenslerin kesin çözümleri bulunabilir veya rekürensler asimptotik olarak çözülebilirler. Çok az sayıda rekürensin kesin çözümünü bulabiliriz.
14
Kesin çözülebilen rekürenslere örnekler
Örnek1. Aşağıdaki rekürensi kesin olarak çözünüz: x(n)=x(n+1)+7, n≥1 için x(1)=0 Çözüm. Verilen rekürensde sırası ile n yerine 1,2,..n-1 yazarak ifadeleri alt alta toplayalım:
15
Kesin çözülebilen rekürenslere örnekler (Örnek1 çözüm devamı)
x(1)=x(2)+7 x(2)=x(3)+7 … x(n-1)=x(n)+7 Alt alta toplarsak x(1)=x(n)+7(n-1) x(1)=0 olduğundan x(n)=7-7n bulunur.
16
Kesin çözülebilen rekürenslere örnekler
Örnek2. Aşağıdaki rekürensi kesin olarak çözünüz: x(n)=3x(n-1)+4, n>1 için x(1)=1 Çözüm. Verilen rekürensde n yerine n-1 yazalım: x(n-1)=3x(n-2)+4 Bunu ilk rekürensde yerine yazalım: x(n)=3[3x(n-2)+4]+4= 32x(n-2) (1)
17
Kesin çözülebilen rekürenslere örnekler(Örnek2 çözüm devam)
Şimdi verilen rekürensde n yerine n-2 yazalım: x(n-2)=3x(n-3)+4 Bunu (1) de yerine yazalım: x(n)= 32x(n-2)+3.4+4 =32[3x(n-3)+4]+3.4+4 =33x(n-3) Bu işleme x(1) i elde edene kadar devam edersek aşağıdakini elde ederiz: x(n)=3n-1x(1)+3n n-2.4+…3.4+4
18
Kesin çözülebilen rekürenslere örnekler(Örnek3 çözüm devam)
Buradan da x(n)=3n-1x(1)+3n n-2.4+…3.4+4 = 3n-1+4.(3n-2+ 3n-2+…3+1) = 3n-1+4.(3n-1-1)/2= 3n-2 bulunur.
19
Kesin çözülebilen rekürenslere örnekler
Örnek3. Aşağıdaki rekürensi n=3k için kesin olarak çözünüz: x(n)=x(n/3)+2, n>1 için x(1)=1 Çözüm. Verilen rekürensde n yerine sırası ile 3k,3k-1,3k-2… 3 yazalım ve oluşan ifadeleri alt alta toplayalım:
20
Kesin çözülebilen rekürenslere örnekler (örnek3 çözüm devam)
x(3k)=x(3k-1)+2 x(3k-1)=x(3k-2)+2 x(3k-2)=x(3k-3)+2 … x(3)=x(1)+2 Alt alta toplarsak x(3k)=x(1)+2k=2k+1 n=3k olduğundan k=log3n dır, yani x(n)=2k+1=2log3n+1 bulunur.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.