Bölüm 11: Yaklaşım Algoritmaları
Çoktan Seçmeli · Yaklaşım Oranı
Soru 1: En Büyüklemede Garanti
Bir en büyükleme problemi (ör. sırt çantası) için 2-yaklaşım algoritması kullanılıyor. Bir girdinin optimal değeri C* = 90 ise algoritmanın bulduğu C değeri için kesin olarak ne söylenebilir?
C: En büyüklemede ρ-yaklaşım C ≥ C* / ρ demektir: C ≥ 90 / 2 = 45. Algoritma 45'ten iyi bir değer de bulabilir (C = 45 kesin değildir); C ≤ C* her zaman doğrudur ama 180'i aşamaz. C ≥ 180, en küçükleme formülünü (C ≤ ρ · C*) ters uygulamaktır.
Çoktan Seçmeli · Yaklaşım Oranı
Soru 2: Yaklaşım Türleri
Yaklaşım algoritmaları ve sezgiseller hakkında hangisi doğrudur?
B: FPTAS (ör. sırt çantası, O(n³/ε)) hem n hem 1/ε'da polinomdur. PTAS yalnızca n'de polinomdur, ε'da üstel olabilir (C ters). En yakın komşunun sabit oranı yoktur; metrikte bile Θ(log n) olabilir. 2-opt yalnızca yerel optimuma ulaşır.
Klasik Soru · Yaklaşım Oranı
Soru 3: Genel TSP'de Sabit Oran Yok
P ≠ NP ise genel (üçgen eşitsizliğini sağlamayan) TSP için hiçbir sabit ρ ≥ 1 ile polinom zamanlı ρ-yaklaşım algoritması olmadığını kanıt fikriyle açıklayın. Hamilton çevrimi problemini kullanın.
Cevabı göster
Varsayalım ki polinom zamanlı bir ρ-yaklaşım A var. n düğümlü G çizgesinden bir TSP örneği kurun: G'deki kenarlar ağırlık 1, G'de olmayan çiftler ağırlık ρn + 1.
- G'de Hamilton çevrimi varsa optimum tur n'dir; A en çok ρn uzunlukta tur verir. Bu tur ağır bir kenar kullanamaz (tek bir ağır kenar bile ρn + 1 > ρn eder), yani A'nın turu G'nin Hamilton çevrimidir.
- Hamilton çevrimi yoksa her tur en az bir ağır kenar içerir: uzunluk > ρn.
A'nın tur uzunluğuna bakarak (≤ ρn mi?) NP-tam Hamilton çevrimi problemi polinom zamanda çözülürdü → P = NP. Metrik TSP'de bu kurgu üçgen eşitsizliğini bozduğu için geçersizdir; orada 2 ve 1,5 oranları mümkündür.
Adım Adım Çalıştırma · Gezgin Satıcı
Soru 4: En Yakın Komşu İzleme
5 şehrin uzaklık matrisinin satırları: 0: (0 3 4 2 7) · 1: (3 0 4 6 3) · 2: (4 4 0 5 8) · 3: (2 6 5 0 6) · 4: (7 3 8 6 0). enYakinKomsu(d, 0) hangi turu ve uzunluğu bulur?
Başlangıç şehri 0 ziyaret edildi; tur = [0], toplam = 0. Matris simetrik ama metrik değil.
k = 1: 0. satırda ziyaret edilmemişler: d[0][1] = 3, d[0][2] = 4, d[0][3] = 2, d[0][4] = 7 → en küçüğü 3 (2).
tur[1] = 3, toplam += 2 → 2; artık simdiki = 3.
k = 2: 3. satırda ziyaret edilmemişler: d[3][1] = 6, d[3][2] = 5, d[3][4] = 6 → en küçüğü 2 (5).
tur[2] = 2, toplam += 5 → 7; artık simdiki = 2.
k = 3: 2. satırda ziyaret edilmemişler: d[2][1] = 4, d[2][4] = 8 → en küçüğü 1 (4).
tur[3] = 1, toplam += 4 → 11; artık simdiki = 1.
k = 4: 1. satırda ziyaret edilmemişler: d[1][4] = 3 → en küçüğü 4 (3).
tur[4] = 4, toplam += 3 → 14; artık simdiki = 4.
Başlangıca dönülür: toplam += d[4][0] = 7 → 21. Tur 0 → 3 → 2 → 1 → 4 → 0. Kaba kuvvetle optimum 19 (0 → 2 → 1 → 4 → 3 → 0): son dönüş kenarı (7) pahalı kaldı.
int[] enYakinKomsu(int[][] d, int bas) { int n = d.length, toplam = 0, simdiki = bas; boolean[] ziyaret = new boolean[n]; int[] tur = new int[n + 1]; tur[0] = bas; ziyaret[bas] = true; for (int k = 1; k < n; k++) { int enYakin = -1, enAz = Integer.MAX_VALUE; for (int j = 0; j < n; j++) if (!ziyaret[j] && d[simdiki][j] < enAz) { enAz = d[simdiki][j]; enYakin = j; } tur[k] = enYakin; ziyaret[enYakin] = true; toplam += enAz; simdiki = enYakin; } tur[n] = bas; toplam += d[simdiki][bas]; return tur; }
Çıktı Sorusu · Gezgin Satıcı
Soru 5: MST'den Tura
Metrik bir TSP örneğinde Prim ile bulunan minimum kapsayan ağaç şekildeki gibidir (w(T) = 19). Ağaç A'dan önce-kök (preorder) sırayla, çocuklar alfabetik sırada gezilip tekrar eden şehirler atlanıyor. Bulunan tur nedir? Tur uzunluğu ve optimum OPT için hangi sınırlar kesindir?
Cevabı göster
İki kez gezinme: A B D B E B A C F G F C A (uzunluk 2 · 19 = 38).
Kısayollu önce-kök turu: A → B → D → E → C → F → G → A.
- Bir turdan bir kenar silinince kapsayan ağaç kalır → w(T) = 19 ≤ OPT.
- Üçgen eşitsizliği kısayolların yolu uzatmamasını sağlar → tur ≤ 2 · w(T) = 38 ≤ 2 · OPT.
Yani 19 ≤ OPT ≤ tur ≤ 38. Turun gerçek uzunluğu kenar ağırlıkları dışındaki uzaklıklara (ör. E–C, G–A) bağlıdır; sınır yine de geçerlidir.
Çoktan Seçmeli · Gezgin Satıcı
Soru 6: Metrik TSP Sonuçları
TSP yaklaşım sonuçlarıyla ilgili hangisi yanlıştır?
D yanlıştır: en yakın komşu sezgiseldir; metrik durumda bile oranı Θ(log n) olabilir, sabit bir garanti yoktur. Christofides (MST + tek dereceli düğümlerde mükemmel eşleştirme) 1,5, MST tabanlı yöntem 2 verir; Öklid TSP'de Arora'nın PTAS'ı vardır.
Çoktan Seçmeli · Yerel Arama
Soru 7: 2-opt Kazancı
Turda (a, b) ve (c, d) kenarları var; noktalar a(0, 0), b(6, 8), c(6, 0), d(0, 8) ve uzaklık Öklid uzaklığıdır. 2-opt hamlesinin kazancı Δ = d(a,c) + d(b,d) − d(a,b) − d(c,d) kaçtır, hamle yapılır mı?
A: d(a,b) = d(c,d) = √(36 + 64) = 10, d(a,c) = d(b,d) = 6 → Δ = 6 + 6 − 10 − 10 = −8 < 0, tur 8 kısalır. Kesişen kenarlar (kesikli) kalın kenarlarla değişir. +8 işaret hatasıdır; −4, (a,d) ve (b,c) ile bağlamanın sonucudur (8 + 8 − 20).
Çıktı Sorusu · Yerel Arama
Soru 8: 2-opt Hamlesi Sonrası Tur
8 şehirli bir turda ikiOpt hamlesi i = 1, j = 5 için kabul ediliyor (tersCevir(tur, i + 1, j), iki sınır dahil ters çevirir). Hamleden önce tur = {0, 1, 2, 3, 4, 5, 6, 7} ise sonra tur nedir; hangi iki kenar çıkar, hangileri girer?
for (int i = 0; i < n - 1; i++) for (int j = i + 2; j < n; j++) { int a = tur[i], b = tur[i + 1]; int c = tur[j], e = tur[(j + 1) % n]; double fark = d[a][c] + d[b][e] - d[a][b] - d[c][e]; if (fark < -1e-9) { // kısalıyor tersCevir(tur, i + 1, j); iyilesti = true; } }
Cevabı göster
tur = {0, 1, 5, 4, 3, 2, 6, 7}
- a = tur[1] = 1, b = tur[2] = 2, c = tur[5] = 5, e = tur[6] = 6.
- Çıkan kenarlar: (1, 2) ve (5, 6); giren kenarlar: (1, 5) ve (2, 6).
- Aradaki 2 … 5 yolu ters yönde gezilir; simetrik TSP'de iç kenarların uzunluğu değişmez, bu yüzden kazanç yalnızca dört kenardan hesaplanır (O(1)).
Adım Adım Çalıştırma · İş Çizelgeleme
Soru 9: Liste Çizelgeleme İzleme
Graham'ın liste çizelgelemesi her işi o an en az yüklü makineye atar. listeCizelge(new int[]{5, 3, 4, 6, 2, 7}, 3) çağrısında yükler nasıl değişir, Cmax kaçtır?
Üç özdeş makine boş: yuk = [0, 0, 0]. İşler sırayla p = [5, 3, 4, 6, 2, 7].
J1 (süre 5): eşit yüklerde ilk makine kalır → yuk[0] = 0 + 5 = 5.
J2 (süre 3): en az yüklü makine M1 (0) → yuk[1] = 0 + 3 = 3.
J3 (süre 4): en az yüklü makine M2 (0) → yuk[2] = 0 + 4 = 4.
J4 (süre 6): en az yüklü makine M1 (3) → yuk[1] = 3 + 6 = 9.
J5 (süre 2): en az yüklü makine M2 (4) → yuk[2] = 4 + 2 = 6.
J6 (süre 7): en az yüklü makine M0 (5) → yuk[0] = 5 + 7 = 12.
Cmax = 12. Alt sınır: OPT ≥ Σp / m = 27 / 3 = 9; gerçekten {7, 2}, {5, 4}, {6, 3} ile OPT = 9. Oran 12/9 ≈ 1,33 ≤ 2 − 1/3.
int listeCizelge(int[] p, int m) { int[] yuk = new int[m]; // makine yükleri for (int j = 0; j < p.length; j++) { int enAz = 0; // ilk boşalan makine for (int i = 1; i < m; i++) if (yuk[i] < yuk[enAz]) enAz = i; yuk[enAz] += p[j]; } int cmax = 0; for (int y : yuk) cmax = Math.max(cmax, y); return cmax; }
Çıktı Sorusu · İş Çizelgeleme
Soru 10: LPT Sırası
İşler (5, 3, 4, 6, 2, 7) ve m = 3 için önce süreye göre azalan sıralanıp sonra listeCizelge çağrılıyor (LPT). Makine yükleri ve Cmax nedir? Liste çizelgelemeyle karşılaştırın.
Cevabı göster
Sıra 7, 6, 5, 4, 3, 2:
- 7 → M0, 6 → M1, 5 → M2 (yükler 7, 6, 5)
- 4 → M2 (5) → 9; 3 → M1 (6) → 9; 2 → M0 (7) → 9
Yükler [9, 9, 9], Cmax = 9 = OPT (alt sınır 27/3 = 9). Verilen sırayla liste çizelgeleme 12 bulur (yükler [12, 9, 6]): sona kalan uzun iş (7) dengesizlik yarattı. LPT'de kısa işler sonda dengesizliği düzeltir; oran ≤ 4/3 − 1/(3m) = 11/9.
Çoktan Seçmeli · İş Çizelgeleme
Soru 11: Liste Çizelgelemenin Oranı
m = 4 özdeş makinede liste çizelgeleme (işler verildiği sırayla) hangi yaklaşım oranını garanti eder?
A: Liste çizelgeleme (2 − 1/m)-yaklaşımdır: 2 − 1/4 = 1,75. 1,25, LPT'nin m = 4 için sınırıdır (4/3 − 1/12); 1,33 m'den bağımsız 4/3'tür; 2,00 m → ∞ limitidir.
Adım Adım Çalıştırma · Düğüm Kapsama
Soru 12: Düğüm Kapsama 2-Yaklaşımı
dugumKapsama şekildeki çizgenin kenarlarını verilen sırayla işliyor. Kapsama kümesi nasıl büyür; sonuç optimumla karşılaştırıldığında nasıldır?
Kapsama boş. Kenarlar sırayla: (A,B), (A,C), (B,D), (C,D), (C,E), (D,F), (E,F).
(A, B): iki uç da kapsamada değil → A ve B eklenir. Kenar eşleştirmeye girer.
(A, C): A zaten kapsamada → kenar kapsanmış, atlanır.
(B, D): B zaten kapsamada → kenar kapsanmış, atlanır.
(C, D): iki uç da kapsamada değil → C ve D eklenir. Kenar eşleştirmeye girer.
(C, E): C zaten kapsamada → kenar kapsanmış, atlanır.
(D, F): D zaten kapsamada → kenar kapsanmış, atlanır.
(E, F): iki uç da kapsamada değil → E ve F eklenir. Kenar eşleştirmeye girer.
Sonuç 6 düğüm (tümü). Optimum 3: {A, D, E} (yeşil). Oran 6/3 = 2: sınır bu girdide sıkı. Seçilen kenarlar (A,B), (C,D), (E,F) ortak ucu olmayan bir eşleştirmedir.
Set<Character> dugumKapsama(char[][] kenarlar) { Set<Character> kapsama = new HashSet<>(); for (char[] k : kenarlar) { char u = k[0], v = k[1]; if (!kapsama.contains(u) && !kapsama.contains(v)) { kapsama.add(u); kapsama.add(v); } // iki uç } return kapsama; }
Çoktan Seçmeli · Düğüm Kapsama
Soru 13: Yolda Kenar Sırası
1–2–3–4–5–6–7–8 yolunun kenarları dugumKapsama'ya şu sırayla veriliyor: (2,3), (4,5), (6,7), (1,2), (3,4), (5,6), (7,8). Algoritma kaç düğüm seçer ve optimum kaçtır?
C: (2,3), (4,5), (6,7) seçilir → {2, 3, 4, 5, 6, 7}; kalan dört kenarın birer ucu zaten kapsamada. Optimum 4'tür (ör. {2, 4, 6, 7}); 7 kenarlı yolda 3 düğüm en çok 6 kenar kapsar. 8 düğüm, kenarlar yol sırasıyla verilseydi çıkardı: (1,2), (3,4), (5,6), (7,8).
Çoktan Seçmeli · Düğüm Kapsama
Soru 14: 3-SAT'tan İndirgeme
3-SAT → düğüm kapsama indirgemesinde (her değişkene bir kenar, her tümceye bir üçgen) formülde l = 3 değişken ve m = 4 tümce varsa aranan kapsama boyutu k kaçtır?
C: k = l + 2m = 3 + 8 = 11: her değişken kenarından bir uç, her tümce üçgeninden iki düğüm. 7 = l + m (üçgenden tek düğüm sanmak), 15 = l + 3m (üçgenin hepsi), 14 = 2l + 2m. Çizgede 2l + 3m = 18 düğüm vardır.
Çıktı Sorusu · Sırt Çantası
Soru 15: Oran Sıralı Açgözlü
Kapasite W = 15. Eşyalar (değer, ağırlık): E1 (30, 10), E2 (20, 8), E3 (18, 7), E4 (6, 4). Değer/ağırlık oranına göre azalan sırayla sığanı al kuralı hangi eşyaları alır ve toplam değer kaçtır? Optimum ve iyileştirilmiş kural max(açgözlü, en değerli tek eşya) ne verir?
Cevabı göster
| Sıra | Eşya | Oran | Karar | Ağırlık |
|---|---|---|---|---|
| 1 | E1 | 3,00 | alındı | 10 |
| 2 | E3 | 2,57 | sığmaz (17) | 10 |
| 3 | E2 | 2,50 | sığmaz (18) | 10 |
| 4 | E4 | 1,50 | alındı | 14 |
Açgözlü: E1 + E4 = 36. Optimum (DP): E2 + E3 = 38 (ağırlık 15, tam dolu).
İyileştirilmiş kural: max(36, 30) = 36 ≥ 38/2 → 2-yaklaşım garantisi sağlanır. 0/1 sürümde oran sıralaması optimal değildir; kesirli sürümde optimaldir (E1 + 5/7 · E3 = 30 + 12,86 = 42,86).
Çoktan Seçmeli · Sırt Çantası
Soru 16: İyileştirilmiş Kural
W = 20; eşyalar (değer, ağırlık): (3, 1) ve (20, 20). Oran sıralı açgözlü ile max(açgözlü değer, sığan en değerli tek eşya) kuralı sırasıyla hangi değerleri bulur?
D: Oranlar 3 ve 1; açgözlü önce (3, 1)'i alır, (20, 20) artık sığmaz → 3. İyileştirilmiş kural max(3, 20) = 20 = optimum. 23 iki eşyanın birlikte alınmasıdır (ağırlık 21 > 20). Bu örnekte saf açgözlünün oranı 20/3 olur; W büyüdükçe sınırsız kötüleşir.
Adım Adım Çalıştırma · Power Iteration
Soru 17: Kuvvet Yinelemesi İzleme
kuvvet(new double[][]{{2, 1}, {1, 3}}, 3) çağrısında her adımda y, ‖y‖ ve x nasıl değişir?
A = [[2, 1], [1, 3]], x = [1, 1] (şekilde yön olarak). Baskın özvektör v₁ ≈ (0,526; 0,851), λ₁ = (5 + √5)/2 ≈ 3,618.
k = 0: y = A·x = (3,0000; 4,0000), ‖y‖ = 5,0000.
Normalleştir: x = y / ‖y‖ = (0,6000; 0,8000). Uzunluk 1 olur.
k = 1: y = A·x = (2,0000; 3,0000), ‖y‖ = 3,6056 (= √13).
Normalleştir: x = y / ‖y‖ = (0,5547; 0,8321). x, v₁'e yaklaşıyor.
k = 2: y = A·x = (1,9415; 3,0509), ‖y‖ = 3,6162.
Normalleştir: x = y / ‖y‖ = (0,5369; 0,8437). x, v₁'e yaklaşıyor.
3 adımda x ≈ (0,5369; 0,8437) ≈ v₁; ‖A·x‖ tahmini 5 → 3,606 → 3,616 → λ₁ = 3,618'e yaklaşır. Hata her adımda ≈ λ₂/λ₁ = 1,382/3,618 ≈ 0,38 katına iner.
double[] kuvvet(double[][] a, int adim) { int n = a.length; double[] x = new double[n]; Arrays.fill(x, 1.0); // x₀ ≠ 0 for (int k = 0; k < adim; k++) { double[] y = new double[n]; for (int i = 0; i < n; i++) // y = A·x for (int j = 0; j < n; j++) y[i] += a[i][j] * x[j]; double norm = 0; for (double yi : y) norm += yi * yi; norm = Math.sqrt(norm); for (int i = 0; i < n; i++) // ‖x‖ = 1 x[i] = y[i] / norm; } return x; }
Çoktan Seçmeli · Power Iteration
Soru 18: En Hızlı Yakınsama
Dört simetrik matrisin mutlak değerce en büyük iki özdeğeri (λ₁, λ₂) verilmiştir. Power Iteration hangisinde en hızlı yakınsar?
B: Hata her adımda ≈ |λ₂ / λ₁| katına iner: 0,9; 0,25; 0,97; 0,6. En küçük oran 0,25 → en hızlı. Büyük λ₁ (100) tek başına hız getirmez; önemli olan oran. Negatif λ₂'de mutlak değer alınır: |−2,9 / 3| ≈ 0,97 çok yavaştır.