Bölüm 7: Yakınsama Algoritmaları

Algoritmalar
Yaklaşım oranıSeyahat eden satıcı (TSP)En yakın komşu ve MST2-opt yerel arama İş çizelgelemeDüğüm kapsamaSırt çantasıPower Iteration
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Giriş

Öğrenme Çıktıları

Kavram

Yakınsama (approximation) algoritmasının ne olduğunu, yaklaşım oranını ve sezgisel yöntemlerden farkını açıklamak.

TSP

Seyahat eden satıcı problemi için en yakın komşu, MST tabanlı 2-yaklaşım ve 2-opt yerel aramasını adım adım uygulamak.

Çizelgeleme ve Kapsama

İş çizelgeleme (liste, LPT, son tarihli iş sıralama) ve düğüm kapsama 2-yaklaşımını Java ile yazıp izlemek.

Sayısal Yakınsama

Power Iteration ile en büyük özdeğer ve özvektörün yinelemeli olarak nasıl yakınsandığını hesaplamak.

Giriş

Yakınsama Algoritmaları (Approximation Algorithms)

  • Bazı problemlerin kesin (optimal) çözümünü bulmak çok zor ya da pratikte imkânsız olabilir: bilinen tüm kesin algoritmalar üstel zaman ister.
  • Yakınsama algoritmaları mükemmel çözümü aramak yerine, optimal çözüme mümkün olduğunca yakın çözümler üretir.
  • Polinom zamanda çalışırlar: karmaşık problemler makul sürede çözülebilir.
  • Çözümün optimal çözüme belli bir oran ya da yüzde içinde yakın olduğu çoğu zaman kanıtlanabilir.
  • Hesaplama kaynakları (zaman, bellek) kısıtlı olduğunda tercih edilir.
Takas: optimallikten biraz vazgeçilir, karşılığında verimlilik ve çözüm kalitesi için bir garanti kazanılır.

Giriş

Sezgi: Terazi Benzetmesi

  • Terazinin bir kefesine bir ağırlık konduğunda, diğer kefeye tam olarak aynı ağırlığı koymak zor olabilir.
  • Bu durumda, eldeki çeşitli küçük ağırlıklar kullanılarak büyük ağırlığa olabildiğince yakın bir denge kurulur.
  • Elimizde yalnızca 20, 10, 5 ve 1 kg varsa ve her biri bir kez kullanılabiliyorsa, 37 kg'a en yakın denge 36 kg'dır.
37 kg201051hedef: 3720 + 10 + 5 + 1 = 36fark: 1 kg (%2,7)
Yakınsama algoritması da böyle çalışır: kesin dengeyi (optimumu) aramak yerine, hızlıca bulunan ve hatası sınırlı olan bir dengeyle yetinir.

Giriş

Yaklaşım Oranı (Approximation Ratio)

C: algoritmanın bulduğu çözümün maliyeti, C*: optimal çözümün maliyeti. Algoritma her girdi için

max( C / C*, C* / C ) ≤ ρ(n)

koşulunu sağlıyorsa bir ρ(n)-yaklaşım algoritmasıdır (ρ ≥ 1; ρ = 1 ise algoritma optimaldir).

En küçükleme (minimization)C ≤ ρ · C*. Örnek: 2-yaklaşım bir düğüm kapsama algoritması, en fazla optimumun iki katı düğüm seçer.
En büyükleme (maximization)C ≥ C* / ρ. Örnek: 2-yaklaşım bir sırt çantası algoritması, optimal değerin en az yarısını garanti eder.

Oran bir en kötü durum garantisidir; pratikte çözümler çoğu zaman optimuma çok daha yakındır.

Giriş

Yakınsama, Sezgisel ve Yaklaşım Şemaları

YaklaşımGarantiÖrnek
Kesin algoritmaOptimal; ama NP-zor problemlerde üstel zamanKaba kuvvet TSP: (n−1)!/2 tur
Yakınsama algoritmasıPolinom zaman + kanıtlanmış oran ρDüğüm kapsama: ρ = 2
PTASHer sabit ε > 0 için (1 + ε) oranı, n'de polinom (ε'da üstel olabilir)Öklid TSP (Arora, 1998)
FPTAS(1 + ε) oranı, hem n'de hem 1/ε'da polinomSırt çantası: O(n³/ε)
Sezgisel (heuristic)Garanti yok; pratikte genellikle iyi2-opt, en yakın komşu
MetasezgiselGaranti yok; problemden bağımsız arama çerçevesiGenetik algoritma, karınca kolonisi

Rastgele yuvarlama (randomized rounding) gibi rastgele yakınsama algoritmaları da vardır; beklenen değerde bir oran garanti ederler (Bölüm 8).

Giriş

Neden Kesin Çözüm Değil? P, NP ve NP-Zor

PPolinom zamanda çözülebilen karar problemleri (ör. en kısa yol, MST).
NPÖnerilen bir çözümü polinom zamanda doğrulanabilen karar problemleri.
NP-zor (NP-hard)NP'deki her problem buna polinom zamanda indirgenebilir; en az NP'deki en zor problem kadar zordur.
NP-tam (NP-complete)Hem NP'de hem NP-zor. Örnekler: SAT, 3-SAT, düğüm kapsama, Hamilton çevrimi.
  • TSP, düğüm kapsama, iş çizelgeleme ve sırt çantasının en iyileme sürümleri NP-zordur.
  • P ≠ NP ise bunların hiçbiri için polinom zamanlı kesin algoritma yoktur → yakınsama gerekir.

Giriş

Yakınsama Algoritmalarının Uygulamaları

Seyahat eden satıcı (TSP)

Satıcının tüm müşterilere en kısa toplam yolla uğrayıp geri döndüğü rotaya karar vermek: lojistik, kargo, devre kartı delme.

Sırt çantası (knapsack)

Çantaya sığacak ve en büyük faydayı sağlayacak eşyaları seçmek: bütçe, yük ve portföy planlama.

İş (job) çizelgeleme

