NP-tamam olduğunu bir problemi ispatlamak için problemler arasında nasıl indirimler yapabilirim?


27

Karmaşıklık kursu alıyorum ve NPC sorunları arasında bir düşüşle karşılaşmakta güçlük çekiyorum. Sorunlar arasındaki azalmaları nasıl bulabilirim? Kullanabileceğim genel bir numara var mı? NPC olduğunu kanıtlamamı isteyen bir soruna nasıl yaklaşmalıyım?


4
Hayal kırıklığına uğrattığım için üzgünüm, hepsini çözen bir yöntem olduğunu sanmıyorum. Hayattaki birçok sorun gibi, her biri eşsizdir .. Umarım, zamanla, her birini nasıl çözeceğinize dair doğru bir ipucu alırsınız.
Ran G.

1
Bu tür sorunlara nasıl yaklaşılacağına dair bazı yararlı kurallar var mı? NPC olduğunu kanıtlamamı isteyen bir soru gördüğümde tamamen kayboldum. Onlara nasıl yaklaşmalıyım?
Anonim

Yanıtlar:


45

Burada sihirli mermi yok; NP sertliği kanıtları zordur. Ancak, bütün bu deliller için genel bir çerçeve vardır. NP sertliği kanıtları ile mücadele eden birçok öğrenci, ne yapmaları gerektiği konusunda kafa karışıklığı yaratır ve bu, nasıl yapılacağını çözmeyi imkansız hale getirir . Öyleyse burada NP-zor bir problemi kanıtlamak için ne yapmalı.

İlk önce, sadece ev ödevi yapmadığınız sürece, hangi NP-zor sorununun sizin sorununuza indirgeneceğine karar vermelisiniz . Bu büyük ölçüde "koku" meselesidir. 3 sayısı sorun bildiriminin herhangi bir yerinde belirirse, veya veya dan azaltmayı deneyin . (Evet, ciddiyim.) Eğer probleminiz optimal bir sonuç veya permütasyon veya yol bulma ile , veya den azaltmayı deneyin . Sorununuz belirli bir özelliğe sahip en küçük alt kümeyi isterse, ; belirli bir özelliğe sahip en büyük alt kümeyi isterse, deneyin.3 O l O r 3 P , bir R t i t i o n , H bir m, I l T O , n ı bir n- Cı- y C l e lH , bir m, I l T O , n ı bir n- p , bir t h l I q u e ı n d , e3SAT3Color3PartitionHamiltonianCycleHamiltonianPathCliqueIndependentSet. Sorununuz uçakta bir şey yapmayı içeriyorsa, veya . Ve bunun gibi. Sorununuz hiçbir şey gibi " ", veya muhtemelen en iyi bahistir.PlanarCircuitSATPlanarTSP3SATCircuitSAT

Açıkçası, tüm bu sorunların nasıl tanımlandığını ve sorunun ne kadar basitleştiğini, o kadar iyi, zaten tam olarak bilmeniz gerekir . Sonuç sonunda göründüğü kadar güzel, veya veya veya .MinesweeperTetrisOneCheckersMoveSuperMarioBros

İkincisi, gerçek azaltma. X sorununu (bildiğiniz NP zorudur) Y sorununa (kanıtlamaya çalıştığınız NP zor), X'in keyfi bir örneğini Y'nin yasal bir örneğine dönüştüren bir algoritma tanımlamanız gerekir. İndirgeme algoritmasının, X örneğinin her "özelliği" için özel bir şey yapması gerekir, her "özellik" için çıktının kısmına genellikle gadget denir .

Ama bir özellik nedir? Bu X sorununa bağlı. Örneğin:

  • Bir örneğini dönüştürmek için, her değişken için ve giriş formülündeki her bir cümle için bir gadget'a ihtiyacınız olacaktır. Her değişken gadget'ın "true" ve "false" ile eşleşen iki "durumu" olması gerekir. Her cümle gadget'ı, her biri bir şekilde bu cümle içindeki harflerden en az birini doğru olmaya zorlayan birden fazla "duruma" sahip olmalıdır. (Durumlar, azaltma algoritmasının çıktısının bir parçası değildir.)3SAT

  • Bir örneğini dönüştürmek için, her köşe ve giriş grafiğinin her kenarı için bir gadget'a ve üç rengi tanımlamak için başka bir gadget'a ihtiyacınız olacaktır.3Color

  • Bir örneğini dönüştürmek için, her giriş için, her kablo için ve giriş devresindeki her kapı için bir gadget'a ihtiyacınız olacaktır.PlanarCircuitSat

Gadget gerçek formu problemi Y, sen azaltarak olduğunuza bağlıdır için . Örneğin, grafiklerle ilgili bir problemi azaltırsanız, gadget'larınız küçük altyazılar olacaktır; Wikipedia makalesine bakınız. Zamanlama ile ilgili bir problemi azaltıyorsanız, her gadget programlanacak bir iş kümesi olacaktır. Mario ile ilgili bir problemi azaltıyorsanız , her bir araç bir dizi blok, tuğla ve Koopas olacaktır.

