Bir şeyi en iyi öğrenmenin yolu örnek üzerinde çözüm yapmaktır. Biz de sizler için algoritma karmaşıklığının nasıl hesaplandığını direkt kod üzerinde gösterelim dedik. Burada satır satır yaklaşımda bulunduğumuza dikkat etmeniz lazım. Algoritma karmaşıklığı örnekleri üzerinden konunun büyük bir bölümü anlamanız mümkündür.
Algoritma Karmaşıklık problemi 1: Aşağıdaki kodların zaman karmaşıklığını bulunuz.
- int[][] a = new int[N][N]; /* NxN matrix
- for i from 0 to N {
- for j from 0 to N {
- a[i][j] = i + j
- }
- }
Yukarıdaki koda bakalım. Eğer big O notasyonunu hesaplayacaksak for döngülerine bakmamız yeterli. İçiçe for döngüleri daima N^2 döner. O(n^2)
Algoritma Karmaşıklık problemi 2: Aşağıdaki kodların zaman karmaşıklığını bulunuz.
- for i from 0 to n {
- print i /* line 2 */
- }
Gayet basit bir for döngüsü var. N kez döneceği için O(n) olacaktır.
Algoritma Karmaşıklık problemi 3: Aşağıdaki kodların zaman karmaşıklığını bulunuz.
- for i from 0 to A.length {
- int j = 0;
- while (a[i] != b[j]) {
- print a[i]
- j = j + 1
- }
- }
Bu kez işin içine While döngüsü giriyor. Aslında burada bazı şeyler net olmadığından net hesaplama yapamayız. Ancak yaklaşık olarak O(a*b) diyebiliriz. Eğer b değerinin çok büyük olması mümkünse O(b) demek de mümkündür.
Algoritma Karmaşıklık problemi 4: Aşağıdaki kodların zaman karmaşıklığını bulunuz.
- int i = N;
- while i >= 1 {
- print i
- i = i / 2
- }
son sorumuz biraz zor olsun istedim. Aslında while döngüsünü görünce N deyip geçerdik değil mi? Ancak kazın ayağı öyle değil. Çünkü while döngüsü içerisindeki i değeri maniple edilmiş. Her döngüde i değeri yarıya indiriliyor. Bunu gördük mü aklımıza logaritmik bir değer gelmesi lazım. Aslında biraz ezberci olacak ama, işlem yarılanıyorsa O(logn) dememiz lazım. Ancak illa işlem üzerinden görmek istiyoruz derseniz aşağıya bakalım.
2^x = n dersek x'i çözmek için iki tarafında logaritmasını almamız gerekiyor.
log(2^x) = logn
xlog(2) = log(n)
x = logn/log2
buradaki işlem bize x değerinin logn olduğunu gösteriyor.Etiketler: Algoritma, Algoritma Karmaşıklığı, Algoritma karmaşıklığı örnekleri