Birden fazla işin ya da sürecin makinelerde/işlemcilerde en verimli şekilde yürütülmesi.

Düğüm kapsama ve sayısal yöntemler

Ağlara en az sayıda izleme noktası yerleştirmek; büyük matrislerin özdeğerini yinelemeli yakınsamak (PageRank).

Giriş

Yakınsama Algoritmalarının Türleri

Basitleştirme

Problemin daha basit bir sürümü çözülür (ör. tamsayı kısıtı gevşetilir: LP gevşetmesi, MST ile TSP alt sınırı).

Açgözlü (greedy)

Her adımda o an en iyi görünen seçenek seçilerek ilerlenir (en yakın komşu, LPT, oran sıralı sırt çantası).

Yerel arama (local search)

Mevcut çözüm küçük değişikliklerle iyileştirilir; daha iyi komşu kalmayınca durulur (2-opt).

Primal–dualLP'nin birincil ve eşlenik (dual) çözümleri birlikte büyütülür; kapsama problemlerinde sık kullanılır.
RastgeleRastgele yuvarlama ya da örnekleme; beklenen oran garantisi.
MetasezgiselBenzetimli tavlama, genetik algoritma, karınca kolonisi.

Seyahat Eden Satıcı

Seyahat Eden Satıcı Problemi (TSP)

  • En iyileme problemi: satıcı, bir dizi şehri en kısa toplam mesafede birer kez ziyaret edip başladığı şehre dönmek ister.
  • Kombinatoryal problem: çözüm, tüm şehirlerin gezilme sırasıdır (bir permütasyon).
  • NP-zor: çok sayıda şehir için en iyi rotayı bulmak pratikte zordur.
  • Girdi: n şehir (0, 1, 2, … ya da A, B, C, …) ve dij: i ve j şehirleri arasındaki mesafe.
  • Simetrik TSP: dij = dji; graf kuramında: tam graftaki en hafif Hamilton çevrimi.
d01234
0010152025
1100352530
2153503035
3202530040
4253035400

Örnek: 5 şehrin mesafe matrisi (sonraki slaytlarda kullanılır).

Seyahat Eden Satıcı

Problemin Çözümü

Tam çözümTüm olası rotaları kontrol etmek (kaba kuvvet) ya da dinamik programlama (Held–Karp, O(n² · 2n)).
Yaklaşık çözümlerSezgisel algoritmalar: en yakın komşu (nearest neighbor), MST tabanlı 2-yaklaşım, Christofides, genetik algoritmalar.
Optimizasyon araçlarıYerel arama (2-opt), benzetimli tavlama (simulated annealing), karınca kolonisi optimizasyonu (ant colony optimization).
n(n−1)!/2 farklı tur
512
10181 440
15≈ 4,4 · 1010
20≈ 6,1 · 1016
25≈ 3,1 · 1023

Başlangıç şehri sabitlenir ve iki yön aynı sayılır. Saniyede 10⁹ tur denense bile n = 25 için ≈ 10⁷ yıl gerekir.

Seyahat Eden Satıcı

En Yakın Komşu (Nearest Neighbor) Sezgiseli

  1. Bir başlangıç şehri seç; onu ziyaret edildi olarak işaretle.
  2. Bulunduğun şehirden ziyaret edilmemiş en yakın şehre git (açgözlü seçim).
  3. Tüm şehirler ziyaret edilene kadar 2. adımı tekrarla.
  4. Son şehirden başlangıç şehrine dön ve turu kapat.

Artıları

  • Çok basit; O(n²) zaman.
  • Genellikle optimumun %25 kadar üzerinde tur verir.
  • Yerel arama için iyi bir başlangıç turu.

Eksileri

  • Sabit bir yaklaşım oranı yoktur; metrik TSP'de bile oran Θ(log n) olabilir.
  • Son dönüş kenarı çok uzun kalabilir.

Seyahat Eden Satıcı · Kodu adım adım çalıştır

En Yakın Komşu: Kodu Adım Adım İzle

0011223344010152025100352530153503035202530040253035400tur: 0

Başlangıç şehri 0: ziyaret[0] = true, tur = [0], toplam = 0.

0011223344010152025100352530153503035202530040253035400tur: 0

0. satır taranır, ziyaret edilmemişler: d[0][1] = 10, d[0][2] = 15, d[0][3] = 20, d[0][4] = 25 → en küçüğü 1 (10).

0011223344010152025100352530153503035202530040253035400tur: 0 → 1

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

0011223344010152025100352530153503035202530040253035400tur: 0 → 1

1. satır taranır, ziyaret edilmemişler: d[1][2] = 35, d[1][3] = 25, d[1][4] = 30 → en küçüğü 3 (25).

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3

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

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3

3. satır taranır, ziyaret edilmemişler: d[3][2] = 30, d[3][4] = 40 → en küçüğü 2 (30).

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3 → 2

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

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3 → 2

2. satır taranır, ziyaret edilmemişler: d[2][4] = 35 → en küçüğü 4 (35).

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3 → 2 → 4

tur[4] = 4, toplam += 35 → 100; artık simdiki = 4.

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3 → 2 → 4 → 0

Tüm şehirler ziyaret edildi; başlangıca dönülür: toplam += d[4][0] = 25 → 125.

0011223344010152025100352530153503035202530040253035400tur: 0 → 1 → 3 → 2 → 4 → 0

Tur 0 → 1 → 3 → 2 → 4 → 0, uzunluk 125. (Kaba kuvvetle doğrulandı: bu örnekte optimumdur.)

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; }
    // en yakın şehre git
    tur[k] = enYakin; ziyaret[enYakin] = true;
    toplam += enAz; simdiki = enYakin;
  }
  // başlangıca dön
  tur[n] = bas; toplam += d[simdiki][bas];
  return tur;
}

Seyahat Eden Satıcı

Kaba Kuvvetle Karşılaştırma: 12 Farklı Tur

