Intractability ile başa çıkmak: NP-komple problemler


43

Bir programcı olduğumu ve onu çözmek için ihtiyacım olan NP-tamam bir sorunum olduğunu varsayalım. NPC problemleriyle başa çıkmak için hangi yöntemler mevcut? Bu konuda bir anket ya da benzeri bir şey var mı?


4
Hangi sorunun olduğunu belirtmek faydalı olacaktır.
Dave Clarke

2
Bu soru belirli bir sorunla ilgili değil. Teknikleri bilmek istiyorum, böylece ihtiyacım olursa gelecekte bunları uygulayabiliyorum.
Anonim

1
Bu sadece sormak gibi: Genel olarak polinom zamanındaki bir problemi nasıl çözebilirim? Zilyonlarca sorun var ve her birinin kendine özgü bir çözümü var.
Dave Clarke

3
@DaveClarke: Yerleşmiş teknikler var, bu yüzden sorunun geçerli olduğunu düşünüyorum; daha odaklı bir soru olsa daha iyi olabilir.
Raphael

Yanıtlar:


54

Bir dizi iyi çalışılmış strateji var; uygulamanızda en iyisi olan durum şartlara bağlıdır.

  • En kötü vaka çalışma zamanını iyileştirme
    Probleme özgü kavrayışı kullanarak, sıklıkla naif algoritmayı geliştirebilirsiniz. Örneğin,Vertex Cover için[1]olanalgoritmaları vardır; Bu,naifüzerinde büyük bir gelişmedir ve sizin için örnek boyutlarını izlenebilir hale getirebilir.C < 1.3 Ω ( 2 N )O(cn)c<1.3Ω(2n)

  • Beklenen çalışma zamanını iyileştirme
    Sezgisel tarama kullanarak, çoğu zaman hızlı olan algoritmalar geliştirebilirsiniz. Bunlar pratikte tanıştığınızın çoğunu içeriyorsa, altınsınız. Oldukça ilgili çözücülerin var olduğu SAT örnekleri ve Simplex algoritması (bir polinom problemini çözen, ancak yine de). Genellikle yardımcı olan temel tekniklerden biri dallanma ve ciltlenmedir .

  • Sorunu sınırlayın
    Girdilerinizle ilgili daha fazla varsayım yapabilirseniz, sorun daha kolay olabilir.

    • Yapısal özellikler
      Girdileriniz, problemin çözülmesini kolaylaştıran özelliklere sahip olabilir, örneğin düzlemsellik, iki taraflılık veya grafikler için küçük bir eksik. CLIQUE'un kolay olduğu bazı grafik sınıfı örnekleri için buraya bakın .
    • Girişin sınırlayıcı işlevleri Bakılması gereken
      başka bir şey parametreli karmaşıklıktır ; bazı örnekler parametresi için zamanında bazı problemler çözülebilir (maksimum düğüm derecesi, maksimum kenar ağırlığı, ...) ve sabiti. Eğer bağlı Eğer bir polylogarithmic işlevi tarafından senin ayarında, sen polinom algoritmaları olsun. Saeed Amiri cevabında detayları veriyor .k m k , nO(2knm)kmkn

    • Ayrıca, giriş miktarlarını sınırlandırma Bazı problemler, sözde polinom zamanında çalışan algoritmaları kabul eder , bu onların çalışma zamanı, girişin bir parçası olan bir sayıdaki bir polinom fonksiyonu tarafından sınırlanır ; saf primallik kontrolü bir örnektir. Bu, örneklerinizde kodlanan miktarların makul boyutta olması durumunda, sizin için iyi davranan basit algoritmalara sahip olabileceğiniz anlamına gelir.
  • Sonucu zayıflatma
    Bu, hatalı veya eksik sonuçlara müsamaha göstereceğiniz anlamına gelir. İki ana lezzet vardır:

    • Olasılık algoritmaları
      Sadece bazı olasılıklarla doğru sonucu elde edersiniz. En dikkat çekici Monte-Carlo ve Las Vegas algoritmaları gibi bazı değişkenler vardır . Ünlü bir örnek Miller-Rabin asalet testidir .
    • Yaklaşım algoritmaları
      Artık en uygun çözümleri aramıyorsunuz, neredeyse en uygun çözümleri aradınız. Bazı algoritmalar göreceli olarak kabul eder ("optimumdan iki kat daha kötü değil"), diğerleri mutlak (" artı en iyi değil") hataya bağlanır. Pek çok problem için, ne kadar iyi yaklaşılabildiği açıktır. Polinom zamanında keyfi olarak yaklaştırılabilecek bir kısmı vardır, diğerlerinin buna izin vermediği bilinmektedir; Polinom-zaman yaklaşımı şemalarının teorisini kontrol eder .5

Ayrıntılı bir tedavi için Hromkovič'in Sert Problemleri için Algoritma bölümüne bakın.


  1. Sadelik güzelliktir: Chen Jianer, Iyad A. Kanj, Ge Xia (2005) tarafından tepe örtüsü için geliştirilmiş üst sınırlar

