You are on page 1of 46

Algoritma Analizi

Veri Yaplar ve Algoritmalar


Analiz erii

Algoritmalar ve analizleri

Asimptotik Notasyonlar
Byk O, Q, W Notasyonlar

Algoritma Karmakl

2
Algoritma
Bir problemi zmek iin veya bir hesaplama
yapmak iin iyi tanml, sonlu sayda, birbirini
izleyen komutlar kmesidir.
Algoritmalarn baz temel zellikleri
Giri
k
yi tanml olmas
Doru olmas
Sonlu olmas
Etkili olmas
Genel olmas
Algoritma Analizi
Teorik almalarda bilgisayar programlarnn performans ve
kaynak kullanm irdelenmektedir.
Ancak performanstan daha nemli baz kriterler
Modlerlik
Doruluk
Baklabilirlik
Fonksiyonellik
Kararllk
Kullanc dostu olma
Programlama zaman
Basitlik
Gelitirilebilirlik
Gvenilirlik
rnek I:
Dizideki saylarn toplamn bulma

int Topla(int A[], int N) Bu fonksiyonun yrtme


{ zaman ne kadardr?
int toplam = 0;

for (i=0; i < N; i++){


toplam += A[i];
} //Bitti-for

return toplam;
} //Bitti-Topla

5
rnek I:
Dizideki saylarn toplamn bulma
lem
int Topla(int A[], int N) says
{ 1
int topla = 0;

for (i=0; i < N; i++){ 2N


topla += A[i]; N
} //Bitti-for

return topla; 1
} //Bitti-Topla
--------
Toplam: 1 + 2N + N + 1 = 2N + 2
alma zaman: T(N) = 3N+2
N dizideki say says 6
rnek II:
Dizideki bir elemann aranmas
lem
int Arama(int A[], int N,
int sayi) { says
int i = 0; 1

while (i < N){ N


if (A[i] == sayi) break; N
i++;
} //bitti-while N

if (i < N) return i; 1
else return -1; 1
} //bitti-Arama ---------
Toplam: 1+3*N+1+1 = 3L+3

7
rnek II:
Dizideki bir elemann aranmas
En iyi alma zaman nedir?
Dng sadece bir kez alt=>T(n) = 6

Ortalama(beklenen) alma zaman nedir?


Dng N/2 kez alt =>T(n)=3*n/2+3 = 1.5n+3

En kt alma zaman nedir?


Dng N kez alt =>T(n) = 3n+3

8
Algoritmalarn en kt durum analizi
Bir algoritmann sadece EN KT durumdaki
alma zamanna baklr. Neden?
En kt durum alma zamannda bir st snrdr ve o algoritma
iin verilen durumdan daha uzun srmeyecei garantisi verir.

Baz algoritmalar iin en kt durum olduka sk rastlanr. Arama


algoritmasnda, aranan e genellikle dizide olmaz dolaysyla
dng N kez alr.

Ortalama alma zaman genellikle en kt alma zaman


kadardr. Arama algoritmas iin hem ortalama hem de en kt
alma zaman dorusal fonksiyondur.

9
rnek III: ie dngler
for (i=1; i<=N; i++){
for (j=1; j<=N; j++){

printf(Merhaba\n);
} //bitti-iteki for
} //bitti-dtaki for

Prinf fonksiyonu ka kez altrld?


Veya Merhaba yazs ekrana ka kez yazlr?

N N N
T ( N ) 1 N N * N N 2

i 1 j 1 i 1
10
rnek IV: Matris arpm
/* ki boyutlu dizi A, B, C. Hesapla C = A*B */
for (i=0; i<N; i++) {
for (j=0; j<N; j++) {
C[i][j] = 0;
for (int k=0; k<N; k++){
C[i][j] += A[i][k]*B[k][j];
} //bitti-en iteki for
} //bitti-iteki for
} //bitti-dtaki for

N 1 N 1 N 1
T ( N ) (1 1) N N 3 2

