COMPUTER ENGINEER

← BlogDATA STRUCTURES / ALGORITHMSPython örnek paketi ↓

Karmaşıklık ve yaklaşım · 47 / 53

Yaklaşım garantileri, heuristics ve FPT

Anla → iz sür → uygula → gerekçelendir

2 dk okuma · uygulama için ayrıca zaman ayır

Minimization için α-approximation, her uygun girdide ALG≤α·OPT garantisidir. “%99 doğru” genel bir tanım değildir. Maximization oranının yönü ayrıca belirtilir. Heuristic iyi çalışabilir ama kanıtlı oran sunmayabilir. PTAS her sabit ε için polinom n süresiyle (1+ε) oranı; FPTAS ayrıca 1/ε bakımından polinom süre ister.

Vertex cover için maximal matching uçlarını seçmek 2-approximation verir: her matching kenarı en az bir optimum vertex ister; seçilen uçlar bunun iki katıdır. Metric TSP'de triangle inequality shortcut'ı mümkün kılar; genel TSP'ye metric garantisini taşımak yanlıştır. Greedy set cover logarithmic bound sunar, her greedy optimal değildir.

Parameterized complexity, n ile küçük k'yı ayırır. FPT süre f(k)·n^c biçimindedir; n^k genel olarak FPT değildir. Vertex cover için açık kenarın bir ucunu seçerek dallanma O(2^k·poly(n)) verir. Kernelization eşdeğer küçük örnek oluşturur. Approximation, randomization ve parameterization farklı araçlardır; raporda garanti ve varsayımı birlikte göster.

Adım adım iz sürme

Bir matching kenarı seçildiğinde iki uç cover'a alınır, onlara değen kenarlar kaldırılır. Sonucun minimum olması gerekmez.

Maliyet ve varsayımlar

Basit tekrar filtreleyen model O(E²) olabilir; uygun adjacency uygulaması O(V+E). Oran algoritmanın sonucu içindir.

Çalıştırılabilir örnek

Python 3 ile çalıştır. Assert küçük bir örneği denetler; genel doğruluk ispatı değildir. Bazı ileri örnekler özellikle küçük model veya referans oracle'dır; tam üretim uygulaması değildir.

Python 3
def cover_approx(edges):
    remaining=list(edges); chosen=set()
    while remaining:
        u,v=remaining[0]; chosen.update((u,v))
        remaining=[(a,b) for a,b in remaining if a not in (u,v) and b not in (u,v)]
    return chosen
edges=[(0,1),(1,2),(2,3)]
c=cover_approx(edges)
assert all(u in c or v in c for u,v in edges)

KAVRADIĞINI KONTROL ET

Sıra sende

Random greedy sonucu iyi görünüyor; approximation garantisi var mı?

Çözümün mantığını göster

Örnek sonuç kanıt değildir. Tüm uygun girdiler için bound ve varsayımlar gerekir.

Bir adım ileri

  1. Örneği değiştirmeden önce girdi sözleşmesini ve invariantı yaz.
  2. Uygun olan boş, sınır, tekrar ve adversarial girdileri ekle. Basit bir oracle ile karşılaştır.
  3. Belirtilen modelde maliyeti çıkar; farklı girdi büyüklüklerini ölç ve farkları gerekçelendir.

Temel kaynaklar ve ders notları

Bu eğitimde özgün anlatım kullanıldı; aşağıdaki kaynaklar ispatlar ve ileri okumalar sunar. Bağlantılar daha geniş ders modülünü kapsayabilir.

MIT 6.046J · Design and Analysis ↗Jeff Erickson · Algorithms ↗
İlerlemeden önce alıştırmayı çöz.