TurUzunluk
0 → 1 → 3 → 2 → 4 → 0125
0 → 1 → 3 → 4 → 2 → 0125
0 → 1 → 4 → 2 → 3 → 0125
0 → 1 → 4 → 3 → 2 → 0125
0 → 2 → 3 → 1 → 4 → 0125
0 → 2 → 4 → 1 → 3 → 0125
TurUzunluk
0 → 1 → 2 → 3 → 4 → 0140
0 → 1 → 2 → 4 → 3 → 0140
0 → 2 → 1 → 3 → 4 → 0140
0 → 2 → 1 → 4 → 3 → 0140
0 → 3 → 1 → 2 → 4 → 0140
0 → 3 → 2 → 1 → 4 → 0140
  • (5−1)!/2 = 12 tur denendi: optimum 125; en yakın komşu da 125 buldu (bu örnek için şanslı bir durum).
  • Bu matris üçgen eşitsizliğini sağlamaz: d12 = 35 > d10 + d02 = 10 + 15. Yani örnek metrik değildir.

Seyahat Eden Satıcı

Üçgen Eşitsizliği ve Yaklaşım Sınırları

Metrik TSP: her i, j, k için dij ≤ dik + dkj (doğrudan gitmek hiçbir zaman daha uzun değildir)
DurumOranAçıklama
Genel TSPyokP ≠ NP ise hiçbir sabit ρ için polinom zamanlı ρ-yaklaşım yoktur: böyle bir algoritma Hamilton çevrimi problemini çözerdi.
Metrik TSP, MST tabanlı2MST + önce-kök (preorder) gezinme + kısayol; O(n²).
Metrik TSP, Christofides1,5MST + tek dereceli düğümlerde en küçük mükemmel eşleme + Euler turu (1976).
Öklid TSP1 + εDüzlemdeki noktalar için PTAS vardır (Arora, Mitchell).
En yakın komşuΘ(log n)Metrik durumda bile sabit oran garanti etmez.

Seyahat Eden Satıcı

Metrik TSP için MST Tabanlı 2-Yaklaşım

ABCDEFG

Metrik örnek: düzlemde 7 şehir; mesafeler Öklid uzaklığıdır (üçgen eşitsizliği sağlanır).

47,737,938,830,034,939,4ABCDEFG

1) Prim ile en küçük kapsayan ağaç (MST) kurulur: toplam ağırlık w(T) = 228,8. Bir turdan bir kenar silinince kapsayan ağaç kalır → w(T) ≤ OPT.

ABCDEFG

2) Ağaç A'dan derinlik öncelikli iki kez gezilir (her kenar bir gidiş bir dönüş): A → D → B → C → E → F → E → C → B → D → G → D → A. Uzunluk 2 · w(T) = 457,6.

ABCDEFG

3) Tekrar eden şehirler atlanır (kısayol): önce-kök sırası A → D → B → C → E → F → G → A. Üçgen eşitsizliği sayesinde kısayol yolu uzatmaz: tur = 287,7.

ABCDEFG

Sonuç: tur ≤ 2 · w(T) ≤ 2 · OPT. Burada tur = 287,7, optimum (kaba kuvvet, 360 tur) = 282,5 → oran 1,02 ≤ 2.

Yerel Arama

Yerel Arama: 2-opt Hamlesi

abcd

Önce: (a, b) ve (c, d) kenarları çaprazlanıyor.

abcd

Sonra: (a, c) ve (b, d); aradaki yol ters çevrildi.

  • Turdan iki kenar çıkar, uçları çapraz bağla: b … c arasındaki alt yol ters çevrilir.
  • Kazanç Δ = d(a,c) + d(b,d) − d(a,b) − d(c,d) < 0 ise hamle yapılır. Öklid düzleminde her kesişme böyle kaldırılabilir.
  • İyileştiren hamle kalmayınca tur 2-opt yerel optimumudur (genel optimum olması gerekmez).

Yerel Arama · Adım adım

2-opt ile Turu İyileştirme

002020404060608080

28 şehir, rastgele başlangıç turu: uzunluk 1269,8. Kenarlar sürekli birbirini kesiyor.

002020404060608080

1. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −36,9 → uzunluk 1232,9.

002020404060608080

2. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −8,9 → uzunluk 1224,0.

002020404060608080

4. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −27,6 → uzunluk 1187,3.

002020404060608080

8. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −32,6 → uzunluk 1111,7.

002020404060608080

14. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −14,9 → uzunluk 1005,2.

002020404060608080

22. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −37,0 → uzunluk 852,8.

002020404060608080

32. iyileştiren hamleden sonra: (a,b), (c,d) çıkarıldı (kesikli), (a,c), (b,d) eklendi (kalın). Δ = −11,8 → uzunluk 595,9.

002020404060608080

48. ve son hamle: artık hiçbir 2-opt hamlesi turu kısaltmıyor → yerel optimum, uzunluk 430,8 (başlangıcın %34'ü). Kesişen kenar kalmadı.

Yerel Arama

2-opt Yerel Arama: Java

void ikiOpt(int[] tur, double[][] d) {
  int n = tur.length;
  boolean iyilesti = true;
  while (iyilesti) {
    iyilesti = false;
    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;
        }
      }
  }
}
Bir tur taramaO(n²) aday hamle; her hamle O(1)'de değerlendirilir, ters çevirme O(n).
Yerel optimumDöngü, hiçbir hamle kazanç sağlamayınca biter. Tur sayısı en kötü durumda üstel olabilir, pratikte azdır.
İyi başlangıçRastgele yerine en yakın komşu turuyla başlamak daha az hamle gerektirir. Genelleştirme: 3-opt, Lin–Kernighan.

Yerel Arama

Yerel Optimumdan Kaçış: Metasezgiseller

Benzetimli tavlama

(Simulated annealing) Kötüleştiren bir hamle de e−Δ/T olasılıkla kabul edilir; "sıcaklık" T yavaşça düşürülür. Yerel optimumdan çıkabilir.

Genetik algoritma

Turlardan oluşan bir popülasyon; seçilim, çaprazlama (crossover) ve mutasyonla nesiller boyunca iyileştirilir.

Karınca kolonisi

