Bölüm 1.2: Algoritma Karmaşıklığı

Bölüm 1.2: Algoritma Karmaşıklığı · Çalışma Soruları
Zaman ve bellekEn iyi / en kötü / ortalamaO, Ω ve ΘDöngü analiziÖzyineleme bağıntılarıAna teoremf1–f6Amortize analiz
Sercan KÜLCÜ

Çoktan Seçmeli · Karmaşıklık Kavramı

Soru 1: Süre Ölçümünün Sınırları

System.currentTimeMillis() ile süre ölçmek (deneysel ölçüm) hakkında hangisi yanlıştır?

C: Ölçüm yalnızca o girdideki süreyi verir; en kötü girdi seçilmemişse en kötü durumu göstermez. A, B ve D deneysel ölçümün bilinen eksiklikleridir; asimptotik analiz makineden bağımsızdır ve kod yazmadan yapılabilir.

Çıktı Sorusu · Karmaşıklık Kavramı

Soru 2: Adım Sayma

Her temel işlem 1 birim sayılırsa (atama, karşılaştırma, artırma, return), n = 10 öğeli a = {7, 1, 9, 4, 2, 8, 6, 3, 5, 0} dizisinde (a) hedef = 4 ve (b) dizide olmayan bir hedef için kaç işlem yapılır?

for (int i = 0; i < a.length; i++) {
  if (a[i] == hedef)
    return i;
}
return -1;
Cevabı göster
İşlem(a) hedef = 4(b) yok
i = 011
i < a.length4n + 1 = 11
a[i] == hedef4n = 10
i++3n = 10
return11
Toplam1333 = 3n + 3

4, indis 3'te bulunur: dört tur karşılaştırma, üç artırma. Hedef k indisindeyse 3k + 4 işlem yapılır. En kötü durum 3n + 3 = Θ(n).

Çoktan Seçmeli · Karmaşıklık Kavramı

Soru 3: Ortalama Karşılaştırma

9 öğeli bir dizide doğrusal arama yapılıyor. Hedef her zaman dizidedir ve her konumda olma olasılığı eşittir. Ortalama kaç karşılaştırma (a[i] == hedef) yapılır?

B: k. konumdaki hedef k karşılaştırmayla bulunur: (1 + 2 + … + 9)/9 = 45/9 = (n + 1)/2 = 5. 4,5 = n/2 sık yapılan yuvarlama hatasıdır; 9 başarısız aramanın (en kötü durum) sayısıdır. Ortalama da Θ(n)'dir.

Çoktan Seçmeli · Karmaşıklık Kavramı

Soru 4: En Kötü Durum Ne Verir?

En kötü durum analizi için aşağıdakilerden hangisi doğrudur?

A: En kötü durum, n boyutlu girdiler arasındaki en uzun süredir; her girdi için bir üst sınırdır. B ortalama durumun tanımıdır. Büyük O ise bir sınır türüdür (üst sınır); en kötü, en iyi ya da ortalama durumun her biri için kullanılabilir.

Çoktan Seçmeli · Karmaşıklık Kavramı

Soru 5: f3'ün Belleği

f3(n) için zaman ve ek bellek (çağrı yığını dahil) karmaşıklığı hangisidir?

public long f3(int n) {
  if (n <= 1) {
    return 1;
  }
  return f3(n - 1) + f3(n - 1);
}

D: 2ⁿ − 1 çağrı yapılır, ama çağrılar sırayla biter: ilk f3(n − 1) tamamen bitip çerçeveleri kalkmadan ikinci başlamaz. Yığında aynı anda en çok n çerçeve bulunur (f3(n), f3(n − 1), …, f3(1)). Zaman ve bellek farklı büyüyebilir.

Klasik Soru · Asimptotik Gösterim

Soru 6: O İçin c ve n₀

4n + 25 = O(n) olduğunu tanımla gösterin: c ve n₀ sabitlerini bulun. Neden tek bir doğru cevap yoktur?

Cevabı göster

Tanım: her n ≥ n₀ için 4n + 25 ≤ c · n olacak c > 0 ve n₀ bulunmalı.

  • c = 5: 4n + 25 ≤ 5n ⇔ n ≥ 25 → n₀ = 25 (n = 25: 125 ≤ 125 ✓; n = 24: 121 > 120 ✗).
  • c = 29: 4n + 25 ≤ 4n + 25n = 29n her n ≥ 1 için → n₀ = 1.