4
Tabii ki, bir Monte Carlo ya da Las Vegas algoritması, NP zorlu bir problemde polytime’da çalışacak gibi görünmüyor
Sasho Nikolov

12

Diğer cevaplar bunu daha teorik bir bakış açısıyla ele almıştır. İşte daha pratik bir yaklaşım.


"Tipik" NP-tamamlanmış karar problemleri için ( "bütün bu kısıtlamaları sağlayan bir şey var mı?" ), Bu her zaman ilk önce deneyeceğim şeydir:

  1. Sorunlu örneğinizi bir SAT örneği olarak kodlayan basit bir program yazın .

  2. Sonra iyi bir SAT çözücüsü kullanın , çalıştırın (sahip olduğunuz en hızlı çok çekirdekli bilgisayarı kullanarak) ve ne olduğunu görün.

Ne kadar süre alabileceği hakkında bir fikir edinmek için önce küçük örneklerle çalışın.


Şaşırtıcı bir şekilde, bu yaklaşım, özellikle şu anki sorununuz için kendi çözücünüzü uygulamaya çalışmaktan çok daha iyidir:

  • SAT çözücüleri çok akıllıca ve iyi optimize edilmişler. Kendi geriye izleme arama uygulamanızı kolayca gerçekleştirir (kodunuzu optimize etmek için ne kadar zaman harcadığınız önemli değil). Ayrıca, tamsayılı doğrusal programlama çözücüler gibi kişisel olmayan birçok alternatifi kolayca geride bırakıyorlar.

  • Bu çok az programlama gerektirir. Adım 1 nispeten basittir ve performans açısından kritik değildir; Python gibi betik dillerini kullanabilirsiniz. Adım 2 için ihtiyacınız olan herşeyi uygulamaya başlamış olan başka biri zaten var.


Tipik NP-sert optimizasyon problemleri için ( "tüm bu kısıtlamaları sağlayan en küçük şeyi bulun" ) bu yaklaşım işe yarayabilir ya da çalışmayabilir.

Eğer Eğer kolayca bir çevirmek karar problemi ( "tatmin bütün bu kısıtlamalara? Bu büyüklükte 4 bir şeyini orada var yok" , "hangi boyutta 3? Hakkında" , büyük, karar problemleri ile yukarıdaki gibi aynı yaklaşımı izleyin).

Aksi takdirde, küçük bir çözüm bulmaya çalışan bir sezgisel çözücüye başvurmak isteyebilirsiniz (mutlaka en küçük çözüm değil). Örneğin:

  1. Sorununuzu (ağırlıklı) bir MAX-SAT örneği olarak kodlayın .

  2. UBCSAT paketindeki sezgisel çözücüleri kullanın . Sezgisel çözücüler önemsiz biçimde paraleldir; yüzlerce bilgisayarı olan bir bilgisayar kümesi bulmaya çalışın. Çözücüleri istediğiniz kadar çalıştırabilir ve şimdiye kadar bulduğunuz en iyi çözümü alabilirsiniz.


8

Parametreli Karmaşıklık

Karşılıksızlığa saldırmanın bir yolu, parametreli karmaşıklık bağlamında problemi düşünmektir.

Gelen parametrized karmaşıklığı bazı parametre (diyelim düzeltilerek sorunu çözmek ). İçinde bazı sorunu çözmek mümkün değilse zaman, biz sorun olduğunu söylemek parametre uysal sabit içinde . Burada sadece bir miktar hesaplanabilir fonksiyondur. FPT olan çok sayıda NP zor problemi vardır, ancak NP'de sabit parametre izlenebilir olmadığına inanılan pek çok problem vardır.f ( k ) p ( n ) k f ( k )kf(k)p(n)kf(k)

Bazı parametreleri düzelterek zamanında bir sorunu çözebilirsek , bu sorunun XP'de olduğu söylenir. XP'nin FPT'ye eşit olmadığına inanıyoruz (tıpkı P inandığımız gibi ). Ancak bu ikisi arasında da birçok sorun var (FPT ve XP) ve biz de bir H-hiyerarşisi olan bir hiyerarşi (aslında birkaç tane) tanımladık. W hiyerarşisinde, NP-sınıfı derslerde indirim gibi indirimleriniz var, sadece çoklu zaman indirimleri aramıyoruz, sadece bir FPT indirimine ihtiyacımız var. W sınıfı [0], FPT sınıfıdır.O(nf(k))

Bunlar, W hiyerarşisinin farklı sınıflarındaki bazı örnekler:

  1. Köşe örtüsü FPT'dir (yani, yönlendirilmemiş grafiklerdeki köşe noktaları ayrıktır)
  2. Bağımsız set ve Clique W [1] -complete
  3. Hakim küme W [2] -Tamamlandı.

Bunlar, NP problemlerini daha kesin bir şekilde sınıflandırmak için bir başka karmaşıklık seviyesidir ve daha fazlasını istiyorsanız, Parametreli Devre Karmaşıklığı ve W Hiyerarşisine Downey ve arkadaşlarının (1998) bakabilirsiniz .

