To pytanie zostało zainspirowane komentarzem na StackOverflow .
Oprócz znajomości problemów NP-zupełnych z książki Garey Johnson i wielu innych; czy istnieje ogólna zasada, aby wiedzieć, czy problem wygląda jak NP-zupełny?
Nie szukam czegoś rygorystycznego, ale czegoś, co działa w większości przypadków.
Oczywiście za każdym razem, gdy musimy udowodnić, że problem jest NP-zupełny lub niewielki wariant NP-zupełny; ale zanim pospieszysz do dowodu, wspaniale byłoby mieć pewność co do pozytywnego wyniku dowodu.
complexity-theory
np-complete
intuition
Виталий Олегович
źródło
źródło
Odpowiedzi:
To jest moje osobiste podejście do ustalenia, czy problem (tj. Język ) jest NP-zupełny, czy nie. Jeśli oba te warunki są zweryfikowane:L.
wtedy może być bardzo trudne do NP.L.
Na przykład dla problemu sumy podzbiorów muszę wymienić wszystkie podzbiory i sprawdzić, czy istnieje taki, którego suma wynosi zero. Czy mogę podzielić S na dwa mniejsze podzbiory S 1 i S 2, w których sprawdzę podobną właściwość? Humm ... niezupełnie. Może gdybym sprawdził wszystkie kombinacje S 1 i S 2, ale byłoby to naprawdę długie ...S. S. S.1 S.2) S.1 S.2)
Zwykle umiejętność dzielenia się na mniejsze kawałki jest dobrym wskaźnikiem problemu w P. Jest to podejście dziel i zwyciężaj . Na przykład, aby znaleźć najkrótszą drogę między dwoma punktami, można użyć tę właściwość, że jeśli najkrótsza droga od do C przejść przez B to nie jest dłużej niż najkrótszej ścieżki od A do B plus najkrótsza z B do C .ZA do b ZA b b do
Szczerze mówiąc, takie podejście jest bardzo podstawowe: staram się znaleźć algorytm (wielomianowy) dla danego problemu. Jeśli nie mogę go znaleźć, to z mojego punktu widzenia problem staje się „trudny”. Potem pojawia się całe rozumowanie dotyczące NP-kompletności: czy będę w stanie zakodować istniejący problem NP-complete na ten problem? (A ponieważ jest to zwykle znacznie trudniejsze, próbuję jeszcze raz znaleźć algorytm wielomianowy ..)
Podejrzewam, że jest to zwykły sposób myślenia. Jednak nadal trudno jest zastosować w przypadku nieznanych problemów. Osobiście pamiętam, jak zaskoczył mnie jeden z pierwszych przykładów kompletności NP: powiedziano mi: problem kliki . Sprawdzenie tego wydawało się takie proste! Przypuszczam, że to doświadczenie ma z tym wiele wspólnego. Również intuicja może być czasem bezużyteczna. Pamiętam, że kilkakrotnie powiedziano mi dwa prawie identyczne problemy, ale jeden był w P, a drugi z niewielką zmiennością był NP-zupełny.
Mam jeszcze dobry przykład (potrzebuję tutaj pomocy), ale jest to problem z korespondencją pocztową : jest to problem nierozstrzygalny, ale niektóre warianty są rozstrzygalne.
źródło
Inna perspektywa twardości problemów pochodzi od społeczności graczy i łamigłówek, gdzie ogólna zasada brzmi: „problemy są tak trudne, jak to tylko możliwe” (a wyjątki wynikają z ukrytych struktur problemu - przykład wyznacznika Massimo w komentarze są tego dobrym przykładem); sztuczka polega na zrozumieniu, jak trudny może być problem:
źródło