(Ant colony optimization) Karıncalar kısa turların kenarlarına daha çok feromon bırakır; sonraki karıncalar feromonu yoğun kenarları tercih eder.

  • Üçü de TSP, araç rotalama, iş çizelgeleme ve atama problemlerinde yaygındır.
  • Hiçbiri yaklaşım oranı garanti etmez; parametre ayarı (sıcaklık, popülasyon, buharlaşma) sonucu belirgin biçimde etkiler.

İş Çizelgeleme

İş Çizelgeleme (Job Scheduling)

  • En iyileme problemi: belirli kaynaklarla (işçiler, makineler, işlemciler) işlerin en verimli şekilde planlanması.
  • Amaç: işlerin tamamlanma süresini en aza indirmek ya da belirli ölçütlere (kâr, gecikme, son tarih) göre en iyilemek.
Makine çizelgeleme (makespan)

n iş, m özdeş makine; iş j'nin süresi pj. Son işin bittiği an Cmax (makespan) en küçük olsun. m ≥ 2 için NP-zor.

Son tarihli iş sıralama

Her iş 1 birim sürer, bir kârı ve son tarihi (deadline) vardır. Son tarihinden önce biten işlerin toplam kârı en büyük olsun.

İlk problem için açgözlü yakınsama algoritmaları (liste çizelgeleme, LPT), ikincisi için optimal bir açgözlü algoritma göreceğiz.

İş Çizelgeleme · Adım adım

Makinelere İş Atama: Liste Çizelgeleme

M1J1J4M2J2M3J30123456789t

Üç özdeş makine M1–M3. İşler sırayla gelir: J1 (2), J2 (8), J3 (6) t = 0'da hazır; J4 (3) t = 3'te gelir. Liste çizelgeleme (Graham): sıradaki iş, ilk boşalan makineye atanır.

M1J1M2M30123456789t

J1 (süre 2) → M1, [0, 2] aralığında çalışır (tüm makineler boş; ilk makine seçilir).

M1J1M2J2M30123456789t

J2 (süre 8) → M2, [0, 8] aralığında çalışır (M1 t = 2 anına kadar meşgul).

M1J1M2J2M3J30123456789t

J3 (süre 6) → M3, [0, 6] aralığında çalışır (M1 t = 2 anına kadar meşgul; M2 t = 8 anına kadar meşgul).

M1J1M2J2M3J30123456789t

t = 2: M1 boşaldı ama bekleyen iş yok; makine t = 3'e kadar boşta kalır (taralı alan).

M1J1J4M2J2M3J30123456789t

J4 (süre 3) → M1, [3, 6] aralığında çalışır (M2 t = 8 anına kadar meşgul; M3 t = 6 anına kadar meşgul).

M1J1J4M2J2M3J30123456789tCmax = 8

Tüm işler atandı: Cmax = 8 (M2). Alt sınır: OPT ≥ en uzun iş = 8 → bu çizelge optimaldir. Genelde ise liste çizelgeleme yalnızca (2 − 1/m) oranını garanti eder.

İş Çizelgeleme

Liste Çizelgeleme: (2 − 1/m)-Yaklaşım

İki alt sınır: OPT ≥ Σpj / m (iş yükü paylaştırılmalı) ve OPT ≥ max pj.

  1. En son biten iş j, sj anında başlamış olsun.
  2. sj'den önce tüm makineler meşguldü (yoksa j daha erken başlardı) → sj ≤ (Σp − pj) / m.
  3. Cmax = sj + pj ≤ Σp / m + (1 − 1/m) · pj ≤ OPT + (1 − 1/m) · OPT.
Cmax ≤ (2 − 1/m) · OPT; süre O(n log m) (en erken boşalan makine bir yığında tutulur).
Sınır sıkıdırm = 2, işler sırasıyla 1, 1, 2:
• Liste: M1 = 1 + 2 = 3, M2 = 1 → Cmax = 3
• Optimum: {1, 1} ve {2} → 2
Oran 3/2 = 2 − 1/2.

Genelde m(m − 1) adet 1 birimlik iş ve sonda tek bir m birimlik iş oranı 2 − 1/m'ye ulaştırır.

İş Çizelgeleme

En Uzun İş Önce (LPT): 4/3-Yaklaşım

LPT (Longest Processing Time first): işleri süreye göre azalan sırala, sonra liste çizelgeleme uygula. İşler: 2, 3, 4, 6, 2, 2 ve m = 3.

M126M232M3420123456789tCmax = 8

Verilen sıra: Cmax = 8

M16M242M33220123456789tCmax = 7

LPT sırası 6, 4, 3, 2, 2, 2: Cmax = 7 = OPT (≥ ⌈19/3⌉ = 7)

  • Uzun işler başa alınınca sona kalan kısa işler dengesizliği düzeltir: Cmax ≤ (4/3 − 1/(3m)) · OPT (Graham, 1969). Süre O(n log n).
  • Sıkı örnek (m = 3): 5, 5, 4, 4, 3, 3, 3 → LPT 11, optimum 9 ({5, 4}, {5, 4}, {3, 3, 3}).

İş Çizelgeleme

Son Tarihli İş Sıralama (Job Sequencing)

  • Tek makine; her iş 1 zaman birimi sürer. İş, son tarihine kadar biterse kârı kazanılır.
  • Açgözlü kural: işleri kâra göre azalan sırada ele al; her işi son tarihinden önceki en geç boş zaman dilimine (slot) yerleştir; boş dilim yoksa işi atla.
  • En geç dilimi seçmek, erken dilimleri son tarihi daha yakın işlere bırakır.
  • Bu problem için açgözlü kural optimaldir (matroid yapısı); süre O(n²), birleşim–bul (union–find) ile ≈ O(n log n).
İşKârSon tarih
3402
4302
1204
2101
Dikkat: işleri son tarihe göre sıralamak yanlıştır. Örnek: (kâr 10, son tarih 1) ve (kâr 40, son tarih 1) → son tarih sırası 10 kazanır, kâr sırası 40.

İş Çizelgeleme · Kodu adım adım çalıştır