Ve eğer daha fazlasını istiyorsanız, Flum ve Grohe'nin Parametreli Karmaşıklık Teorisi'ni okumak iyidir .

Ve sonunda:

Parametreli karmaşıklığa karşı yaklaşım algoritmaları:

Sorun FPTAS'a sahipse (tamamen polinom-zaman yaklaşımı yaklaşımı şeması ) varsa, aynı zamanda FPT'dir (ki bu açıktır) Ama ters yönde iyi bilinen hiçbir şey yoktur, ayrıca PTAS ve XP ilişkisi üzerine bazı çalışmalar vardır, fakat PTAS ve W hiyerarşisi arasındaki ilişki çok sıkı değil (en azından şu anda bilmiyorum).

Ayrıca bazı durumlarda, bazı farklı parametreler belirleyebiliriz, örneğin: grafikteki en uzun yolun uzunluğu sınırlanmış ve bir çözümün boyutu sınırlanmış (örneğin, geribildirim tepe noktası kümesinde), ...

Örnek pratik kullanımlar:

Bazı insanlar parametreleştirilmiş karmaşıklığın pratikte işe yaramaz olduğuna inanıyor olabilir. Ama bu yanlış. Parametrelenmiş algoritmaların çoğu, bazı parametreleri düzeltebileceğiniz gerçek dünya uygulamalarında keşfedilmiştir. İşte size bir örnek:

  1. Parametreli karmaşıklıktaki ana teoremlerden biri, Courcell'e yaptığı gibi , parametreleştirilmiş bazı problem sınıfları için çalışma zamanının bir algoritmasını sağlar . kulenin sayısı dır , yani anlamına gelir . Ancak, bir grup algoritmasını bazı özel modifikasyonlar ile uyguladı ve şu anda Almanya'daki bazı metro istasyonlarında kullanılan tepe örtüsü için oldukça hızlı bir algoritma elde ettiler.2 O ( k ) k = 102...2O(n)2O(k)k=10

  2. TSP için en hızlı ve en doğru sezgisel algoritmalardan biri şudur: Sorunun parametrelendirilmesini kullanan tur birleştirme ve dal ayrıştırması (doğrudan değil, fakat dal ayrışması ve kullandıkları dinamik programlama yaklaşımı bazı iyi varsayımlara dayanmaktadır).


5

NP'nin eksiksizliği, en kötü durumda kararsızlıkla ilgilidir. Hangi problem üzerinde çalıştığınıza bağlı olarak, pek çok örnek sınıfı pratikte makul bir sürede çözülebilir (iyi çalışma süreleri için daha özel bir algoritmaya ihtiyaç duyabilirsiniz).

Boolean Satisfiability veya Integer Linear Programming gibi iyi çözücülerle ilgili bir probleminizde probleminizden etkin bir düşüş olup olmadığını görmeyi düşünün.


4

Genel olarak üç seçeneğiniz var: Birincisi , probleminizin özel durumlarını dikkate almanız . Bazı özel durumlarda, sorunu çözülebilir polynomially örneğin basit bir yolu bulunup bulunmadığının belirlenmesi olabilir için için keyfi yönettiği grafikte NP-Complete ama ne zaman (doğrusal) polinom olacak indirgenemez. İkinci seçenek, sorununuzu çözmek için iyi bir tahmin algoritması kullanmaktır . Tahmin algoritmaları, probleminize en yakın cevapları sağlar. Önceki seçenekleri kullanamazsanız, geriye kalan tek yol şudur : sorununuzu üssel zamanda çözmek için tolere edilebilir bir algoritma kullanmakv j v k G GvivjvkGG. Üstel algoritmalar arasında, bazılarının çalışma süresi, probleminizin giriş boyutu belirli bir değerden düşük olduğunda tolere edilebilir.


2

Bazı cevaplarda kısaca değinilmiş olmasına rağmen, pratikte NP-tamamlanmış problemlerin her zaman çözüldüğünü (veya yaklaştığını) vurgulayayım. NP-komple problemleri pratikte çözebilmenizin ana nedeni şudur:

Uygulamada karşılaşılan örnekler "en kötü durum" değildir.

Tutarsızlık için başka bir nedeni:

Sezgisel algoritmaları resmi olarak analiz etmek zordur.

Uygulamada, NP-tamam problemlerinizi çözmek için sezgisel algoritmalar kullanır ve en iyisini umarsınız. Sonuçlar genellikle çarpıcı.

Diğer cevaplarda değinilen bir başka konu:

Bazen üstel algoritmalar yeterince hızlıdır.

Tabii ki bu soruna bağlı. Büyük veriler söz konusu olduğunda bunun tam tersi bir karşılığımız olur:

Bazen tek uygulanabilir algoritmalar kuasilindir.


Korkarım buradaki kalabalık teorik olarak eğimli. Ana stackexchange sitesinde daha iyi cevaplar alabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.