Her iki problem de aynı nesneyi içeriyorsa, bu kafa karıştırıcı olabilir. Örneğin, hem X hem de Y, grafiklerle ilgili sorun ise, algoritmanız bir grafiği (bir X örneği) farklı bir grafiğe (Y örneği) dönüştürecektir. İşaretinizi akıllıca seçin, böylece bu iki grafiği birbirine karıştırmazsınız. Ayrıca birden fazla mürekkep rengi kullanmanızı şiddetle tavsiye ederim.

Son olarak, azaltma algoritmanızın üç özelliği sağlaması gerekir:

  • Polinom sürede çalışır. (Bu genellikle kolaydır.)

  • Küçültme algoritmanıza girdi olarak pozitif bir X örneği verilirse , çıktı olarak pozitif bir Y örneği oluşturur.

  • İndirgeme algoritmanızın çıktı olarak pozitif bir Y örneği üretmesi durumunda, girdi olarak pozitif bir X örneği verilmiş olması gerekir .

Burada önemli bir incelik var. Kişisel azaltma algoritması sadece tek yönde çalışır gelen X örneklerini için Y'nin örnekleri, ancak algoritma doğru kanıtlayan her iki yönde dönüşümü muhakeme gerektirir. Ayrıca, azaltma algoritmanızın belirli bir X örneğinin pozitif mi yoksa negatif mi olduğunu söyleyemeyeceğini de unutmayın - bu çok zor bir zamanda NP-zor bir problemin çözülmesini gerektirir!

Budur Ne . Nasıl sadece uygulama ile birlikte geliyor.


5
gelen indirimler için (ve genellikle benzer "yerel / küresel yapıya sahip olan sorunlar"), önce tek bir cümle örneği için bunu yapmayı denemek iyi bir fikir olabilir . Bu, maddeler için hangi aracı kullanmanız gerektiği hakkında bir fikir verebilir. Bir fıkra için gadget bulmaya sonra, indirgeme Her deyim için bu cihazların birini koymak ve daha sonra olacak şekilde küresel durumunu zorlamak farklı maddelerinde görünen bir değişkenin geçtiği için doğruluk değerleri tutarlı olmalıdır (yani bir önermeler değişken olamaz olmak bir yan tümcesinde ve ) başka. 3 S A , T P T R u e f bir L ler e3SAT3SATptruefalse
Kaveh,

1
"İndirgeme algoritmanızın çıktı olarak pozitif bir Y örneği oluşturması durumunda, girdi olarak X'in pozitif bir örneği verilmiş olmalı ": Bu koşulu "İndirgeme algoritmanıza negatif bir örnek verilmişse" yazması daha sezgisel görünmekle birlikte girdi olarak X, çıktı olarak Y negatif bir örneğini oluşturur, bu iki koşulun eşdeğer olduğunu ve JeffE'nin yazdığı yazıyı yazmanın ne kadar kolay olduğunu, çünkü her durumda "bir şey" uyguladığınızı (ya da X'in pozitif örneği veya çalışacak olan pozitif Y örneği).
j_random_hacker 9:18

11

JeffE en yaygın stratejiyi ana hatlarıyla belirtir: çok sayıda NP tamamlanmış sorunu bilir, çok iyi uyan bir tane bulur ve kolay azaltmayı sağlar.

Geçerli bir başka strateji de her zaman 3SAT (veya başka bir problem) kullanmaktır. Bu, bazı azalmaları daha karmaşık hale getirebilir, ancak bunun ötesinde, diğer sorun türlerinde doygunluk ifade etme konusunda çok fazla deneyime sahip olmanız gerekir . Böylece iyi bir azaltma ortağı bulma zamanından tasarruf edersiniz (çıkmazlar dahil) ve deneyiminizin, zor olsa bile azaltmayı hızlı bir şekilde yapmanıza izin vermesini umarsınız.

Bu yaklaşımın bazı meta güzelliği de vardır: (3) SAT, NP'nin bütünlüğünün doğrudan kanıtlandığı birkaç problemden biridir. Bu nedenle, yalnızca bu kanıta güvenmek, "prova ağacınızı" düz tutar ve uzun indirgeme zincirlerinden kaçınır.


3
Sınırlı Durma sorununun, sınır tekdüze olarak verildiğinde NP tamamlanmış olduğunu doğrudan kanıtlamak zor değildir ve sorunun tamamının azaltılması oldukça yararsız olsa da, bazı NP tamamlanmış bir sorunun var olduğunu kanıtlamanın kolay bir yoludur .
Alex ten Brink,

3
Doğrudan NP-tamamlanmış olduğu kanıtlanmış tek sorunun bu olduğu iddiası konusunda emin değilim. Aslında bunu kesin bir şekilde yorumlarsanız kesinlikle yanlıştır. Cook'un 1971 tarihli makalesi TAUT SAT değil (Karp azaltma değil Cook azaltmalarını kullanıyor) hakkında konuşuyor (ispatın SAT'ın Karp azaltmaları altında NP-tamam olduğunu kanıtladığı da kolay bir gözlemdir).
Kaveh

@Kaveh Huh? Tautology Co-Np tamamlandı ve bu nedenle NP (tamamlanmadı) olduğu bilinmiyor. Ama Cook'un gazetesini okumamıştım.
Albert

1
@Albert, öyleyse okumalısın. Cook azaltmaları ile NP ve coNP'yi ayırt edemezsiniz.
Kaveh
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.