i 0 j 0 k 0
11
rnek V: kili Arama
Problem: Sral bir dizi veriliyor ve bir sayy
aryorsunuz.
Dorusal arama T(n) = 3n+2 (En kt durum)
Daha iyisi yaplabilir mi?
.g. Aadaki sral dizide 55 saysn arayalm

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 8 10 11 20 50 55 60 65 70 72 90 91 94 96 99

12
rnek V: kili Arama
Dizi sralanm olduundan, dizinin ortasnda bulunan say ile
aranan sayy karlatrarak arama boyutunu yarya drlr ve
bu ekilde devam edilir.
rnek: 55i arayalm

0 1 2 3 4 7 8 11 15
3 8 10 11 20 50 55 60 65 70 72 90 91 94 96 99

( sol sa )
sol orta sa
2

0 1 2 3 4 6 7 8 11 15
3 8 10 11 20 50 55 60 65 70 72 90 91 94 96 99

sol orta sa Elendi

13
kili arama (devam)

0 1 2 3 4 5 6 7 8 11 15
3 8 10 11 20 50 55 60 65 70 72 90 91 94 96 99

Elendi sol orta

0 1 2 3 4 5 6 7 8 11 15
3 8 10 11 20 50 55 60 65 70 72 90 91 94 96 99

Elendi
orta
55i bulduk Baarl arama
57yi aradmzda, bir sonraki ilemde baarsz bir ekilde
sonlanacak.
14
kili Arama (devam)
< hedef ? > hedef

sol sa

Hedefi ararken herhangi bir aamada, arama alanmz sa ile


sol arasndaki alana kstlam oluyoruz.

sol un solunda kalan alan hedeften kktr ve bu alan arama


alanndan karlr.

sa n sagnda kalan alan hedeften byktr ve bu alan arama


alanndan karlr.

15
kili Arama - Algoritma
// Aranan saynn indeksini dndrr aranan say bulunamazsa -1 dndrr.
int ikiliArama(int A[], int N, int sayi){
sol = 0;
sag = N-1;

while (sol <= sag){


int orta = (sol+sag)/2; // Test edilecek saynn indeksi
if (A[orta] == sayi) return orta; // Aranan say bulundu. ndeksi dndr
else if (sayi < A[orta]) sag = orta 1; // Sa taraf ele
else sol = orta+1; // Sol taraf ele
} //bitti-while

return 1; // Aranan say bulunamad


} //bitti-ikiliArama

En kt alma zaman: T(n) = 3 + 5*log2N. Neden?


16
Asimptotik Notasyon
Bir problemi zmek iin A ve B eklinde iki algoritma verildiini
dnelim.
Giri boyutu N iin aada A ve B algoritmalarnn alma
zaman TA ve TB fonksiyonlar verilmitir.

Hangi algoritmay alma zaman

seersiniz?

Giri Boyutu (N) 17


Asimptotik Notasyon (devam)
N byd zaman A ve B nin alma zaman:

imdi hangi
algoritmay
seersiniz?
Running Time

Giri Boyutu (N)


18
Asimptotik Notasyon (devam)
Genel olarak, asimptotik notasyon, eleman says nnin sonsuza
gitmesi durumunda algoritmann, benzer ii yapan algoritmalarla
karlatrmak iin kullanlr.

Eleman saysnn kk olduu durumlar pratikte mmkn


olabilir fakat bu birok uygulama iin geerli deildir.

Verilen iki algoritmann alma zamann T1(N) ve T2(N)


fonksiyonlar eklinde gsteriyoruz. Fakat hangisinin daha iyi
olduunu belirlemek iin bir yol belirlememiz gerekiyor.
(asimptotik olarak daha kk gibi)
Asimptotik notasyonlar
Byk-Oh, W, Q notasyonlar

19
Byk-Oh(Big-Oh) Notasyonu:
Asimptotik st Snr
T(n) = O(f(n))
c ve n0 eklinde pozitif sabitlerimiz olduunu dnelim. n >= n0
ifadesini salayan tm deerler iin T(n) <= c*f(n) dir.

c*f(n)
alma Zaman

T(n)

n0 Eleman says N

rnek: T(n) = 50n O(n). Neden?


