Perché è importante dimostrare che un problema è NP-completo?


Risposte:


26

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.


Quindi l'obiettivo iniziale è quello di trovare un algoritmo efficiente per P ma dal momento che sembra irrealizzabile si assume che P sia computazionalmente difficile e quindi le tue risposte spiegano il resto?
Ali,

Vogliamo dimostrare che il nostro problema P è difficile dal punto di vista computazionale, ma non vogliamo presumere che P sia difficile da dimostrare che P è difficile :) Invece, se si dimostra che P è NP-completo (o anche NP-duro ma ignoriamo la distinzione qui), hai dimostrato che se uno su centinaia di problemi già ben esaminati è difficile, allora anche P è difficile. Questo perché se esistesse un algoritmo efficiente per P, ci sarebbero anche algoritmi efficienti per ciascuna delle centinaia di problemi.
Arnab,

4
@Ali: ti consiglio vivamente di leggere un libro introduttivo sulla teoria della complessità. Questo sito web non è in realtà un forum per tali domande, ma più per domande a livello di ricerca.
Arnab,

5
@Ali: ti consiglio vivamente di leggere Garey e Johnson . Il famoso cartone animato nel libro è assolutamente da vedere!
Tsuyoshi Ito,

9

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.


Bel punto per tre modi per rilassare il problema! Immagino che gli algoritmi randomizzati rientrino nella categoria "efficiente e inesatto e generale".
Hsien-Chih Chang 張顯 之

Veramente? Non tutti gli algoritmi randomizzati sono inesatti.
Jeffε

E ovviamente hai ragione, JeffE. Inoltre, capisco che stai (o stavi) istruendo un mio ex studente in algoritmi! Quanto al punto di Hsien-Chih, non credo che gli algoritmi randomizzati si adattino bene a questo schema. Certamente alcuni algoritmi randomizzati (gli algoritmi genetici e le reti neurali vengono in mente) sono inesatti ma efficienti e generali, ma alcuni algoritmi randomizzati sono abbastanza esatti: considera l'algoritmo per verificare che un numero sia il primo! È un algoritmo casuale, ma sono abbastanza sicuro che nessuno abbia mai ottenuto un non-prime da qualsiasi implementazione ragionevole.
Peter Boothe,

5

NPcomplete

NPcomplete, 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).

NPcomplete

NPcomplete

P=NP3SAT

NPcompleteCLIQUE

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.


2
Molte persone risolvono in pratica i problemi NP-completi, anche se sono NP difficili da approssimare. Nel caso medio molti problemi si rivelano molto più facili, sebbene ciò possa essere difficile da mostrare; è ancora più difficile provare qualcosa sugli algoritmi euristici che funzionano bene nella pratica. Suggerisco all'architetto software di chiedere a qualcuno se il problema è "veramente" difficile prima di rinunciare e cambiare il suo design.
Yuval Filmus,

Non sto dicendo che il design debba cambiare. L'uso di un algoritmo euristico o di approssimazione mi sembra (falsamente?) Come cambiare il problema ... poiché sai che stai chiedendo soluzioni meno precise (sono accettabili? Dipende dall'applicazione!).
Chazisop,

3

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.


3

pppp


1
Ho sentito che c'è stato un tempo in cui hai dimostrato che alcuni problemi sono NP-completi, avrai la tua tesi di dottorato. È vero?
Hsien-Chih Chang 張顯 之

@ Hsien-ChihChang 張顯 之: non posso commentarlo, ma quei risultati erano sicuramente molto più popolari qualche decennio fa. In questi giorni sembra sempre più difficile pubblicare un articolo in cui "solo" provi un risultato di durezza (con l'eccezione di "problemi famosi" ovviamente), mentre quello non sarebbe stato un problema negli anni '70 -'80, a giudicare dagli abbondanza di questo tipo di documenti durante quel periodo.
Anthony Labarre,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.