Son Tarihli İş Sıralama: Kodu Adım Adım İzle

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=1−1[1]t=2−1[2]t=3−1[3]t=4toplamKar = 0

İşler kâra göre azalan sıralanır: 3 (40), 4 (30), 1 (20), 2 (10). Bu örnekte tablo zaten sıralı.

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=1−1[1]t=2−1[2]t=3−1[3]t=4toplamKar = 0

n = 4 dilim oluşturulur; hepsi −1 (boş). dilim[t], t + 1. zaman dilimidir.

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=1−1[1]t=2−1[2]t=3−1[3]t=4toplamKar = 0

İş 3: son tarih 2 → en geç aday dilim t = min(4, 2) − 1 = 1.

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=13[1]t=2−1[2]t=3−1[3]t=4toplamKar = 40

dilim[1] boş → iş 3 yerleştirilir, toplamKar = 40; break.

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=13[1]t=2−1[2]t=3−1[3]t=4toplamKar = 40

İş 4: son tarih 2 → en geç aday dilim t = min(4, 2) − 1 = 1.

İşKârSon t.3402430212042101dilim (zaman dilimi)−1[0]t=13[1]t=2−1[2]t=3−1[3]t=4toplamKar = 40

dilim[1] = 3 dolu → bir önceki dilime bak: t = 0.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=3−1[3]t=4toplamKar = 70

dilim[0] boş → iş 4 yerleştirilir, toplamKar = 70; break.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=3−1[3]t=4toplamKar = 70

İş 1: son tarih 4 → en geç aday dilim t = min(4, 4) − 1 = 3.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=31[3]t=4toplamKar = 90

dilim[3] boş → iş 1 yerleştirilir, toplamKar = 90; break.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=31[3]t=4toplamKar = 90

İş 2: son tarih 1 → en geç aday dilim t = min(4, 1) − 1 = 0.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=31[3]t=4toplamKar = 90

dilim[0] = 4 dolu → bir önceki dilime bak: t = -1.

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=31[3]t=4toplamKar = 90

t = −1: son tarihi 1 olan iş 2 için boş dilim kalmadı → iş yapılamaz (kâr 0).

İşKârSon t.3402430212042101dilim (zaman dilimi)4[0]t=13[1]t=2−1[2]t=31[3]t=4toplamKar = 90

Sonuç dilim = [4, 3, −1, 1]: önce iş 4, sonra iş 3, t = 4'te iş 1. Toplam kâr = 40 + 30 + 20 + 0 = 90.

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

Düğüm Kapsama

Düğüm Kapsama (Vertex Cover)

  • Kapsama problemi: bir çizgenin tüm kenarlarını kapsayacak en az sayıda düğümü seçmek. Bir kenar, uçlarından en az biri seçilmişse kapsanır.
  • Amaç: tüm kenarları en az düğümle kapsayan C ⊆ V kümesini bulmak. Karar sürümü ("k düğümlük kapsama var mı?") NP-tamdır.

Geçerli bir kapsama, boyut 6 (her kenarı bir "gözcü" görüyor)

Aynı çizgede en küçük kapsama, boyut 3

Düğüm Kapsama

