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

Bölüm 11: 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: 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.

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

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

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 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(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 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}

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

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?

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

M0M1M27654329

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

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

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

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

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;
}

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

Son

Bölüm 11: 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.