Bölüm 7: Yaklaşım Algoritmaları

Bölüm 7: Yaklaşım Algoritmaları · Çalışma Soruları
Yaklaşım oranıGezgin satıcı2-opt yerel aramaİş çizelgelemeDüğüm kapsamaSırt çantasıPower Iteration
Sercan KÜLCÜ

Ç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.

abcdeağırlık ρn + 1kalın: Hamilton çevrimi, n kenar × 1 = 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?

01234

Başlangıç şehri 0 ziyaret edildi; tur = [0], toplam = 0. Matris simetrik ama metrik değil.

342701234

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).

201234

tur[1] = 3, toplam += 2 → 2; artık simdiki = 3.

265601234

k = 2: 3. satırda ziyaret edilmemişler: d[3][1] = 6, d[3][2] = 5, d[3][4] = 6 → en küçüğü 2 (5).

2501234

tur[2] = 2, toplam += 5 → 7; artık simdiki = 2.

254801234

k = 3: 2. satırda ziyaret edilmemişler: d[2][1] = 4, d[2][4] = 8 → en küçüğü 1 (4).

25401234

tur[3] = 1, toplam += 4 → 11; artık simdiki = 1.

254301234

k = 4: 1. satırda ziyaret edilmemişler: d[1][4] = 3 → en küçüğü 4 (3).

254301234

tur[4] = 4, toplam += 3 → 14; artık simdiki = 4.

2543701234

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?

4263801234
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?

342532ABCDEFG
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(0,0)b(6,8)c(6,0)d(0,8)

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}

0011524334256677tur[2..5] ters çevrildi
  • 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?

M0M1M2036912

Üç özdeş makine boş: yuk = [0, 0, 0]. İşler sırayla p = [5, 3, 4, 6, 2, 7].

M0M1M2J1(5)036912

J1 (süre 5): eşit yüklerde ilk makine kalır → yuk[0] = 0 + 5 = 5.

M0M1M2J1(5)J2(3)036912

J2 (süre 3): en az yüklü makine M1 (0) → yuk[1] = 0 + 3 = 3.

M0M1M2J1(5)J2(3)J3(4)036912

J3 (süre 4): en az yüklü makine M2 (0) → yuk[2] = 0 + 4 = 4.

M0M1M2J1(5)J2(3)J3(4)J4(6)036912

J4 (süre 6): en az yüklü makine M1 (3) → yuk[1] = 3 + 6 = 9.

M0M1M2J1(5)J2(3)J3(4)J4(6)J5(2)036912

J5 (süre 2): en az yüklü makine M2 (4) → yuk[2] = 4 + 2 = 6.

M0M1M2J1(5)J2(3)J3(4)J4(6)J5(2)J6(7)036912

J6 (süre 7): en az yüklü makine M0 (5) → yuk[0] = 5 + 7 = 12.

M0M1M2J1(5)J2(3)J3(4)J4(6)J5(2)J6(7)036912

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.

M0M1M27654329

Ç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?

–t=0–t=1–t=2–t=3–t=4–t=5

İşler zaten kâra göre azalan sırada. n = 6 dilim açılır, hepsi −1 (boş); dilim[t], t + 1. zaman birimidir.

–t=0–t=1İş 1t=2–t=3–t=4–t=5

İş 1 (kâr 35, son 3): t = min(6, 3) − 1 = 2, dilim boş → yerleşir, toplamKar = 35.

–t=0–t=1İş 1t=2İş 2t=3–t=4–t=5

İş 2 (kâr 30, son 4): t = min(6, 4) − 1 = 3, dilim boş → yerleşir, toplamKar = 65.

–t=0İş 3t=1İş 1t=2İş 2t=3–t=4–t=5

İş 3 (kâr 25, son 4): t = 3, 2 dolu, geriye gidilir; t = 1 boş → yerleşir, toplamKar = 90.

İş 4t=0İş 3t=1İş 1t=2İş 2t=3–t=4–t=5

İş 4 (kâr 20, son 2): t = 1 dolu, geriye gidilir; t = 0 boş → yerleşir, toplamKar = 110.

İş 4t=0İş 3t=1İş 1t=2İş 2t=3–t=4–t=5

İş 5 (kâr 15, son 3): t = 2, 1, 0 hepsi dolu, döngü t = −1 ile biter → iş atlanır.

İş 4t=0İş 3t=1İş 1t=2İş 2t=3–t=4–t=5

İş 6 (kâr 12, son 1): t = 0 hepsi dolu, döngü t = −1 ile biter → iş atlanır.

İş 4t=0İş 3t=1İş 1t=2İş 2t=3–t=4–t=5

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?

ABCDEF

Kapsama boş. Kenarlar sırayla: (A,B), (A,C), (B,D), (C,D), (C,E), (D,F), (E,F).

ABCDEF

(A, B): iki uç da kapsamada değil → A ve B eklenir. Kenar eşleştirmeye girer.

ABCDEF

(A, C): A zaten kapsamada → kenar kapsanmış, atlanır.

ABCDEF

(B, D): B zaten kapsamada → kenar kapsanmış, atlanır.

ABCDEF

(C, D): iki uç da kapsamada değil → C ve D eklenir. Kenar eşleştirmeye girer.

ABCDEF

(C, E): C zaten kapsamada → kenar kapsanmış, atlanır.

ABCDEF

(D, F): D zaten kapsamada → kenar kapsanmış, atlanır.

ABCDEF

(E, F): iki uç da kapsamada değil → E ve F eklenir. Kenar eşleştirmeye girer.

ABCDEF

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?

12345678

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?

my1y2y3y4y5
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ıraEşyaOranKararAğırlık
1E13,00alındı10
2E32,57sığmaz (17)10
3E22,50sığmaz (18)10
4E41,50alı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?

v₁xx₁x₂

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.

v₁yxx₁x₂

k = 0: y = A·x = (3,0000; 4,0000), ‖y‖ = 5,0000.

v₁xx₁x₂

Normalleştir: x = y / ‖y‖ = (0,6000; 0,8000). Uzunluk 1 olur.

v₁yxx₁x₂

k = 1: y = A·x = (2,0000; 3,0000), ‖y‖ = 3,6056 (= √13).

v₁xx₁x₂

Normalleştir: x = y / ‖y‖ = (0,5547; 0,8321). x, v₁'e yaklaşıyor.

v₁yxx₁x₂

k = 2: y = A·x = (1,9415; 3,0509), ‖y‖ = 3,6162.

v₁xx₁x₂

Normalleştir: x = y / ‖y‖ = (0,5369; 0,8437). x, v₁'e yaklaşıyor.

v₁xx₁x₂

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.

Son

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