Tanım yalnızca bir çiftin varlığını ister; c büyüdükçe n₀ küçülebilir. Küçük n'ler (n < n₀) asimptotik analizde önemsizdir.

Çoktan Seçmeli · Asimptotik Gösterim

Soru 7: Hangisi Yanlış?

f(n) = 3n² + 5n + 2 için aşağıdakilerden hangisi yanlıştır?

C: Θ hem alt hem üst sınır ister; f(n) ≥ c · n³ hiçbir c > 0 için büyük n'lerde sağlanmaz (f(n)/n³ → 0). n³ gevşek bir üst sınırdır (A doğru), n gevşek bir alt sınırdır (B doğru); sıkı sınır yalnızca n²'dir.

Çoktan Seçmeli · Asimptotik Gösterim

Soru 8: Asimptotik Kurallar

Aşağıdakilerden hangisi doğrudur?

B: log₂ n = log₁₀ n / log₁₀ 2 = 3,32 · log₁₀ n; sabit çarpan farkıdır. A yanlıştır: 3ⁿ / 2ⁿ = 1,5ⁿ → ∞, üstel tabanlar sabitle değişmez. C ve D büyüme sırasını ters kurar: n log n, n²'den yavaş büyür.

Çıktı Sorusu · Asimptotik Gösterim

Soru 9: En Küçük n₀

f(n) = 2n² + 7n + 3 için c = 3 seçiliyor. f(n) ≤ 3n² eşitsizliğinin her n ≥ n₀ için sağlandığı en küçük n₀ kaçtır? c = 4 seçilirse n₀ ne olur?

Cevabı göster

c = 3: 2n² + 7n + 3 ≤ 3n² ⇔ n² − 7n − 3 ≥ 0 ⇔ n ≥ (7 + √61)/2 = 7,41 → n₀ = 8.

n3n²f(n)
7147150✗
8192187✓

c = 4: 2n² − 7n − 3 ≥ 0 ⇔ n ≥ (7 + √73)/4 = 3,89 → n₀ = 4 (n = 3: 36 < 42 ✗; n = 4: 64 ≥ 63 ✓). c büyüdükçe n₀ küçülür.

Çıktı Sorusu · Asimptotik Gösterim

Soru 10: Yarım Tur Sayısı

Aşağıdaki iki metot n = 7 ve n = 8 için ayrı ayrı çağrılıyor (dizi.length = n). Her biri kaç satır yazdırır? Genel tur sayısı ve karmaşıklık nedir?

void yaz1(int[] dizi) {
  for (int i = 0; i < dizi.length / 2; i++)
    System.out.println(dizi[i]);
}
void yaz2(int n) {
  for (int i = 0; i < n; i += 2)
    System.out.println(i);
}
Cevabı göster
  • yaz1: i < n/2 (tam sayı bölmesi) → n = 7: 3 satır (7/2 = 3), n = 8: 4 satır.
  • yaz2: i = 0, 2, 4, 6 → n = 7: 4 satır (0 2 4 6), n = 8: yine 4 satır; 8 < 8 yanlış.

yaz2 ⌈n/2⌉ kez döner: n çiftse n/2, tekse (n + 1)/2 (n/2 + 1 değil). İkisinde de sabit çarpan ½ atılır: O(n/2) = O(n).

Çıktı Sorusu · Döngü Analizi

Soru 11: İkiye Katlanan Sayaç

foo(8) ve foo(100) çağrıları kaç kez "Merhaba" yazdırır? Zaman karmaşıklığı nedir?

public void foo(int n) {
  for (int i = 1; i <= n; i = i * 2) {
    System.out.println("Merhaba");
  }
}
Cevabı göster
  • n = 8: i = 1, 2, 4, 8 → 4 kez (log₂ 8 + 1).
  • n = 100: i = 1, 2, 4, 8, 16, 32, 64 → 7 kez (⌊log₂ 100⌋ + 1); 128 > 100.

k turdan sonra i = 2ᵏ olur; döngü 2ᵏ ≤ n iken sürer → ⌊log₂ n⌋ + 1 tur → O(log n). Koşul i < n olsaydı n = 8 için 3 tur dönerdi.

