5.2.2.1. Yürütme Zamanı ve Karmaşıklık Hesabı
Örnek:
Aşağıda matris çarpa işlemi yapan bir fonksiyon görülmektedir; A ve B
matrisleri giriş C ise sonucun saklandığı matristir. Fonksiyonun n.m
boyutlu A matrisiyle n.r boyutlu B matrisini çarpıp n.r
boyutlu C matrisini elde etmesi için gerekli T(n)'ni ve büyük O
notasyonundaki karmaşıklığı hesaplayınız. Eğer matrisler n.n boyunda
kare matrisler olsaydı T(n) ve O(?) ne olurlardı?
|
void carpMatris(A, B, C) |
|
float A[n][m], B[m][r], C[n][r]; |
|
{ |
|
int x, y,z; |
|
for(x=0, x<n; x++) { |
|
for(z=0;
z<r; z++) { |
|
aratoplam=0; |
|
for(y=0;
y<m; y++) |
|
aratoplam+=A[x][y]*B[y][z]; |
|
C[x][z]=aratoplam; |
|
} |
|
} |
|
} |
|
Çözüm:
Burada üç tane döngü vardır ve sayaç değişkenleri x, y
ve z olarak adlandırılmıştır; bağıntılar ise matrisin boyutunu
belirleyen n, m ve r'ye bağlı çıkacaktır. Hesaplama yapılırken
şöyle bir yol izlenebilir: önce for deyimlerinde yapılan işlem
sayısı bulunur ve ardından her for döngüsü içerisinde yapılan işlem sayısı
bulunur ve her ikisi toplanır. .
satırda for deyiminde x=0 işlemi 1 kez; x<n işlemi
(n+1) kez ve x++ işlemi n kez yapılır. Dolayısıyla,
en dışdaki for deyimi içerisinde yapılan işlem sayısı 1+(n+1)+n= 2n+2
kez yapılır. .
satırdaki for deyiminde ise, işlem sayısı (2r+2)n, .
satırdaki for deyiminde ise (2m+2)nr çıkarak. Dolayısıyla, yalnızca
for deyimleri için yapılan işlem sayısı Tfor(n, m, r)= (2n+2)+(2r+2)n+(2m+2)nr
olur. Döngüler içerisindeki işlem sayısı ise, .
satırdaki işlem sayısı nr kez; benzer şekilde .
satırda da nr kez yapılır; .
satırdaki işlem sayısı ise (satırın bütünü 1 işlem kabul edilerek) nmr
olur. Tdöngü içi(n, m, r)= nr+nr+nmr olur. Buna göre
toplam işlem sayısı T(n, m, r)= Tfor(n, m, r)+ Tdöngü
içi(n, m, r) bağıntısı uyarınca,
T(n, m, r)= (2n+2)+(2r+2)n+(2m+2)nr+ nr+nr+nmr
=
2n+2+2nr+2n+2mnr+2nr+nr+nr+nmr
=
3nmr+6nr+4n+2
olarak bulunur. Yürütme zamanı bağıntısından O(?) karmaşıklığı,
kabaca şöyle bulunur; tüm sabit çarpanlar ve düşük dereceli terimler atılır.
Dolayısıyla karmaşıklık O(nmr) bulunur.
Eğer matrislerin her yöndeki boyutları n olursa, yürütme zamanı
bağıntısındaki m ve r'ler yerine n yerleştirilip
sadeleştirme işlemi yapılırsa,
T(n)= 3nnn+6nn+4n+2= 2n3+6n2+4n+2 ve O(n3)
bulunur.
|