Örnek: Dört Düğümlü Çizge

  • Düğümler: A, B, C, D
  • Kenarlar: (A, B), (A, C), (B, C), (B, D), (C, D)
  • {A, B, C} bir düğüm kapsama kümesidir: her kenarın en az bir ucu kümede.
  • Ama en küçük değildir: {B, C} de beş kenarın hepsini kapsar.
  • Tek düğüm yetmez (B, (A, C)'yi kapsamaz) → optimum 2.
ABCD

{A, B, C}: geçerli, boyut 3

ABCD

{B, C}: en küçük, boyut 2

Düğüm Kapsama

Düğüm Kapsama: Çözüm Yaklaşımları

Tam çözümTüm olası düğüm kümelerini kontrol etmek: 2n alt küme × O(m) denetim.
Yaklaşık çözümlerAçgözlü algoritmalar (en yüksek dereceli düğüm), kenar seçmeli 2-yaklaşım algoritması.
Optimizasyon araçlarıDoğrusal programlama (LP gevşetmesi + yuvarlama), dal ve sınır (branch and bound).
AEDFCBGIJLHK

En küçük kapsama {A, B, H, I, J} (5 düğüm)

Düğüm Kapsama

Düğüm Kapsama Algoritması

Saf fikir:

  1. Başlangıçta boş bir kapsama kümesi oluştur.
  2. Kapsanmamış bir kenar seç; uçlarından birini kümeye ekle.
  3. Tüm kenarlar kapsanana kadar tekrarla.

Uçlardan yalnızca birini eklemek garanti vermez. Doğru 2-yaklaşım:

  1. Kapsanmamış bir (u, v) kenarı seç; u ve v'nin ikisini de ekle.
  2. u ya da v'ye değen tüm kenarları kapsanmış say; kenar kalmayana kadar tekrarla.
m12345

Her kenarda yaprak ucu seçilirse 5 düğüm; optimum {m}, 1 düğüm. n yapraklı yıldızda oran n olur.

Düğüm Kapsama · Kodu adım adım çalıştır

Düğüm Kapsama 2-Yaklaşımı: Kodu Adım Adım İzle

AEDFCBGIJLHK

Kapsama kümesi boş. Kenarlar sırayla gezilecek: (A,B), (A,C), …, (J,L).

AEDFCBGIJLHK

(A, B): iki uç da kapsamada değil → A ve B eklenir. Bu kenarlar bir eşleme (matching) oluşturur.

AEDFCBGIJLHK

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

AEDFCBGIJLHK

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

AEDFCBGIJLHK

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

AEDFCBGIJLHK

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

AEDFCBGIJLHK

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

AEDFCBGIJLHK

(G, H): iki uç da kapsamada değil → G ve H eklenir. Bu kenarlar bir eşleme (matching) oluşturur.

AEDFCBGIJLHK

(G, I): G zaten kapsamada → kenar kapsanmış, atlanır.

AEDFCBGIJLHK

(H, I): H zaten kapsamada → kenar kapsanmış, atlanır.

AEDFCBGIJLHK

(H, K): H zaten kapsamada → kenar kapsanmış, atlanır.

AEDFCBGIJLHK

(I, J): iki uç da kapsamada değil → I ve J eklenir. Bu kenarlar bir eşleme (matching) oluşturur.

AEDFCBGIJLHK

(J, K): J zaten kapsamada → kenar kapsanmış, atlanır.

AEDFCBGIJLHK

(J, L): J zaten kapsamada → kenar kapsanmış, atlanır.

AEDFCBGIJLHK

Sonuç {A, B, G, H, I, J}: 6 düğüm. Optimum 5 ({A, B, H, I, J}) → oran 6/5 = 1,2 ≤ 2.

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

Düğüm Kapsama

Neden En Fazla 2 × Optimum?

  1. Algoritmanın seçtiği kenarlar M kümesi olsun. Seçilen her kenarın iki ucu da eklendiği için M'deki kenarların ortak ucu yoktur (M bir eşlemedir).
  2. Her kapsama, M'deki her kenarı kapsamak için farklı bir düğüm içermek zorundadır → OPT ≥ |M|.
  3. Algoritma tam olarak |C| = 2 |M| düğüm seçer → |C| ≤ 2 · OPT.
SüreO(V + E): her kenar bir kez incelenir.
Açgözlü dereceEn yüksek dereceli düğümü seçmek sezgiseldir ama oranı yalnızca O(log n)'dir.
LP yuvarlamaxu + xv ≥ 1 gevşetmesini çöz, xv ≥ 1/2 olanları seç → yine 2-yaklaşım.

2'den belirgin biçimde iyi bir sabit oran bilinmiyor; 2 − ε oranının (Benzersiz Oyunlar Varsayımı altında) imkânsız olduğu gösterilmiştir.

Düğüm Kapsama · Adım adım

NP-Tamlık: 3-SAT'tan Düğüm Kapsamaya İndirgeme

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

φ = (x₁ ∨ x₁ ∨ x₂) ∧ (¬x₁ ∨ ¬x₂ ∨ ¬x₂) ∧ (¬x₁ ∨ x₂ ∨ x₂). Her değişken için bir kenar (üst kutu), her tümce için bir üçgen; tümcedeki her literal aynı adlı değişken düğümüne bağlanır. l = 2 değişken, m = 3 tümce → k = l + 2m = 8.

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

Atama x₁ = yanlış: değişken kenarından ¬x₁ seçilir. Kapsanan kenarlar soluklaşır.

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

Atama x₂ = doğru: x₂ seçilir. Her değişken kenarı tam olarak bir düğümle kapsandı (l = 2 düğüm).

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

C₁'de doğru literal x₂ (bağlantı kenarı zaten kapsanmış) dışarıda bırakılır; diğer iki köşe (x₁, x₁) eklenir.

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

C₂'de doğru literal ¬x₁ dışarıda; ¬x₂ ve ¬x₂ köşeleri eklenir.

x₁¬x₁x₂¬x₂x₁x₁x₂¬x₁¬x₂¬x₂¬x₁x₂x₂C₁C₂C₃

C₃'te doğru literal ¬x₁ dışarıda; x₂ ve x₂ eklenir. 8 düğüm, 20 kenarın hepsi kapsandı: φ sağlanabilir ⇔ k = l + 2m boyutlu kapsama var.

Sırt Çantası

Sırt Çantası: Oran Sıralı Açgözlü Yakınsama

EşyaDeğerAğırlıkOranKapasite 10
62072,86✓ alındı (ağırlık 7)
3842,00✗ sığmaz
71581,88✗ sığmaz
2531,67✓ alındı (ağırlık 10)
51061,67✗ sığmaz
1321,50✗ sığmaz
4651,20✗ sığmaz

Açgözlü toplam değer 25; DP ile optimum da 25 (eşya 2 + 6).

  • Eşyaları değer/ağırlık oranına göre azalan sırala; sığanı al. O(n log n).
  • Kesirli sırt çantasında bu kural optimaldir; 0/1 sürümde ise garanti yoktur.
  • Kötü örnek: W = 10, (değer 2, ağırlık 1) ve (değer 10, ağırlık 10). Açgözlü 2 alır, optimum 10: oran W kadar büyüyebilir.
  • İyileştirilmiş kural: max(açgözlü değer, sığan en değerli tek eşya) → 2-yaklaşım (optimumun en az yarısı).
  • Daha iyisi: değerleri ölçekleyip DP uygulayan FPTAS, (1 − ε) · OPT, O(n³/ε).

Power Iteration

Power Iteration (Kuvvet Yinelemesi) Algoritması

  • Bir matrisin en büyük (mutlak değeri en büyük, baskın) özdeğerini λ1 ve buna ait bir özvektörü v1 yaklaşık olarak hesaplayan yinelemeli bir yöntemdir.
  • Tüm özdeğerleri kesin olarak hesaplamak (O(n³)) yerine, yalnızca baskın özdeğer ve özvektörün yaklaşık bir tahminini verir.
  • Her adım yalnızca bir matris–vektör çarpımıdır (O(n²), seyrek matriste O(sıfır olmayan eleman)): büyük boyutlu matrislerde etkilidir.
Burada "yakınsama" iki anlamda: çözüm optimum yerine bir tahmindir ve yinelemeler gerçek değere yakınsar (converge). Google'ın PageRank'i bu yöntemin en ünlü uygulamasıdır.

Power Iteration

Power Iteration: Adımlar ve Neden Çalışır?

  1. Bir A matrisi belirlenir ve rastgele (sıfır olmayan) bir başlangıç vektörü x0 seçilir.
  2. Vektör matrisle çarpılarak yeni vektör elde edilir: y = A · xk.
  3. Yeni vektörün normu (uzunluğu) 1'e normalleştirilir: xk+1 = y / ‖y‖.
  4. Bu işlem istenen sayıda ya da değişim küçülene kadar tekrarlanır.
  5. xk → v1; özdeğer tahmini Rayleigh bölümü λ ≈ xkT A xk.

Neden? x0 = c1v1 + c2v2 + … ise

Akx0 = λ1k [ c1v1 + c2(λ2/λ1)k v2 + … ]
  • |λ2/λ1| < 1 olduğundan diğer bileşenler geometrik olarak söner.
  • Hata her adımda ≈ |λ2/λ1| katına iner: oran 1'e yakınsa yakınsama yavaştır.
  • Koşul: c1 ≠ 0 (x0, v1'e dik olmamalı) ve |λ1| > |λ2|.

Power Iteration · Adım adım

Power Iteration Adım Adım

v₁v₂x₀110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

A = [[2, 1], [1, 3]], özdeğerler λ₁ = (5 + √5)/2 ≈ 3,618 ve λ₂ ≈ 1,382. Başlangıç x₀ = (1, 0); hata ‖x₀ − v₁‖ = 0,974.

v₁v₂x₁110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 1: A·x = (2,000, 1,000), normalleştir → x = (0,894, 0,447); λ ≈ 3,000, hata 0,5465.

v₁v₂x₂110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 2: A·x = (2,236, 2,236), normalleştir → x = (0,707, 0,707); λ ≈ 3,500, hata 0,2313.

v₁v₂x₃110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 3: A·x = (2,121, 2,828), normalleştir → x = (0,600, 0,800); λ ≈ 3,600, hata 0,0899.

v₁v₂x₄110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 4: x = (0,5547, 0,8321); λ ≈ 3,61538; hata 3,4 · 10⁻². Her adımda ≈ λ₂/λ₁ ≈ 0,38 katına iner.

v₁v₂x₅110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 5: x = (0,5369, 0,8437); λ ≈ 3,61765; hata 1,3 · 10⁻². Her adımda ≈ λ₂/λ₁ ≈ 0,38 katına iner.

v₁v₂x₆110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 6: x = (0,5300, 0,8480); λ ≈ 3,61798; hata 5,0 · 10⁻³. Her adımda ≈ λ₂/λ₁ ≈ 0,38 katına iner.

v₁v₂x₇110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 7: x = (0,5274, 0,8496); λ ≈ 3,61803; hata 1,9 · 10⁻³. Her adımda ≈ λ₂/λ₁ ≈ 0,38 katına iner.

v₁v₂x₈110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 8: x = (0,5264, 0,8503); λ ≈ 3,61803; hata 7,3 · 10⁻⁴. Her adımda ≈ λ₂/λ₁ ≈ 0,38 katına iner.

v₁v₂x₉110⁻¹10⁻²10⁻³10⁻⁴02468yineleme khata ‖xₖ − v₁‖

k = 9: x ≈ (0,5260, 0,8505) ≈ v₁ = (0,5257; 0,8507), λ ≈ 3,618034; hata ≈ 2,8 · 10⁻⁴. Hata grafiği log ölçekte bir doğru: doğrusal (geometrik) yakınsama.

Power Iteration

Power Iteration: Java ve Bir 3 × 3 Örnek

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

Örnek matris (satırlar):
(0,511 0,32 0,12) · (0,211 0,62 0,12) · (0,311 0,12 0,16); x₀ = (1, 1, 1)

kx₁x₂x₃‖A·x‖
10,64740,64740,40231,4690
20,65330,65330,38270,8974
30,65390,65390,38070,9005
40,65390,65390,38050,9008
50,65390,65390,38050,9008
60,65390,65390,38050,9008
80,65390,65390,38050,9008

‖A·x‖ → λ₁ = 0,9008; v₁ ∝ (0,6539; 0,6539; 0,3805). λ₂/λ₁ = 0,3/0,9008 ≈ 0,33 → hızlı yakınsama.

Power Iteration

Power Iteration: Sınırlar ve Uygulamalar

Güçlü yanları

  • Çok basit; yalnızca matris–vektör çarpımı.
  • Seyrek ve dev matrislerde (milyarlarca satır) uygulanabilir.
  • Bellek O(n): matris değiştirilmez.

Sınırları

  • Yalnızca baskın özdeğeri bulur.
  • |λ2| ≈ |λ1| ise çok yavaş; |λ1| = |λ2| ise yakınsamayabilir.
  • x0, v1'e dik seçilirse (c1 = 0) kuramsal olarak başarısız olur.
  • PageRank: web bağlantı matrisinin baskın özvektörü sayfaların önemini verir.
  • Türevler: ters yineleme (en küçük özdeğer), kaydırmalı yineleme, Lanczos/Arnoldi; PCA'da ilk temel bileşen.

Özet

Özet

ProblemAlgoritmaOranSüre
TSP (genel)en yakın komşu (sezgisel)garanti yokO(n²)
Metrik TSPMST + önce-kök + kısayol / Christofides2 / 1,5O(n²) / O(n³)
TSP2-opt yerel aramagaranti yokO(n²) / tarama
Makine çizelgelemeliste çizelgeleme / LPT2 − 1/m / 4/3 − 1/(3m)O(n log m) / O(n log n)
Son tarihli iş sıralamakâr sıralı, en geç boş dilim1 (optimal)O(n²)
Düğüm kapsamakenar seç, iki ucu ekle2O(V + E)
0/1 sırt çantasımax(oran sıralı, en iyi tek eşya) / FPTAS2 / 1 + εO(n log n) / O(n³/ε)
Baskın özdeğerPower Iterationhata ∝ |λ₂/λ₁|kO(n²) / adım

Özet

Etkileşimli Simülatörler

NP-Tamlık ve HesaplanamazlıkP, NP, NP-zor ve NP-tam sınıfları, polinom zamanlı indirgeme, Cook–Levin teoremi ve yakınsamanın neden gerektiği; kısa doğru/yanlış sınıflandırma alıştırmasıyla.
Seyahat Eden Satıcı ProblemiRastgele şehirler üretin; hızlı en yakın komşu sezgiselini kaba kuvvetle bulunan optimal turla karşılaştırın ve faktöriyel büyümeyi gözlemleyin.

Özet

Sık Yapılan Hatalar

Sezgisel = yakınsama sanmakEn yakın komşu ve 2-opt iyi sonuç verir ama oran garantisi yoktur; yakınsama algoritması kanıtlı bir ρ ister.
Oranı ters yazmakEn küçüklemede C ≤ ρ · C*, en büyüklemede C ≥ C*/ρ. ρ her zaman ≥ 1'dir.
Kapsamada tek uç eklemekKenarın yalnızca bir ucunu eklemek yıldız çizgede n kat kötü olabilir; 2-yaklaşım iki ucu da ekler.
Üçgen eşitsizliğini unutmakMST tabanlı 2-yaklaşımın kısayol adımı yalnızca metrik TSP'de yolu uzatmaz.
İşleri son tarihe göre sıralamakİş sıralamada açgözlü kural kâra göre azalan sıradır; son tarih yalnızca dilim seçiminde kullanılır.
Normalleştirmeyi atlamakPower Iteration'da x her adımda normalleştirilmezse sayılar taşar (|λ₁| > 1) ya da sıfıra iner.

Özet

Örnek Problemler

  1. Bir en küçükleme probleminde algoritma 30, optimum 20 buluyor. Bu girdi için oran nedir?
  2. 5 şehirlik matriste (TSP slaytı) en yakın komşuyu 2 numaralı şehirden başlatın: tur ve uzunluk?
  3. 1–2–3–4–5–6 yolunda kenarlar (1,2), (2,3), …, (5,6) sırasıyla işlenirse 2-yaklaşım kaç düğüm seçer? Optimum?
  4. m = 2, işler 3, 3, 2, 2, 2: liste çizelgeleme ve LPT Cmax'ı ve optimum nedir?
  5. İşler (kâr, son tarih): a(100, 2), b(19, 1), c(27, 2), d(25, 1), e(15, 3). Açgözlü sıralama ve toplam kâr?
  6. W = 10, eşyalar (2, 1) ve (10, 10) (değer, ağırlık): oran sıralı açgözlü ve iyileştirilmiş kural ne bulur?
Cevapları göster
  1. C/C* = 30/20 = 1,5.
  2. 2 → 0 (15) → 1 (10) → 3 (25) → 4 (40) → 2 (35): 125.
  3. (1,2), (3,4), (5,6) seçilir → 6 düğüm; optimum {2, 4, 5} → 3; oran tam 2.
  4. Liste: 3 | 3, sonra 2 → M1 (5), 2 → M2 (5), 2 → M1 (7) → 7; LPT aynı sıra → 7; optimum {3, 3} | {2, 2, 2} = 6; 7/6 = 4/3 − 1/6 (sınır sıkı).
  5. Sıra a, c, d, b, e; a → dilim 2, c → dilim 1, d ve b sığmaz, e → dilim 3: c, a, e, kâr 142.
  6. Açgözlü önce (2, 1) alır, (10, 10) sığmaz → 2; iyileştirilmiş kural: max(2, 10) = 10 = optimum.

Özet

Alıştırmalar

  1. a(0,0), b(4,3), c(4,0), d(0,3) ve turda (a,b), (c,d) kenarları var. 2-opt kazancı Δ nedir?
  2. m = 3 için liste çizelgelemenin 5/3 oranına ulaştığı bir iş listesi kurun.
  3. K5 tam çizgesinde 2-yaklaşım kaç düğüm seçer? Optimum kaçtır?
  4. A = [[2, 0], [0, 1]], x0 = (1, 1). xk'nın ikinci bileşeni birincisinin 10⁻³'ünden kaç adımda küçük olur?
  5. İşleri son tarihe göre sıralayan bir açgözlü kod düşünün. Bunun yanlış sonuç verdiği bir örnek bulun.
  6. 2-yaklaşımı, seçilen eşlemeyi de döndürecek biçimde Java ile yazın.
Cevaplar / ipuçları
  1. d(a,c) + d(b,d) − d(a,b) − d(c,d) = 4 + 4 − 5 − 5 = −2 → hamle yapılır.
  2. Altı adet 1 birimlik iş, sonra bir 3 birimlik iş: liste 2 + 3 = 5; optimum {3} | {1,1,1} | {1,1,1} = 3 → 5/3.
  3. İki ayrık kenar seçilir → 4 düğüm; optimum n − 1 = 4 (oran 1).
  4. xk ∝ (2k, 1): 2−k < 10⁻³ → k = 10 (2¹⁰ = 1024).
  5. (kâr, son tarih) = (10, 1), (40, 2), (30, 2): son tarih sırası 10 → dilim 1, 40 → dilim 2, 30 sığmaz → 50. Kâr sırası 40 → dilim 2, 30 → dilim 1 → 70.
  6. İki ucu da işaretsiz kenarı eşlemeye ekleyip iki ucu işaretleyin; kapsama = eşlemenin uçları.

Özet

Kaynaklar

  • Cormen, Leiserson, Rivest ve Stein, Introduction to Algorithms, 4. baskı, 2022 (Bölüm 35: Approximation Algorithms).
  • V. V. Vazirani, Approximation Algorithms, Springer, 2001.
  • D. P. Williamson ve D. B. Shmoys, The Design of Approximation Algorithms, Cambridge University Press, 2011.
  • R. L. Graham, "Bounds on Multiprocessing Timing Anomalies", SIAM Journal on Applied Mathematics 17(2), 1969.
  • N. Christofides, "Worst-Case Analysis of a New Heuristic for the Travelling Salesman Problem", Rapor 388, Carnegie Mellon Üniversitesi, 1976.
  • M. Sipser, Introduction to the Theory of Computation, 3. baskı, 2012 (3-SAT → düğüm kapsama indirgemesi).
  • G. H. Golub ve C. F. Van Loan, Matrix Computations, 4. baskı, 2013 (Power Iteration).

Son

Bölüm 7: Yakınsama Algoritmaları
Sonraki bölüm: Bölüm 8: Rastgele Algoritmalar
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.