n = 100: i değerleri1248163264

Adım Adım Çalıştırma · Döngü Analizi

Soru 12: f2(4) İzleme

f2(4) çağrısında iç döngü her dış turda kaç kez döner, metot ne döndürür?

iç döngü turları (i²)0i=00i=10i=20i=3

x = 0. Dış döngü i = 0'dan 3'e kadar dönecek; iç döngü sınırı her turda i · i'dir.

iç döngü turları (i²)0i=00i=10i=20i=3

i = 0: j < 0 hemen yanlış → iç döngü 0 kez döner; x = 0.

iç döngü turları (i²)0i=01i=10i=20i=3

i = 1: iç döngü i · i = 1 kez döner → x = 1.

iç döngü turları (i²)0i=01i=14i=20i=3

i = 2: iç döngü i · i = 4 kez döner → x = 5.

iç döngü turları (i²)0i=01i=14i=29i=3

i = 3: iç döngü i · i = 9 kez döner → x = 14.

iç döngü turları (i²)0i=01i=14i=29i=3

i = 4 < 4 yanlış → döngü biter; return 14 = 0 + 1 + 4 + 9 = (n − 1)n(2n − 1)/6 = 3 · 4 · 7 / 6. Toplam ≈ n³/3 → Θ(n³).

public int f2(int n) {
  int x = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < i * i; j++) {
      x++;
    }
  }
  return x;
}

Adım Adım Çalıştırma · Döngü Analizi

Soru 13: Geometrik Toplam

fonksiyon(10) ne yazdırır? İç döngünün toplam tur sayısı hangi sınıftadır?

iç döngü turları (= i)0i=10i=20i=40i=8

n = 10, sayac = 0. Dış döngü i'yi her turda ikiye katlar: 1, 2, 4, 8, …

iç döngü turları (= i)1i=10i=20i=40i=8

i = 1 < 10 → iç döngü 1 kez döner; sayac = 1.

iç döngü turları (= i)1i=12i=20i=40i=8

i = 2 < 10 → iç döngü 2 kez döner; sayac = 3.

iç döngü turları (= i)1i=12i=24i=40i=8

i = 4 < 10 → iç döngü 4 kez döner; sayac = 7.

iç döngü turları (= i)1i=12i=24i=48i=8

i = 8 < 10 → iç döngü 8 kez döner; sayac = 15.

iç döngü turları (= i)1i=12i=24i=48i=8

i = 16 < 10 yanlış → döngü biter; 15 yazılır. 1 + 2 + 4 + 8 = 2⁴ − 1 < 2n: dış döngü log n kez dönse de toplam Θ(n).

void fonksiyon(int n) {
  int sayac = 0;
  for (int i = 1; i < n; i *= 2) {
    for (int j = 0; j < i; j++) {
      sayac++;
    }
  }
  System.out.println(sayac);
}

Çıktı Sorusu · Döngü Analizi

Soru 14: Üçgensel Toplamlar

n = 6 için iki kod parçası ayrı ayrı çalıştırılıyor. Her biri ne yazdırır? İkisinin de karmaşıklığı nedir?

// Parça 1
int sayac = 0;
for (int i = 0; i < n; i++)
  for (int j = 0; j < i; j++)
    sayac++;
System.out.println(sayac);
// Parça 2
int sonuc = 0;
for (int i = 0; i < n; i++)
  for (int j = i; j < n; j++)
    sonuc += 1;
System.out.println(sonuc);
Cevabı göster
  • Parça 1 (j < i): 0 + 1 + 2 + 3 + 4 + 5 = n(n − 1)/2 = 15.
  • Parça 2 (j = i'den n'e): 6 + 5 + 4 + 3 + 2 + 1 = n(n + 1)/2 = 21.

İç döngünün işi her turda değişse de toplam bir aritmetik seridir: ikisi de Θ(n²). Azalan iş yükü daha iyi bir sınıf anlamına gelmez.

Çoktan Seçmeli · Döngü Analizi

Soru 15: İkiye Katlanan Dış Döngü

Aşağıdaki fonksiyonun zaman karmaşıklığı nedir?

public void foo(int n) {
  for (int i = 1; i < n; i = i * 2) {
    for (int j = 0; j < n; j++) {
      System.out.println(i + " " + j);
    }
  }
}