c=50, n0=1 seersek. n>=1 iin 50n <= 50n olur.
Baka uyan saylarda mevcuttur.
20
Byk-Oh(Big-Oh) Notasyonu:
Asimptotik st Snr
T(n) = O(f(n))
c ve n0 eklinde pozitif sabitlerimiz olduunu dnelim. n >= n0
ifadesini salayan tm deerler iin T(n) <= c*f(n) dir.

rnek: T(n) = 2n+5 is O(n) Neden?


n>=n0 artn salayan tm saylar iin T(n) =
2n+5 <= c*n

n>=1 iin 2n+5 <= 2n+5n <= 7n


c = 7, n0 = 1

n>=5 artn salayan tm saylar iin 2n+5 <= 3n


c = 3, n0=5
Dier c ve n0 deerleri de bulunabilir.
21
Byk-Oh(Big-Oh) Notasyonu:
Asimptotik st Snr
T(n) = O(f(n))
c ve n0 eklinde pozitif sabitlerimiz olduunu dnelim. n >= n0
ifadesini salayan tm deerler iin T(n) <= c*f(n) dir.

rnek: T(n) = 2n+5 is O(n2) Neden?


n>=n0 artn salayan tm saylar iin T(n) =
2n+5 <= c*n2 artn salayan c ve n0 deerlerini
aryoruz.
n>=4 iin 2n+5 <= 1*n2
c = 1, no = 4
n>=3 iin 2n+5 <= 2*n2
c = 2, no = 3
Dier c ve n0 deerleri de bulunabilir.
22
Byk-Oh(Big-Oh) Notasyonu:
Asimptotik st Snr
T(n) = O(f(n))
c ve n0 eklinde pozitif sabitlerimiz olduunu dnelim. n >= n0
ifadesini salayan tm deerler iin T(n) <= c*f(n) dir.

rnek: T(n) = n(n+1)/2 O(?)

T(n) = n2/2 + n/2 O(N2). Neden?

n >= 1 iken n2/2 + n/2 <= n2/2 + n2/2 <= n2


Bylece, T(n)=n*(n+1)/2 <= 1* n2 for all n >=1
c=1, no=1

Not: T(n) ayrca O(n3) tr.


23
Karlalan Genel Fonksiyonlar

sim Byk-Oh Yorum


Sabit O(1) Yenilmez!

Log log O(loglogN) Tahminsel arama

Logaritmik O(logN) yi hazrlanm arama algoritmalarnn


tipik zaman

Dorusal O(N) Hzl bir algoritmadr. N tane veriyi


girmek iin gereken zaman.

N logN O(NlogN) ou sralama algoritmas

Karesel O(N2) Veri miktar az olduu zamanlarda


uygun (N<1000)
Kbik O(N3) Veri miktar az olduu zamanlarda
uygun (N<1000)
ssel O(2N) Veri miktar ok az olduunda uygun
(n<=20)

24
Karlalan Genel Fonksiyonlar (devam)

25
rnek: Maksimum Alt Dizi Toplam

Tanm: Verilen bir tamsay listesi


ierisinde/dizisinde elemanlar komu olmak
artyla hangi (bitiik) alt dizi en yksek
toplam verir?
rnein:
{ -2,11,-4,13,-5,2 } Cevap=20
{ 1,2,-5,4,7,-2 } Cevap=11
{ 1,5,-3,4,-2,1 } Cevap=7
Bu problemi zen ok sayda algoritma vardr.

26
zm-1 Kaba Kuvvet Algoritmas

