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