D: Dış döngü i = 1, 2, 4, … ile ⌈log₂ n⌉ tur döner; iç döngünün sınırı i'ye değil n'ye bağlıdır, her turda n kez döner. n = 16 için 4 · 16 = 64 satır yazılır. Önceki sorudan farkı: orada iç döngü j < i idi ve toplam Θ(n) çıkmıştı.

Çoktan Seçmeli · Döngü Analizi

Soru 16: Ardışık İki Döngü

Aşağıdaki metodun zaman karmaşıklığı nedir?

public void foo(int m, int n) {
  for (int i = 0; i < m; i++) {
    System.out.println(i);
  }
  for (int i = 0; i < n; i++) {
    System.out.println(i);
  }
}

B: Döngüler iç içe değil ardışıktır; süreleri toplanır: m + n. O(m · n) iç içe döngüler (ör. m × n matrisi gezmek) içindir. m ile n bağımsız girdiler olduğundan yalnızca n yazılamaz.

Çoktan Seçmeli · Döngü Analizi

Soru 17: f6'nın Sıkı Sınırı

for (int i = 0; i < n; i = 1 << i) döngüsüyle yazılan f6 için hangisi doğrudur (taşma yok sayılırsa)?

D: i ← 2ⁱ güncellemesi i'yi kuvvet kulesi gibi büyütür: 0, 1, 2, 4, 16, 65536. Tur sayısı yinelenmiş logaritma (log* n) kadardır. A, i = 2 · i döngüsü için doğru olurdu; f6'da i'nin kendisi üs olur.

Çıktı Sorusu · Döngü Analizi

Soru 18: f6 Değerleri

Aşağıdaki f6 için f6(16), f6(17) ve f6(65537) ne döndürür? (Java'da int kaydırma miktarı 32'ye göre mod alınır.)

public static int f6(int n) {
  int x = 0;
  for (int i = 0; i < n; i = 1 << i) {
    x++;
  }
  return x;
}
Cevabı göster
  • f6(16) = 4: i = 0, 1, 2, 4 (< 16); sonra i = 16, 16 < 16 yanlış.
  • f6(17) = 5: i = 16 de 17'den küçük → bir tur daha; sonra i = 65536.
  • f6(65537): hiç bitmez. i = 65536 < 65537 → x = 6, sonra 1 << 65536 = 1 << 0 = 1 (65536 mod 32 = 0). i yeniden 1, 2, 4, 16, 65536 döngüsüne girer.

Analizdeki “taşmayı yok say” varsayımı bu yüzden önemlidir: matematiksel f6 Θ(log* n)'dir, ama Java kodu n > 65536 için sonsuz döngüdür.

Çıktı Sorusu · Özyinelemeli Analiz

Soru 19: İki Çağrı ve Tek Çağrı

f3(5) ne döndürür ve toplam kaç çağrı yapılır (ilk çağrı dahil)? Son satır return 2 * f3(n - 1); olarak değiştirilirse dönüş değeri ve çağrı sayısı ne olur?

public long f3(int n) {
  if (n <= 1) {
    return 1;
  }
  return f3(n - 1) + f3(n - 1);
}
Cevabı göster
  • f3(5) = 16 (= 2ⁿ⁻¹), 31 çağrı (= 2ⁿ − 1): her çağrı iki çağrı doğurur.
  • 2 * f3(n − 1) ile: değer yine 16, ama yalnızca 5 çağrı: f3(5), f3(4), …, f3(1).

Bağıntı 2T(n − 1) + c'den T(n − 1) + c'ye iner: Θ(2ⁿ) → Θ(n). Aynı alt problemin iki kez çözülmesi gereksizdir; sonucu bir kez hesaplayıp kullanmak yeter.

Adım Adım Çalıştırma · Özyinelemeli Analiz

Soru 20: Tek Çağrılı Sürüm

f3'ün tek çağrılı sürümü g(4) ile çağrılıyor. Çağrı yığını nasıl büyüyüp küçülür, kaç çağrı yapılır ve sonuç nedir?

çağrı yığını (üst = çalışan)g(4)bekliyor: 2 · g(3)

g(4) çağrıldı: 4 ≤ 1 değil → satır 5'te tek bir çağrı: g(3). Sonuç 2 ile çarpılacak.