public static int maxAltDiziT( int[] a){ Bu algoritmann


int maxTop = 0; karmakl
for(int i=0; i<a.length; i++) nedir?
for(int j=i; j<a.length; j++){
int top=0; 3n3+4n2+2n+2 O(n3)
for(int k=i; k<=j; k++)
top += a[k]; Daha iyisi yaplabilir
if(top > maxTop){ mi?
maxTop = top;
int bas = i; // alt dizinin balangc
int son = j; // alt dizinin sonu
}
}
return maxTop;
}
27
zm-2 Gelitirilmi Algoritma
public static int maxAltDiziT(int[] a) { Bu algoritmann
int maxTop = 0; karmakl
for (int i = 0; i < a.length; i++) { nedir?
int top = 0;
for (int j = i; j <= a.length; j++) {
top += a[j];
if (top > maxTop) {
maxTop = top;
int bas = i; // alt dizinin balangc
int son = j; // alt dizinin sonu
}
} 4n2+3n+2 O(n2)
}
return maxTop; Daha iyisi
} yaplabilir mi?
28
zm-3 Dorusal Algoritma
public static int maxAltDiziT(int[] a) { Bu algoritmann
int maxTop = 0; karmakl
int top = 0; nedir?
for (int i=0, j=0; j<=a.length; j++) {
top += a[j];
if (top > maxTop) {
maxTop = top;
int bas = i; // alt dizinin balangc
int son = j; // alt dizinin sonu
} else if (top<0){
i = j + 1;
top = 0; 5n+3 O(n)
}
} Daha iyisi
return maxTop; yaplabilir mi?
}
29
Maksimum Alt Dizi Toplam alma Sresi

eitli Maksimum Alt Dizi Toplam algoritmalar iin


alma sreleri aada verilmitir. (saniye cinsinden)

N O(N3) O(N2) O(N log N) O(N)


10 0,000001 0,000000 0,000001 0,000000
100 0,000288 0,000019 0,000014 0,000005
1 000 0,223111 0,001630 0,000154 0,000053
10 000 218 0,133064 0,001630 0,000533
100 000 NA 13,17 0,017467 0,005571
1 000 000 NA NA 0,185363 0,056338

30
W Notasyonu: Asimptotik Alt Snr
T(n) = W (f(n))
c ve n0 eklinde pozitif sabitlerimiz olduunu dnelim. n >= n0
ifadesini salayan tm deerler iin T(n) >= c*f(n) dir.

T(n)
alma Zaman

c*f(n)

n0 Eleman says N

rnek: T(n) = 2n + 5 W(n). Neden?


2n+5 >= 2n, tm n >= 1 iin
T(n) = 5*n2 - 3*n W(n2). Neden?
5*n2 - 3*n >= 4*n2, tm n >= 4 iin 31
Q Notasyonu: Asimptotik Alt ve st Snr
T(n) = Q (f(n))
c1,c2 ve n0 eklinde pozitif sabitlerimiz olduunu dnelim n >=
n0 ifadesini salayan tm deerler iin c1*f(n) <= T(n) <= c2*f(n) dir.

c2*f(n)
alma zaman

T(n)
c1*f(n)

n0 Eleman Says N

rnek: T(n) = 2n + 5 Q(n). Neden?


2n <= 2n+5 <= 3n, tm n >= 5 iin
T(n) = 5*n2 - 3*n Q(n2). Neden?
4*n2 <= 5*n2 - 3*n <= 5*n2, tm n >= 4 iin 32
Byk-Oh, Theta, Omega
pucu:
O(f(N)) dnrsek f(N) ile eit veya kk
stten snr: f(N) ile yava veya ayn hzda byr

(f(N)) dnrsek f(N) ile eit veya byk


Alttan snr: f(N) ile ayn hzda veya hzl byr

(f(N)) dnrsek f(N) ile eit


Alttan ve sten snr : byme oranlar eit

(Nnin byk olduu ve sabiterin elendii durumlarda)

33
Ska Yaplan Hatalar

Karmakl bulmak iin sadece dngleri saymakla


yetinmeyin.
2 ii ie dngnn 1 den N2 kadar dndn dnrsek
karmaklk O(N4) olur.

O(2N2) veya O(N2+N) gibi ifadeler kullanmayn.


Sadece baskn terim kullanlr.
ndeki sabitler kaldrlr.

ie dngler karmakl direk etkilerken art arda gelen


dngler karmakl etkilemez.

34
N tane pozitif tam saynn toplamn
bulan algoritmann karmakl nedir.
N tane pozitif tam saynn toplamn
bulan algoritmann karmakl nedir.
N tane pozitif tam saynn toplamn
bulan algoritmann karmakl nedir.
Faktriyel hesab yapan fonksiyonun
karmakl nedir?
Faktriyel hesab yapan fonksiyonun
karmakl nedir?

You might also like