Bölüm 1.2: Algoritma Karmaşıklığı
Ç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 = 0 | 1 | 1 |
| i < a.length | 4 | n + 1 = 11 |
| a[i] == hedef | 4 | n = 10 |
| i++ | 3 | n = 10 |
| return | 1 | 1 |
| Toplam | 13 | 33 = 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.
| n | 3n² | f(n) | |
|---|---|---|---|
| 7 | 147 | 150 | ✗ |
| 8 | 192 | 187 | ✓ |
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.
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?
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 = 0: j < 0 hemen yanlış → iç döngü 0 kez döner; x = 0.
i = 1: iç döngü i · i = 1 kez döner → x = 1.
i = 2: iç döngü i · i = 4 kez döner → x = 5.
i = 3: iç döngü i · i = 9 kez döner → x = 14.
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?
n = 10, sayac = 0. Dış döngü i'yi her turda ikiye katlar: 1, 2, 4, 8, …
i = 1 < 10 → iç döngü 1 kez döner; sayac = 1.
i = 2 < 10 → iç döngü 2 kez döner; sayac = 3.
i = 4 < 10 → iç döngü 4 kez döner; sayac = 7.
i = 8 < 10 → iç döngü 8 kez döner; sayac = 15.
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?
g(4) çağrıldı: 4 ≤ 1 değil → satır 5'te tek bir çağrı: g(3). Sonuç 2 ile çarpılacak.
g(3) → g(2) çağrısı. Her düzeyde yalnızca bir yeni çerçeve açılır.
g(2) → g(1) çağrısı. Her düzeyde yalnızca bir yeni çerçeve açılır.
g(1): n ≤ 1 → taban durum, 1 döner. Yığında 4 çerçeve: derinlik n.
g(2) = 2 · 1 = 2 döner.
g(3) = 2 · 2 = 4 döner.
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, b | log_b a | c | Durum | Sonuç | |
|---|---|---|---|---|---|
| (a) | 3, 3 | 1 | 1 | 2 | Θ(n log n) |
| (b) | 9, 3 | 2 | 1 | 1 | Θ(n²) |
| (c) | 1, 2 | 0 | 1 | 3 | Θ(n) |
| (d) | 4, 2 | 2 | 2 | 2 | Θ(n² log n) |
| (e) | 2, 2 | 1 | 1 (· 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): 4 > 1 → satır 5'te önce soldaki f4(4 / 2) = f4(2) çağrılır.
f4(2): 2 > 1 → f4(1) çağrılır.
f4(1): taban durum, 1 döner.
İkinci f4(1) de 1 döner → f4(2) = 1 + 1 = 2.
f4(4) sağdaki f4(2)'yi çağırır: aynı alt ağaç ikinci kez açılır.
İki f4(1) daha → bu f4(2) de 2 döner.
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?
1. ekleme: kapasite 1, dizi boş → 1 yazma. Maliyet = yazma + kopyalanan öğe sayısı.
2. ekleme: dizi doluydu → kapasite 1 → 2, 1 kopya + 1 yazma = 2.
3. ekleme: dizi doluydu → kapasite 2 → 4, 2 kopya + 1 yazma = 3.
4. ekleme: yer var → yalnızca 1 yazma.
5. ekleme: dizi doluydu → kapasite 4 → 8, 4 kopya + 1 yazma = 5.
6. ekleme: yer var → yalnızca 1 yazma.
7. ekleme: yer var → yalnızca 1 yazma.
8. ekleme: yer var → yalnızca 1 yazma.
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.
Ç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.