çağrı yığını (üst = çalışan)g(3)bekliyor: 2 · g(2)g(4)bekliyor: 2 · g(3)

g(3) → g(2) çağrısı. Her düzeyde yalnızca bir yeni çerçeve açılır.

çağrı yığını (üst = çalışan)g(2)bekliyor: 2 · g(1)g(3)bekliyor: 2 · g(2)g(4)bekliyor: 2 · g(3)

g(2) → g(1) çağrısı. Her düzeyde yalnızca bir yeni çerçeve açılır.

çağrı yığını (üst = çalışan)g(1)taban → 1g(2)bekliyor: 2 · g(1)g(3)bekliyor: 2 · g(2)g(4)bekliyor: 2 · g(3)

g(1): n ≤ 1 → taban durum, 1 döner. Yığında 4 çerçeve: derinlik n.

çağrı yığını (üst = çalışan)g(2)2 · 1 = 2g(3)bekliyor: 2 · g(2)g(4)bekliyor: 2 · g(3)

g(2) = 2 · 1 = 2 döner.

çağrı yığını (üst = çalışan)g(3)2 · 2 = 4g(4)bekliyor: 2 · g(3)

g(3) = 2 · 2 = 4 döner.

çağrı yığını (üst = çalışan)g(4)2 · 4 = 8

g(4) = 2 · 4 = 8. Toplam 4 çağrı: T(n) = T(n − 1) + c → Θ(n). Aynı değeri iki çağrıyla hesaplayan f3(4) 15 çağrı yapar.

public long g(int n) {
  if (n <= 1) {
    return 1;
  }
  return 2 * g(n - 1);
}

Çoktan Seçmeli · Özyinelemeli Analiz

Soru 21: Bağıntıyı Açma

T(n) = 2T(n − 1) + c, T(1) = c bağıntısı açma yöntemiyle çözülürse kapalı biçim hangisidir?

B: T(n) = 2T(n − 1) + c = 4T(n − 2) + 3c = 8T(n − 3) + 7c = … = 2ᵏ T(n − k) + (2ᵏ − 1)c. k = n − 1'de T(1) = c: 2ⁿ⁻¹c + (2ⁿ⁻¹ − 1)c = (2ⁿ − 1)c → Θ(2ⁿ). Çıkarmalı bağıntı olduğu için ana teorem uygulanamaz.

Klasik Soru · Özyinelemeli Analiz

Soru 22: T(n) = T(n − 1) + n

T(n) = T(n − 1) + n, T(1) = 1 bağıntısını açma yöntemiyle çözün. Neden ana teorem uygulanamaz? Bu bağıntı hangi algoritmanın en kötü durumunda ortaya çıkar?

Cevabı göster

T(n) = n + T(n − 1) = n + (n − 1) + T(n − 2) = … = n + (n − 1) + … + 2 + T(1) = n(n + 1)/2 → Θ(n²).

Ana teorem T(n) = aT(n/b) + f(n) biçimini ister; burada alt problem n/b değil n − 1'dir (çıkarmalı bağıntı).

Pivotun hep en küçük ya da en büyük öğe olduğu hızlı sıralamada her parçalama Θ(n) sürer ve yalnızca pivotu ayırır: T(n) = T(n − 1) + Θ(n). Eklemeli sıralamanın ters sıralı girdisi de aynı toplamı verir.

Klasik Soru · Ana Teorem

Soru 23: Dört Bağıntı

Ana teoremle çözün; her biri için a, b, log_b a, f(n)'nin derecesi c ve durumu yazın: (a) T(n) = 3T(n/3) + n, (b) T(n) = 9T(n/3) + n, (c) T(n) = T(n/2) + n, (d) T(n) = 4T(n/2) + n², (e) T(n) = 2T(n/2) + n log n.

Cevabı göster
a, blog_b acDurumSonuç
(a)3, 3112Θ(n log n)
(b)9, 3211Θ(n²)
(c)1, 2013Θ(n)
(d)4, 2222Θ(n² log n)
(e)2, 211 (· log n)genişlemeΘ(n log² n)

(c) Durum 3'te düzenlilik: a · f(n/b) = n/2 ≤ ½ · n, k = ½ < 1 ✓. (d)'de her düzey n² iş yapar ve log₂ n düzey vardır. (e) temel üç duruma girmez; f(n) = Θ(n^log_b a · logᵏ n) ise T(n) = Θ(n^log_b a · logᵏ⁺¹ n).

