ALGORİTMA
İ
VE PROGRAMLAMA
II
Öğ Gö E d l GÜVENOĞLU
Öğr.Gör.Erdal
Hafta 2
Maltepe Üniversitesi
Bilgisayar Mühendisliği Bölümü
ALGORİTMA ANALİZİ
2
Neden algoritmayı analiz ederiz?
Algoritmanın performansını ölçmek için
Farklı algoritmalarla karşılaştırmak için
Daha iyisi mümkün mü? Olabileceklerin en iyisi mi?
Özelliklerinin analizi
Algoritmanın
go t a
ça
çalışma
ş a zamanı
a a
Hafızada kapladığı alan
KARMAŞIKLIK: ALGORİTMA PERFORMANSI VE
ÖLÇME YÖNTEMİ
3
Bir algoritmanın performansı iç ve dış faktörlere bağlıdır.
İç
Algoritma verimliliği:
• Çalıştırmak
Ç l t
k iiçin
i gereken
k zaman
• Çalıştırmak için gereken yer
(bellek alanı)
Dış
• Girdi verisinin büyüklüğü
• Bilgisayarın
Bil i
hhızı
• Derleyicinin kalitesi
Karmaşıklık iç faktörlerle ve daha çok da zamanla ilgilidir.
Ç
ÇALIŞMA
Ş
ZAMANI
N ANALİZİ
N
4
Bir algoritmanın performansı iç ve dış faktörlere bağlıdır.
Algoritma 1 T1(N)=1000N
Algoritma 2 T2(N)=N2
N giriş verisi
N giriş verisi
10001010101000111110001100011
10101010101010101001000101010
10001000000000000111101010001
11010
Çalışma zamanı T1(n)
Ç l
Çalışma
zamanıT
T2(n)
( )
Ç
ÇALIŞMA
Ş
ZAMANI
N ANALİZİ
N
5
Çalışma
a zamanı T(N)
Algoritma 2
Algoritma 1
1000
Gi i verisi
Giriş
i iN
Ç
ÇALIŞMA
Ş
ZAMANI
N ANALİZİ
N
6
N
T1
T2
10
10-2 sec
10-4 sec
100
10-1 sec
10-2 sec
1000
1 sec
1 sec
10000
10 sec
100 sec
100000
100 sec
10000 sec
N değerinin 1000’den küçük olduğu durumlarda iki algoritma
arasındaki çalışma zamanı ihmal edilebilir büyüklüktedir.
BÜYÜME HIZI VE BÜYÜK O (BIG O)
NOTASYONU
7
Büyüme hızı bir algoritmanın performansını yansıtan en iyi
göstergedir.
Bü ük O notasyonu büyüme
Büyük-O
bü ü hhızını gösterir.
ö i Bir
Bi algoritmanın
l i
performansını en iyi tanımlayan matematiksel bir formüldür
ve algoritmanın iç detaylarına bakılarak elde edilir
edilir.
Büyük-O girdi verisinin büyüklüğünü gösteren bir N
parametresine dayanan bir fonksiyondur.
Örneğin n değerine bağlı olarak performansı (sabit a, b, c değerleri
için) an2 + bn + c olan bir algoritmanın performansı O(N2)’dir
N değeri arttıkça N2 terimi baskın olacağı için büyük-O
notasyonunda sadece baskın olan terim kullanılır.
BÜYÜME HIZI VE BÜYÜK O (BIG O)
NOTASYONU
8
Bir algoritmanın çalışma süresi
O bir fonksiyon değil,
T(N)=O(f(n))
sadece gösterimdir
gösterimdir.
BÜYÜME HIZI VE BÜYÜK O (BIG O)
NOTASYONU
9
O notasyonunda yazarken en basit şekilde yazarız.
Örneğin
3n2+2n+5 = O(n2)
Aşağıdaki gösterimlerde doğrudur fakat kullanılmaz.
3n2+2n+5 = O(3n2+2n+5)
3n2+2n+5 = O(n2+n)
3n2+2n+5 = O(3n2)
BÜYÜK O (BIG O) NASIL HESAPLANIR?
10
Bir program kodunun zaman karmaşıklığını hesaplamak için 5
Kural;
1 Döngüler
2 İç içe Döngüler
3 Ardışık deyimler
4 If-then-else deyimleri
5 Logaritmik
g
karmaşıklık
ş
1. DÖNGÜLER
11
Bir döngünün çalışma zamanı en çok döngü içindeki deyimlerin
çalışma zamanının iterasyon sayısıyla çarpılması kadardır.
n defa
çalışır
for (i=1; i<=n; i++)
{
m = m + 2;
2
}
Sabit zaman
Toplam zaman = sabit c * n = cn = O(N)
2. İÇİÇE DÖNGÜLER
12
İçteki analiz yapılır. Toplam zaman bütün döngülerin
çalışma sayılarının çarpımına eşittir
Dış dö
D
döngü
ü
n defa
çalışır
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
k = k+1;
}
Sabit zaman
}
iiç dö
döngü
ü
n defa
çalışır
Toplam zaman = c * n * n * = cn2 = O(N2)
3. ARDIŞIK DEYİMLER
13
Her deyimin zamanı birbirine eklenir.
Sabit zaman
Sabit zaman
Dış döngü
n defa
d f
çalışır
x = x +1;
for (i=1; i<=n; i++) {
m = m + 2;
}
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
k = k+1;
}
Sabit zaman
}
toplam zaman = c0 + c1n + c2n2 = O(N2)
n defa
çalışır
iç döngü
n defa
çalışır
4. IFIF-THEN
THEN--ELSE DEYİMLERİ
14
En kötü çalışma zamanı:test zamanına then veya else
kısmındaki çalışma zamanının hangisi büyükse o kısım
eklenir.
test:
sabit
bit
Diğer if :
sabit+sabit
(else yok)
if (depth( ) != otherStack.depth( ) ) {
return
t
f l
false;
}
else {
for (int n = 0; n < depth( ); n++) {
if (!list[n].equals(otherStack.list[n]))
return false;
}
}
Toplam zaman = c0 + c1 + (c2 + c3) * n = O(N)
then:
sabit
else:
(sabit +sabit) * n
5. LOGARİTMİK KARMAŞIKLIK
15
Problemin büyüklüğünü belli oranda(genelde ½)
azaltmak için sabit bir zaman harcanıyorsa bu algoritma
O(log N)
N)’dir.
dir.
Örnek algoritma (binary search):
N sayfalı bir sözlükten bir sözcük arama
• Sözlüğün orta kısmına bakılır
• Sözcük ortaya göre sağda mı solda mı kaldığı
bulunur?
• Bu
B işlem
i l
sağ
ğ veya solda
ld sözcük
ö ük b
bulunana
l
kkadar
d
tekrarlanır
O NOTASYONU – ÖRNEK 1
16
3n2+2n+5 = O(n2) ifadesinin doğru olup olmadığını
ispatlayınız.
10 n2 = 3n2 + 2n2 + 5n2
≥ 3n2 + 2n + 5 for n ≥ 1
c = 10, n0 = 1
Çözüm
Çö
ü
kü
kümesini
i i sağlayan
ğl
kaç tane n0 ve c cifti olduğu
önemli değildir. Tek bir çift
olması notasyonun doğruluğu
için yeterlidir.
O NOTASYONU – ÖRNEK 2
17
Fonksiyonların harcadıkları zamanları O notasyonuna göre yazınız.
f1(n) = 10 n + 25 n2
f2(n) = 20 n log n + 5 n
f3(n)
( ) = 12 n log
g n + 0.05 n2
f4(n) = n1/2 + 3 n log n
• O(n2)
• O(n log n)
• O(n2)
• O(n log n)
SIK KULLANILAN BÜYÜME HIZLARI
18
Zaman karmaşıklığı
Örnek
O(1)
Bağlı listeye ilk eleman olarak ekleme
yapma
sabit
O(log N)
log
Sıralı bir dizide bir eleman arama
O(N)
lineer
Sıralı olmayan bir dizide bir eleman arama
O(N log N)
n-log-n
N elemanı böl-parçala-yut yöntemiyle
sıralama
O(N2) ikinci dereceden
Bir grafikte iki düğüm arasındaki en kısa
yolu bulma
O(N3)
üçüncü dereceden
Ardarda gerçekleştirilen lineer denklemler
O(2N)
Hanoi’nin
Hanoi
nin Kuleleri problemi
üssel
BÜYÜME HIZLARI
19
O(N2)
O(Nlog N)
Kısa bi
K
bir süre
ü iiçin
i N2
NlogN’den daha iyi
N
BİR PROGRAMIN ASIL ÇALIŞMA ZAMANINI
HESAPLAMA (ÖRNEK)
20
Al i
Algoritma
ve algoritma
l i
analizi
li i kavramlarının
k
l
d h iyi
daha
i i anlaşılabilmesi
l l bil
i amacıyla
l bir
bi
problemin çözümü için tasarlanmış olan A ve B algoritmanı ele alalım. Bu
algoritmaların özelliklerinin belirlendiğini, analizlerinin yapıldığını ve aşağıdaki
sonuçların elde edildiğini düşünelim.
Yukarıda A ve B algoritmaları için geçerli olan zaman formülleri verilmiştir. N, girdi
boyutunu
y
ifade etmektedir. Her iki algoritma
g
için
ç harcanan zaman farklıdır. Girdi
boyutuna göre değişiklik göstermektedir.
BİR PROGRAMIN ASIL ÇALIŞMA ZAMANINI
HESAPLAMA (ÖRNEK)
21
A ve B algoritmalarının
l i l
girdi
i di boyutuna
b
göre harcadıkları
h
d kl zamanların
l
diyagramı
di
şekil ’de gösterilmiştir.
BİR PROGRAMIN ASIL ÇALIŞMA ZAMANINI
HESAPLAMA (ÖRNEK)
22
A ve B algoritmalarının
l i l
hharcadıkları
d kl zamanlar
l göz önünde
d bulundurularak,
b l d l k
analizleri aşağıda ayrı ayrı yapılmıştır.
BİR PROGRAMIN ASIL ÇALIŞMA ZAMANINI
HESAPLAMA (ÖRNEK)
23
A ve B algoritmalarının
l i l
hharcadıkları
d kl zamanlar
l göz önünde
d bulundurularak,
b l d l k
analizleri aşağıda ayrı ayrı yapılmıştır.
ÖRNEKLER
24
1 Aşağıda
1.
A
d bi
bir dizinin
di i i aritmetik
i
ik ortalamasını
l
bbulan
l ve sonucu kullanıcıya
k ll
gerii
döndüren bulortalama() adlı fonksiyonun kodu verilmiştir. Bu fonksiyonun
yürütme zamanını gösteren T(n) bağıntısını elde ediniz?
ÖRNEKLER
25
ÖRNEKLER
26
ÖRNEKLER
27
ÖRNEKLER
28
ÖRNEKLER
29
ÖRNEKLER
30
ÖRNEKLER
31
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )