Bölüm 7: Yaklaşım Algoritmaları
Çoktan Seçmeli · Yaklaşım Oranı
Soru 1: Oranı Hesapla
Bir en küçükleme probleminde yaklaşım algoritması bir girdi için maliyeti 36 olan bir çözüm buluyor; aynı girdinin optimal maliyeti 24'tür. Bu girdi için yaklaşım oranı max(C / C*, C* / C) kaçtır?
C: C / C* = 36 / 24 = 1,5 ve C* / C = 0,67; büyüğü alınır, oran her zaman ≥ 1'dir. 0,67 oranı ters yazmaktır, 0,50 ise göreli hatadır ((36 − 24) / 24). 2,00, düğüm kapsama gibi bir algoritmanın genel garantisidir; bu girdideki oran değildir.
Çoktan Seçmeli · Yaklaşım Oranı
Soru 2: 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 3: 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 4: 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 5: 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 6: Başka Bir Başlangıç Şehri
Önceki sorudaki aynı 5 şehirlik matriste en yakın komşu sezgiseli bu kez enYakinKomsu(d, 2) ile 2 numaralı şehirden başlatılıyor. Bulunan tur ve uzunluğu nedir? Başlangıç şehri seçimi hakkında ne söyler?
Cevabı göster
Tur: 2 → 0 → 3 → 1 → 4 → 2, uzunluk 4 + 2 + 6 + 3 + 8 = 23.
- 2. satır: d[2][0] = 4, d[2][1] = 4 eşit;
<karşılaştırması ilk bulunanı (0) korur. - 0 → 3 (2), 3'ten kalanlar 1 (6) ve 4 (6) eşit → 1; 1 → 4 (3); dönüş d[4][2] = 8.
0'dan başlayınca 21, 2'den başlayınca 23; optimum 19. Sezgisel başlangıca duyarlıdır: pratikte tüm başlangıçlar denenip en iyisi alınır (O(n³)), ama yine de oran garantisi yoktur.
Çoktan Seçmeli · Gezgin Satıcı
Soru 7: Kaba Kuvvet Tur Sayısı
Simetrik TSP'de başlangıç şehri sabitlenip iki yön aynı tur sayılırsa, 7 şehir için kaba kuvvet kaç farklı turu denemelidir?
D: (n − 1)! / 2 = 6! / 2 = 720 / 2 = 360. 720 iki yönü ayrı sayar, 5040 = 7! başlangıcı da sabitlemez, 2520 = 7!/2 yalnızca yönü eler. Held–Karp DP bile O(n² · 2ⁿ) sürer.
Çıktı Sorusu · Gezgin Satıcı
Soru 8: 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 9: 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 10: 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 11: 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)).
Çoktan Seçmeli · Yerel Arama
Soru 12: Yerel Optimum
2-opt yerel araması için hangisi doğrudur?
B: Kesişen iki kenar her zaman Δ < 0 veren bir hamle demektir; döngü iyileşme kalmayınca durduğu için kesişme kalmaz. Ama bu yerel optimumdur, genel optimum olması gerekmez (A yanlış). Bir taramada O(n²) aday vardır ve tarama sayısı en kötü durumda üstel olabilir. D benzetimli tavlamanın özelliğidir.
Adım Adım Çalıştırma · İş Çizelgeleme
Soru 13: 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 14: LPT Sırası
Aynı iş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 12 bulunmuştu: 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 15: 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 · İş Çizelgeleme
Soru 16: Son Tarihli İş Sıralama
İşler (no: kâr, son tarih): 1: (35, 3), 2: (30, 4), 3: (25, 4), 4: (20, 2), 5: (15, 3), 6: (12, 1); her iş 1 birim sürer. isSirala hangi dilimleri doldurur, toplam kâr kaçtır?
İşler zaten kâra göre azalan sırada. n = 6 dilim açılır, hepsi −1 (boş); dilim[t], t + 1. zaman birimidir.
İş 1 (kâr 35, son 3): t = min(6, 3) − 1 = 2, dilim boş → yerleşir, toplamKar = 35.
İş 2 (kâr 30, son 4): t = min(6, 4) − 1 = 3, dilim boş → yerleşir, toplamKar = 65.
İş 3 (kâr 25, son 4): t = 3, 2 dolu, geriye gidilir; t = 1 boş → yerleşir, toplamKar = 90.
İş 4 (kâr 20, son 2): t = 1 dolu, geriye gidilir; t = 0 boş → yerleşir, toplamKar = 110.
İş 5 (kâr 15, son 3): t = 2, 1, 0 hepsi dolu, döngü t = −1 ile biter → iş atlanır.
İş 6 (kâr 12, son 1): t = 0 hepsi dolu, döngü t = −1 ile biter → iş atlanır.
Sıra: iş 4, iş 3, iş 1, iş 2; toplam kâr 110. İş 5 ve 6'nın son tarihlerinden önce yer kalmadı (son 2 dilim boş kaldı).
int[] isSirala(Is[] isler) { Arrays.sort(isler, (a, b) -> b.kar - a.kar); int n = isler.length, toplamKar = 0; int[] dilim = new int[n]; Arrays.fill(dilim, -1); // -1: boş for (Is is : isler) { int t = Math.min(n, is.sonTarih) - 1; for (; t >= 0; t--) if (dilim[t] == -1) { dilim[t] = is.no; toplamKar += is.kar; break; } } return dilim; }
Çıktı Sorusu · İş Çizelgeleme
Soru 17: Açgözlü İş Sıralama Kârı
İşler (kâr, son tarih): a(90, 2), b(20, 1), c(40, 2), d(30, 1), e(10, 3). isSirala hangi sırayı ve toplam kârı bulur? İşler kâr yerine son tarihe göre sıralansaydı ne olurdu?
Cevabı göster
Kâr sırası a, c, d, b, e:
- a → t = 1; c → t = 1 dolu → t = 0.
- d ve b (son tarih 1): tek dilim t = 0 dolu → atlanır.
- e → t = 2.
Sıra c, a, e, toplam kâr 140 (optimum). Son tarih sırası (b, d, a, c, e) b → t = 0, d atlanır, a → t = 1, c atlanır, e → t = 2: yalnızca 20 + 90 + 10 = 120. Açgözlü kural kâr sırasıdır; son tarih yalnızca dilim seçiminde kullanılır.
Klasik Soru · İş Çizelgeleme
Soru 18: Sıkı Örnek: 5/3
m = 3 makinede liste çizelgelemenin tam (2 − 1/m) = 5/3 oranına ulaştığı bir iş listesi kurun; liste çizelgesini ve optimum çizelgeyi gösterin. Neden genel sınır (2 − 1/m) · OPT'dir?
Cevabı göster
Altı adet 1 birimlik iş, en sonda bir 3 birimlik iş: (1, 1, 1, 1, 1, 1, 3).
- Liste: altı kısa iş makinelere 2'şer düşer (yükler 2, 2, 2); 3'lük iş bir makineye eklenir → Cmax = 5.
- Optimum: {3} | {1, 1, 1} | {1, 1, 1} → 3. Oran 5/3.
Genel kanıt: en son biten iş j, sj anında başlasın. O ana kadar tüm makineler meşguldü: sj ≤ (Σp − pj) / m. Cmax = sj + pj ≤ Σp/m + (1 − 1/m) pj ≤ OPT + (1 − 1/m) OPT, çünkü OPT ≥ Σp/m ve OPT ≥ max p. Genelde m(m − 1) kısa iş + sonda m birimlik iş sınırı sıkı yapar.
Adım Adım Çalıştırma · Düğüm Kapsama
Soru 19: 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 20: 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).
Çıktı Sorusu · Düğüm Kapsama
Soru 21: Yıldız Çizgede İki Kural
Merkezi m olan 5 yapraklı yıldızın kenarları (m, y1), …, (m, y5) sırasıyla işleniyor. (a) Kapsanmamış her kenarın yalnızca ikinci ucunu (yaprağı) ekleyen saf kural ve (b) iki ucu da ekleyen 2-yaklaşım kaç düğüm seçer? Optimum kaçtır?
Cevabı göster
- (a) Saf kural: her kenar kapsanmamış kalır, yaprağı eklenir → 5 düğüm {y1, …, y5}.
- (b) 2-yaklaşım: (m, y1) ile m ve y1 eklenir; m tüm kenarları kapsar → 2 düğüm.
- Optimum: yalnızca {m} → 1.
Saf kuralın oranı n yapraklı yıldızda n olur, sınırsız büyür. İki ucu eklemek seçilen kenarları eşleştirme yapar ve |C| = 2|M| ≤ 2 · OPT garantisini verir (burada 2/1 = 2).
Klasik Soru · Düğüm Kapsama
Soru 22: Neden 2 × OPT?
Kenar seçip iki ucu ekleyen düğüm kapsama algoritmasının çıktısının en çok optimumun iki katı olduğunu kanıtlayın. Süre karmaşıklığı nedir? Neden "en yüksek dereceli düğümü seç" sezgiseli aynı garantiyi vermez?
Cevabı göster
Algoritmanın seçtiği kenarlar M olsun. Bir kenar seçildiğinde iki ucu da eklendiği için sonraki seçilen kenarlar bu uçlara değemez: M bir eşleştirmedir (ortak ucu olmayan kenarlar).
- Her kapsama M'deki her kenardan en az bir ucu içermelidir ve bu uçlar farklıdır → OPT ≥ |M|.
- Algoritma tam |C| = 2|M| düğüm seçer → |C| ≤ 2 · OPT.
- Her kenar bir kez incelenir: O(V + E).
En yüksek dereceli düğüm sezgiseli sezgisel olarak iyi görünse de oranı yalnızca O(log n)'dir; bazı çizgelerde optimumdan logaritmik kat kötü olur.
Çoktan Seçmeli · Düğüm Kapsama
Soru 23: 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 24: 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 25: İ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 26: 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; }
Çıktı Sorusu · Power Iteration
Soru 27: Kaç Adımda Yakınsar?
A = [[2, 0], [0, 1]] ve x₀ = (1, 1) için kuvvet yinelemesi uygulanıyor. xk'nın ikinci bileşeni birincisinin %1'inden küçük olana kadar en az kaç adım gerekir? Bu sayı neye bağlıdır?
double[][] a = {{2, 0}, {0, 1}}; double[] x = {1, 1}; for (int k = 1; ; k++) { x = new double[]{2 * x[0], x[1]}; double nr = Math.hypot(x[0], x[1]); x[0] /= nr; x[1] /= nr; if (x[1] < 0.01 * x[0]) { System.out.println(k); break; } }
Cevabı göster
Ak x₀ = (2k, 1); normalleştirme oranı değiştirmez → x₂ / x₁ = 2−k.
- 2−k < 0,01 ⇔ 2k > 100 → 2⁶ = 64 yetmez, 2⁷ = 128 → k = 7.
- Hata her adımda |λ₂ / λ₁| = 1/2 katına iner: doğrusal (geometrik) yakınsama.
Oran 1'e yaklaştıkça (ör. λ₁ = 10, λ₂ = 9 → 0,9) aynı doğruluk için ≈ 44 adım gerekir (0,944 ≈ 0,0097).
Çoktan Seçmeli · Power Iteration
Soru 28: 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.
Çoktan Seçmeli · Power Iteration
Soru 29: Normalleştirme Unutulursa
Power Iteration kodunda x[i] = y[i] / norm yerine x[i] = y[i] yazılırsa (normalleştirme yok) |λ₁| > 1 olan bir matriste ne olur?
A: Ak x₀ ≈ λ₁k c₁ v₁ büyür; yön v₁'e yaklaşsa da sayılar taşar (|λ₁| < 1 ise sıfıra iner). Normalleştirme yalnızca uzunluğu 1 yapar, yönü değiştirmez. En küçük özdeğer için ters yineleme (A⁻¹) gerekir.