Çoktan Seçmeli · Ana Teorem

Soru 24: Sekiz Alt Problem

T(n) = 8T(n/2) + n² bağıntısının çözümü nedir?

A: log₂ 8 = 3 > c = 2 → Durum 1 (yapraklar baskın): Θ(n^log₂ 8) = Θ(n³). Bu, matrisleri dörde bölüp 8 çarpım yapan böl ve fethet matris çarpımıdır; klasik üç döngüden daha iyi değildir. 7 çarpım yapan Strassen Θ(n^2,807) elde eder.

Çoktan Seçmeli · Ana Teorem

Soru 25: Kök Baskın

T(n) = 2T(n/2) + n² için hangisi doğrudur?

C: c = 2 > log₂ 2 = 1 → Durum 3 (kök baskın). Düzenlilik: 2 · (n/2)² = n²/2 ≤ ½ · n², k = ½ < 1. Seviye toplamları n², n²/2, n²/4, … azalan geometrik seri oluşturur; toplam 2n²'yi aşmaz → Θ(n²). A'da durum koşulu ters okunmuştur.

Çoktan Seçmeli · Ana Teorem

Soru 26: Uygulanamayan Bağıntı

Aşağıdaki bağıntılardan hangisine ana teoremin (temel biçimiyle) üç durumundan hiçbiri uygulanamaz?

C: n^log₂ 2 = n ile f(n) = n / log n karşılaştırılır: f(n) n'den küçüktür ama yalnızca log çarpanı kadar, polinom (n^ε) kadar değil; ne Durum 1 ne Durum 2'ye uyar. A: Durum 1 → Θ(n²); B: Durum 3 → Θ(n²); D: log₄ 16 = 2 = c → Durum 2 → Θ(n² log n).

Adım Adım Çalıştırma · Uygulama: f4 ve f5

Soru 27: f4(4) Özyineleme Ağacı

f4(4) çağrısında özyineleme ağacı hangi sırayla oluşur, kaç çağrı yapılır ve sonuç nedir?

f4(4)

f4(4): 4 > 1 → satır 5'te önce soldaki f4(4 / 2) = f4(2) çağrılır.

f4(2)f4(4)

f4(2): 2 > 1 → f4(1) çağrılır.

f4(2)f4(1)=1f4(4)

f4(1): taban durum, 1 döner.

f4(2)=2f4(1)=1f4(1)=1f4(4)

İkinci f4(1) de 1 döner → f4(2) = 1 + 1 = 2.

f4(4)f4(2)=2f4(1)=1f4(1)=1f4(2)

f4(4) sağdaki f4(2)'yi çağırır: aynı alt ağaç ikinci kez açılır.

f4(1)=1f4(1)=1f4(4)f4(2)=2f4(1)=1f4(1)=1f4(2)=2

İki f4(1) daha → bu f4(2) de 2 döner.

f4(1)=1f4(1)=1f4(4)=4f4(2)=2f4(1)=1f4(1)=1f4(2)=2

f4(4) = 2 + 2 = 4. Toplam 7 = 2n − 1 çağrı; seviye işleri c, 2c, 4c: yapraklar baskın → Θ(n). Yığın derinliği yalnızca log₂ n + 1 = 3.

public int f4(int n) {
  if (n <= 1) {
    return 1;
  }
  return f4(n / 2) + f4(n / 2);
}

Çoktan Seçmeli · Uygulama: f4 ve f5

Soru 28: f4 İçin Sık Hata

f4 (T(n) = 2T(n/2) + O(1)) için hangisi doğrudur?

D: Ana teoremde log₂ 2 = 1 > 0 → Durum 1 → Θ(n). Özyineleme ağacında 1 + 2 + 4 + … + n = 2n − 1 düğüm vardır. log n yalnızca yığın derinliği, yani bellek karmaşıklığıdır. Θ(2ⁿ) girdi n − 1 olsaydı (f3) doğru olurdu.

Çıktı Sorusu · Uygulama: f4 ve f5

Soru 29: f5 Değerleri

f5(4) ve f5(32) ne döndürür? (f1(n), n döndürür.) Sonucu n log₂ n + n ile karşılaştırın.

