Risposte:
Ali, bella domanda.
Supponiamo di voler dimostrare che qualche problema P è difficile dal punto di vista computazionale. Ora, puoi ipotizzare che P sia difficile solo in base al fatto che non abbiamo ancora algoritmi efficienti per questo. Ma questa è una prova piuttosto fragile, no? Potrebbe essere che ci siamo persi un bel modo di guardare P, il che renderebbe molto facile la risoluzione. Quindi, per ipotizzare che P sia difficile, vorremmo accumulare più prove. Le riduzioni forniscono uno strumento per fare esattamente questo! Se riusciamo a ridurre qualche altro problema naturale da Q a P, allora abbiamo dimostrato che P è difficile almeno quanto Q. Ma Q potrebbe essere un problema proveniente da un'area matematica completamente diversa, e le persone potrebbero aver lottato per decenni per risolvere anche Q . Quindi, possiamo vedere il nostro fallimento nel trovare un algoritmo efficiente per Q come prova che P è difficile. Se abbiamo molti di questi Q '
Questo è esattamente ciò che fornisce la teoria della completezza NP. Se provi che il tuo problema è NP-completo, allora hai legato la sua durezza alla durezza di centinaia di altri problemi, ognuno di notevole interesse per varie comunità. Quindi, moralmente parlando, puoi essere certo che il tuo problema è davvero difficile.
Dimostrare un problema NP-Complete è un successo di ricerca perché ti libera dal dover cercare una soluzione efficiente ed esatta per il problema generale che stai studiando. Dimostra che il tuo problema è un membro di una classe di problemi così difficile che nessuno è stato in grado di trovare un algoritmo efficiente ed esatto per nessuno dei problemi, e una soluzione del genere implicherebbe una soluzione per tutti i i problemi.
Di solito è un trampolino di lancio, perché il tuo problema è ancora lì: devi semplicemente rilassare le tue esigenze. Di solito le persone cercano di capire come rilassare uno o più "efficienti", "esatti" o "generali". Inefficiente, esatto e generale è il tentativo di trovare costanti sempre migliori nell'esponente di questi algoritmi. Efficiente e inesatto e generale è lo studio degli algoritmi di approssimazione. Efficiente ed esatto ma non generale è lo studio della tracciabilità dei parametri fissi e la ricerca di sottoclassi di input per le quali è possibile trovare algoritmi efficienti.
, hai alcune prove di questa tua congettura e dovresti iniziare a considerare un approccio alternativo (ad esempio, alterare il problema in modo che diventi più facile).
Riassumendo, caratterizzando un problema puoi usare tecniche comuni. Studiando la classe a cui è correlato, puoi pensare a un livello astratto, senza preoccuparti delle specifiche di questo particolare problema, che è comune in matematica e scienze in generale. Lavorare con le classi invece dei singoli membri ti consente di utilizzare tecniche note e inoltre applicare le tue intuizioni a un numero maggiore di oggetti, anziché a uno solo.
Ogni problema ha diverse connessioni con altri problemi. Inoltre, ci sono relazioni tra un problema e classi di complessità.
Pertanto, classificare un problema come NPC di solito ci fornisce informazioni su altri problemi, nonché sulle classi di complessità.
Ad esempio, prendi il problema dell'isomorfismo grafico (GI). Nel seguente documento:
Uwe Schöning, L' isomorfismo grafico è nella bassa gerarchia , Atti del 4 ° Simposio annuale sugli aspetti teorici dell'informatica , 1987, 114-124; anche: Journal of Computer and System Sciences, vol. 37 (1988), 312–323.
è dimostrato che se GI ∈ NPC, la gerarchia polinomiale (PH) crolla al suo secondo livello; quale sarà una svolta importante nella teoria della complessità strutturale.