bölüm 1. algoritma analizi -...
TRANSCRIPT
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 1 / 32
Bölüm 1. Algoritma Analizi
Olcay Taner Yıldız
2014
Büyük-O Gösterimi
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 2 / 32
Bir dizinin en büyük elemanını bulanalgoritma
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 3 / 32
1 int diziEnBuyuk(int[] dizi)2 int i, enBuyuk;3 enBuyuk = dizi[0];4 for (i = 1; i < dizi . length; i++)5 if ( dizi [ i ] > enBuyuk)6 enBuyuk = dizi[ i ];7 8 return enBuyuk;9
Islem Sayısı (En Fazla)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 4 / 32
1 defa enBuyuk = dizi[0] atama komutu 1 defa i = 1 atama komutu N defa i < N karsılastırma komutu N - 1 defa i++ atama komutu N - 1 defa if ( dizi [ i ] > enBuyuk) karsılastırma komutu N - 1 defa enBuyuk = dizi[ i ] atama komutu
O(n)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 5 / 32
Tanım 1 f(n) ve g(n) pozitif tamsayılardan reel sayılara
tanımlı iki fonksiyon olsun. Eger her n > n0 tamsayısı için
f(n) < cg(n) olacak sekilde c ve n0 sabitleri varsa, f= O(g)’dir
ve f fonksiyonu için g fonksiyonu bir üst sınır belirler.
Islem Sayısı (En Az)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 6 / 32
1 defa enBuyuk = dizi[0] atama komutu 1 defa i = 1 atama komutu N defa i < N karsılastırma komutu N - 1 defa i++ atama komutu N - 1 defa if ( dizi [ i ] > enBuyuk) karsılastırma komutu
Ω(n)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 7 / 32
Tanım 2 f(n) ve g(n) pozitif tamsayılardan reel sayılara
tanımlı iki fonksiyon olsun. Eger her n > n0 tamsayısı için
f(n) > cg(n) olacak sekilde c ve n0 sabitleri varsa, f= Ω(g)’dir
ve f fonksiyonu için g fonksiyonu bir alt sınır belirler.
Θ(n)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 8 / 32
Tanım 3 f(n) ve g(n) pozitif tamsayılardan reel sayılara
tanımlı iki fonksiyon olsun. Eger her n > n0 tamsayısı için
c1g(n) > f(n) > c2g(n) olacak sekilde c1, c2 ve n0 sabitleri
varsa, f= Θ(g)’dir ve f fonksiyonu için g fonksiyonu hem üst
hem de bir alt sınır belirler.
Algoritma analizinde sıklıkla kullanılan 8temel fonksiyonun büyüme oranları
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 9 / 32
0
1
2
3
4
5
6
7
8
9
10
0 1 2 3 4 5 6 7 8 9 10
Yinelemesiz Programların Analizi
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 10 / 32
Püf Nokta (1)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 11 / 32
Bir for döngüsünün çalısma süresi döngünün içindekisatırların çalısma süreleri ile döngünün tekrar sayısınınçarpımı kadardır.
1 int kare_toplami(int N)2 int i, toplam = 0;3 for (i = 1; i <= N; i++)4 toplam += i * i ;5 return toplam;6
T (N) =N∑
i=1
1
= N ∈ O(N)
Püf Nokta (2)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 12 / 32
Birden fazla döngü iç içe oldugunda fonksiyonun çalısmasüresi bütün döngülerin çalısma sürelerinin çarpımı kadardır.
1 toplam = 0;2 for (i = 0; i < N; i++)3 for (j = 0; j < N; j++)4 toplam++;
Püf Nokta (2)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 13 / 32
T (N) =
N−1∑
i=0
N−1∑
j=0
1
︸ ︷︷ ︸
N
=N−1∑
i=0
N
= NN−1∑
i=0
1
︸ ︷︷ ︸
N
= N2 ∈ O(N2)
Püf Nokta (3)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 14 / 32
Ardısık program parçaları söz konusu oldugunda çalısmasüresi en fazla olan program parçasının çalısma süresi tümprogramın çalısma süresi olarak kabul edilir.
1 toplam = 0;2 for (i = 1; i <= N; i++)3 toplam += i * i ;4 for (i = 0; i < N; i++)5 for (j = 0; j < N; j++)6 toplam++;
T (N) = O(N) +O(N2) ∈ O(N2)
Püf Nokta (4)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 15 / 32
If/Else kosul satırının çalısma süresi, kosulun dogru veyayanlıs oldugu durumların çalısma sürelerinin en fazlasıkadardır.
1 toplam = 0;2 if (N % 2 == 0)3 for (i = 1; i <= N; i++)4 toplam += i * i ;5 else
6 for (i = 0; i < N; i++)7 for (j = 0; j < N; j++)8 toplam++;
T (N) = O(N2)
Püf Nokta (5)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 16 / 32
Döngü degiskeninin birer birer artmadıgı / azalmadıgıdurumlarda döngü degiskeninin döngü süresince aldıgıdegerleri belirlemek döngünün çalısma süresini belirlemedeyardımcı olacaktır.
1 int basamak_sayisi(int N)2 int i, sayi = 1;3 while (N > 1)4 sayi++;5 N = N / 2;6 7 return sayi;8
Püf Nokta (5)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 17 / 32
Ilk döngü sonundaki degeriN
2, ikinci döngü sonundaki degeri
N
4=N
22, üçüncü döngü sonundaki degeri
N
8=N
23, . . ., k’nıncı
döngü sonundaki degeri iseN
2kolacaktır.
N
2k= 1
N = 2k
k = log2N
sonucunda toplam tekrar sayısı log2N , fonksiyonun çalısmasüresi de O(logN ) olur.
Özyinelemeli Programların Analizi
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 18 / 32
Özyinelemeli Programların Analizi
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 19 / 32
Özyinelemeli programların analizi, özyinelemeli olmayanprogramların analizi gibi yapılamaz.
Bunun temel nedeni, programın çalısma süresinin sadeceyapılan islemlere degil aynı zamanda programın kendiçalısma süresinin bir fonksiyonuna da baglı olmasıdır.
Örnek (1)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 20 / 32
1 int faktoryel(int N)2 if (N <= 1)3 return 1;4 else
5 return N * faktoryel(N - 1);6
N girdisi için çalısma süresi yine faktöryel fonksiyonununN − 1 girdisi için çalısma süresine baglıdır.
Örnek (1)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 21 / 32
f(1) = 1
f(N) = f(N − 1) + 1
Birinci denklem N= 1 için fonksiyonun yaptıgı islemsayısını, yani return 1; satırındaki döndürme islemini
Ikinci denklemdeki +1 isereturn N * faktoryel(N - 1); satırındaki çarpma isleminigöstermektedir.
Örnek (1)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 22 / 32
Ikinci denklemdeki N yerine sırayla N − 1, N − 2, . . ., 2koyarak
f(N) = f(N − 1) + 1
f(N − 1) = f(N − 2) + 1
f(N − 2) = f(N − 3) + 1
. . .
f(2) = f(1) + 1
elde ederiz. Esitlikleri taraf tarafa topladıgımızda, f(N − 1),f(N − 2), . . ., f(2) sadelesir ve geriye
f(N) = f(1) +N − 1
f(N) = N ∈ O(N)
Örnek (2)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 23 / 32
1 int basamak_sayisi(int N)2 if (N == 1)3 return 1;4 else
5 return 1 + basamak_sayisi(N / 2);6
Bu fonksiyonun çalısma süresi (girdi N için) yine bufonksiyonun çalısma süresine (girdi N / 2 için) baglıdır.
Örnek (2)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 24 / 32
b(1) = 1
b(N) = b(N/2) + 1
Birinci denklem N= 1 için fonksiyonun yaptıgı islemsayısını, yani return 1; satırındaki döndürme islemini
Ikinci denklemdeki +1 isereturn 1 + basamak_sayisi(N / 2); satırındaki toplama isleminigöstermektedir.
Örnek (2)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 25 / 32
N = 2k varsayıp N yerine sırayla N/2 = 2k−1, N/22 = 2k−2,. . . , N/2k−1 = 2 koyarak
b(2k) = b(2k−1) + 1
b(2k−1) = b(2k−2) + 1
b(2k−2) = b(2k−3) + 1
. . .
b(21) = b(1) + 1
elde ederiz. Esitlikleri taraf tarafa topladıgımızda, b(2k−1),b(2k−2), . . ., b(2) sadelesir ve geriye
b(2k) = b(1) + k
b(2k) = k + 1
b(N) = log2N + 1 ∈ O(logN)
Örnek (3)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 26 / 32
1 void hanoi(int N, int sutun1, int sutun2)2 sutun3 = 6 - sutun1 - sutun2;3 if (N = 1)4 hareketEttir (sutun1, sutun2);5 else6 hanoi(N - 1, sutun1, sutun3);7 hareketEttir (sutun1, sutun2);8 hanoi(N - 1, sutun3, sutun2);9
10
Hanoi fonksiyonunun çalısma süresi (girdi N için) yine bufonksiyonun çalısma süresine (girdi N − 1 için) baglıdır.
Örnek (3)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 27 / 32
h(1) = 1
h(N) = 2h(N − 1) + 1
Birinci denklem N= 1 için fonksiyonun yaptıgı islemsayısını, yani hareketEttir (1, 3); satırındaki islemi
Ikinci denklemdeki 2h(N - 1), 2 kere özyinelemeli çagırılanhanoi(N - 1, ...) satırını; +1 ise hareketEttir (1, 3); satırındakiislemi göstermektedir
Örnek (3)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 28 / 32
Ikinci denklemdeki N yerine sırayla N − 1, N − 2, . . ., 2koyarak
h(N) = 2h(N − 1) + 1
h(N − 1) = 2h(N − 2) + 1
h(N − 2) = 2h(N − 3) + 1
. . .
h(2) = 2h(1) + 1
elde ederiz.
Örnek (3)
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 29 / 32
Ikinci denklemi 2 ile, üçüncü denklemi 4= 22 ile, . . . çarparsak,
h(N) = 2h(N − 1) + 1
2h(N − 1) = 22h(N − 2) + 2
22h(N − 2) = 23h(N − 3) + 22
. . .
2N−1h(2) = 2Nh(1) + 2N−1
olur. Esitlikleri taraf tarafa topladıgımızda, h(N − 1), h(N − 2),. . ., h(2) sadelesir ve geriye
h(N) = 2Nf(1) + 2N−1 + 2N−2 + . . .+ 1
h(N) =N∑
i=0
2i
h(N) = 2N+1 − 1 ∈ O(2N )
Temel Teorem
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 30 / 32
Özyinelemeli Problem Bölümü
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 31 / 32
N büyüklügünde bir problemi özyinelemeli çözmek için
N / b büyüklügünde a tane alt problem çözüyor bu alt problemlerin çözümlerini de O(Nd) zamanda
birlestirip ana probleme çözüm buluyorsak
ana problemi çözmek için harcayacagımız zaman
T (N) = aT (N/b) +O(Nd)
Temel Teorem
Büyük-O Gösterimi
YinelemesizProgramların Analizi
ÖzyinelemeliProgramların Analizi
Temel Teorem
O. T. Yıldız, C && Java ile Veri Yapılarına Giris, Bogaziçi Üniversitesi Yayınevi, 2013 32 / 32
Teorem 1 a, b ve d a > 0, b > 1, d ≥ 0 kosullarını saglayan
birer reel sayı olmak üzere,
T (N) = aT (N/b) +O(Nd)
denkleminin çözümü
T (N) =
O(Nd) eger d > logb aO(Nd logN) eger d = logb aO(N logb a) eger d < logb a
olarak verilir.