public int f5(int n) {
  if (n <= 1) {
    return 1;
  }
  return f1(n) + f5(n / 2) + f5(n / 2);
}
Cevabı göster
  • f5(1) = 1, f5(2) = 2 + 1 + 1 = 4
  • f5(4) = 4 + 4 + 4 = 12 = 4 · 2 + 4
  • f5(8) = 32, f5(16) = 80 → f5(32) = 32 + 80 + 80 = 192 = 32 · 5 + 32

n = 2ᵏ için f5(n) = n log₂ n + n: log₂ n seviyenin her biri n iş yapar, yapraklar da n. T(n) = 2T(n/2) + Θ(n) → Durum 2 → Θ(n log n).

Adım Adım Çalıştırma · Amortize Analiz

Soru 30: Dinamik Dizi: 9 Ekleme

Kapasitesi 1 olan ve dolunca iki katına büyüyen boş diziye 9 öğe ekleniyor. Her eklemenin maliyeti (yazma + kopya) ve toplam maliyet nedir?

kapasite 1e1

1. ekleme: kapasite 1, dizi boş → 1 yazma. Maliyet = yazma + kopyalanan öğe sayısı.

kapasite 2e1e2

2. ekleme: dizi doluydu → kapasite 1 → 2, 1 kopya + 1 yazma = 2.

kapasite 4e1e2e3

3. ekleme: dizi doluydu → kapasite 2 → 4, 2 kopya + 1 yazma = 3.

kapasite 4e1e2e3e4

4. ekleme: yer var → yalnızca 1 yazma.

kapasite 8e1e2e3e4e5

5. ekleme: dizi doluydu → kapasite 4 → 8, 4 kopya + 1 yazma = 5.

kapasite 8e1e2e3e4e5e6

6. ekleme: yer var → yalnızca 1 yazma.

kapasite 8e1e2e3e4e5e6e7

7. ekleme: yer var → yalnızca 1 yazma.

kapasite 8e1e2e3e4e5e6e7e8

8. ekleme: yer var → yalnızca 1 yazma.

kapasite 16e1e2e3e4e5e6e7e8e9

9. ekleme: dizi doluydu → kapasite 8 → 16, 8 kopya + 1 yazma = 9. Toplam 24 < 3 · 9 = 27 → ekleme başına amortize Θ(1).

void ekle(int x) {
  if (boyut == veri.length) {
    int[] yeni = new int[2 * veri.length];
    for (int i = 0; i < boyut; i++)
      yeni[i] = veri[i];   // kopya
    veri = yeni;
  }
  veri[boyut++] = x;       // yazma
}

Çıktı Sorusu · Amortize Analiz

Soru 31: 17 Ekleme

Aynı dinamik diziye (kapasite 1'den başlar, dolunca iki katına çıkar) 17 öğe eklenirse toplam kaç kopya ve kaç yazma yapılır, son kapasite kaçtır? Ekleme başına ortalama maliyet nedir?

Cevabı göster

Büyütmeler 2., 3., 5., 9. ve 17. eklemelerde olur; kopyalar 1 + 2 + 4 + 8 + 16 = 31.

Yazma 17, toplam 48 < 3 · 17 = 51; son kapasite 32. Ortalama 48 / 17 ≈ 2,8 → amortize Θ(1).

17. ekleme tek başına 17 birim (16 kopya + 1 yazma) sürer: tek bir işlemin en kötü durumu Θ(n)'dir. Amortize analiz olasılık kullanmaz; her işlem dizisi için garanti verir.

ekleme başına maliyet1122331551119911111111717

Çoktan Seçmeli · Amortize Analiz

Soru 32: Amortize ve Ortalama

Amortize analiz ile ortalama durum analizi arasındaki fark hangisidir?

A: Amortize maliyet, en kötü durumdaki bir işlem dizisinin toplamı / işlem sayısıdır; girdi dağılımı varsayımı yoktur. Ortalama durum ise girdilerin bir olasılık dağılımı üzerinden beklenen süredir (D bu yüzden yanlıştır). Dinamik dizide tek ekleme Θ(n) olabilir, amortize maliyet ise Θ(1)'dir.

Son

Bölüm 1.2: Algoritma Karmaşıklığı: Çalışma Soruları
Konu anlatımı: Bölüm 1.2: Algoritma Karmaşıklığı sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.