Quali sono le differenze tra NP, NP-Complete e NP-Hard?


1107

Quali sono le differenze tra NP , NP-Complete e NP-Hard ?

Sono a conoscenza di molte risorse in tutto il web. Mi piacerebbe leggere le tue spiegazioni e il motivo è che potrebbero essere diverse da ciò che è là fuori o c'è qualcosa di cui non sono a conoscenza.

Risposte:


1438

Presumo che tu stia cercando definizioni intuitive, dal momento che le definizioni tecniche richiedono parecchio tempo per capire. Prima di tutto, ricordiamo un concetto preliminare necessario per comprendere quelle definizioni.

  • Problema decisionale : un problema con una risposta sì o no .

Ora, definiamo quelle classi di complessità .

P

P è una classe di complessità che rappresenta l'insieme di tutti i problemi di decisione che possono essere risolti in tempi polinomiali .

Cioè, data un'istanza del problema, la risposta sì o no può essere decisa in tempo polinomiale.

Esempio

Dato un grafico collegato G, i suoi vertici possono essere colorati usando due colori in modo che nessun bordo sia monocromatico?

Algoritmo: inizia con un vertice arbitrario, coloralo di rosso e tutti i suoi vicini blu e continua. Interrompi quando esaurisci i vertici o sei costretto a creare un bordo con entrambi i punti finali dello stesso colore.


NP

NP è una classe di complessità che rappresenta l'insieme di tutti i problemi decisionali per i quali i casi in cui la risposta è "sì" hanno prove che possono essere verificate in tempo polinomiale.

Ciò significa che se qualcuno ci fornisce un'istanza del problema e un certificato (a volte chiamato testimone) alla risposta sì, possiamo verificare che sia corretta in tempo polinomiale.

Esempio

La fattorizzazione in numeri interi è in NP. Questo è il problema che ha dato numeri interi ne m, c'è un numero intero fcon 1 < f < m, tale da fdividere n( fè un piccolo fattore di n)?

Questo è un problema decisionale perché le risposte sono sì o no. Se qualcuno ci consegna un'istanza del problema (quindi ci consegna numeri interi ne m) e un numero intero fcon 1 < f < m, e affermano che fè un fattore di n(il certificato), possiamo controllare la risposta in tempo polinomiale eseguendo la divisione n / f.


NP-completo

NP-completo è una classe di complessità che rappresenta l'insieme di tutti i problemi Xin NP per cui è possibile ridurre qualsiasi altro problema NP Ya Xin tempo polinomiale.

Intuitivamente ciò significa che possiamo risolvere Yrapidamente se sappiamo come risolvere Xrapidamente. Precisamente, Yè riducibile a X, se c'è un algoritmo di tempo polinomiale fdi trasformare le istanze ydi Ya istanze x = f(y)di Xin tempo polinomiale, con la proprietà che la risposta a yè sì, se e solo se la risposta a f(y)è sì.

Esempio

3-SAT. Questo è il problema in cui ci viene data una congiunzione (AND) di disgiunzioni (OR) a 3 clausole, dichiarazioni del modulo

(x_v11 OR x_v21 OR x_v31) AND 
(x_v12 OR x_v22 OR x_v32) AND 
...                       AND 
(x_v1n OR x_v2n OR x_v3n)

dove ognuno x_vijè una variabile booleana o la negazione di una variabile da un elenco predefinito finito (x_1, x_2, ... x_n).

Si può dimostrare che ogni problema NP può essere ridotto a 3-SAT . La prova di ciò è tecnica e richiede l'uso della definizione tecnica di NP ( basata su macchine di Turing non deterministiche ). Questo è noto come teorema di Cook .

Ciò che rende importanti i problemi NP-completi è che se si trova un algoritmo di tempo polinomiale deterministico per risolverne uno, ogni problema NP è risolvibile in tempo polinomiale (un problema per domarli tutti).


NP-hard

Intuitivamente, questi sono i problemi che sono tanto difficili quanto i problemi NP-completi . Si noti che i problemi NP-hard non devono necessariamente trovarsi in NP e non devono essere problemi di decisione .

La definizione precisa qui è che un problema Xè NP-difficile, se c'è un problema NP-completo Y, che Yè riducibile a Xin tempo polinomiale .

Ma poiché qualsiasi problema NP-completo può essere ridotto a qualsiasi altro problema NP-completo in tempo polinomiale, tutti i problemi NP-completi possono essere ridotti a qualsiasi problema NP-difficile in tempo polinomiale. Quindi, se esiste una soluzione a un problema NP-difficile in tempo polinomiale, esiste una soluzione a tutti i problemi NP in tempo polinomiale.

Esempio

Il problema di arresto è un problema NP-difficile. Questo è il problema che ha dato un programma Pe input I, si fermerà? Questo è un problema decisionale ma non si trova in NP. È chiaro che qualsiasi problema NP completo può essere ridotto a questo. Come altro esempio, qualsiasi problema NP completo è NP-difficile.

Il mio problema preferito NP-completo è il problema Minesweeper .


P = NP

Questo è il problema più famoso nell'informatica e una delle più importanti questioni in sospeso nelle scienze matematiche. In effetti, il Clay Institute offre un milione di dollari per una soluzione al problema (la scrittura di Stephen Cook sul sito Web di Clay è abbastanza buona).

È chiaro che P è un sottoinsieme di NP. La domanda aperta è se i problemi NP abbiano o meno soluzioni deterministiche di tempo polinomiale. Si ritiene in gran parte che non lo facciano. Ecco un eccezionale articolo recente sull'ultimo (e l'importanza) del problema P = NP: lo stato del problema P contro NP .

Il miglior libro sull'argomento è Computer e intrattabilità di Garey e Johnson.


32
@Paul Fisher: mostrerò che SAT è riducibile al problema di arresto in tempo polinomiale. Considera il seguente algoritmo: dato come input una proposizione Isulle nvariabili, prova tutte le 2^npossibili assegnazioni alle variabili e fermati se uno soddisfa la proposizione e altrimenti entra in un ciclo infinito. Vediamo che questo algoritmo si ferma se e solo se Iè soddisfacente. Quindi, se avessimo un algoritmo temporale polinomiale per risolvere il problema di arresto, potremmo risolvere SAT in tempo polinomiale. Pertanto, il problema di arresto è NP-difficile.
Jason,

6
@Jason - Non puoi ridurre un problema decidibile a un problema indecidibile in quel modo. I problemi risolvibili devono dare una risposta affermativa o negativa definitiva per essere considerati decidibili. The Halting Problem non ha una risposta definitiva sì o ora poiché una risposta arbitraria potrebbe gettare qualsiasi soluzione in un ciclo.
rjzii,

11
@Rob: Sì, posso. La definizione di riducibile non richiede che il problema da ridurre sia risolvibile. Questo vale sia per le riduzioni multiple che per le riduzioni di Turing.
Jason,

5
@Rob: Bene, ok, se vuoi continuare. Innanzitutto, "Decidable" non è sinonimo di "problema decisionale" come lo hai usato. "Decidibile" significa, approssimativamente, che esiste un "metodo efficace" per determinare la risposta. "Metodo efficace", ovviamente, ha una definizione tecnica. Inoltre, "decidibile" può anche essere definito in termini di "funzioni calcolabili". Quindi, il problema dell'arresto è un problema decisionale ("Il programma si ferma?" È una domanda sì / no) ma è indecidibile; non esiste un metodo efficace per determinare se si fermerà o meno un'istanza del problema di arresto.
Jason,

21
L'uso del problema Halting come "classico esempio" del problema NP-hard non è corretto. È come dire: "L'Oceano Pacifico è un classico esempio di acquario d'acqua salata".
Michael

261

Mi sono guardato intorno e ho visto molte lunghe spiegazioni. Ecco un piccolo grafico che può essere utile per riassumere:

Nota come la difficoltà aumenta dall'alto verso il basso: qualsiasi NP può essere ridotto a NP-Completo e qualsiasi NP-Completo può essere ridotto a NP-Duro , tutto in tempo P (polinomiale).

Se riesci a risolvere una classe di problemi più difficile in P time, ciò significa che hai trovato come risolvere tutti i problemi più facili in P time (ad esempio, dimostrando P = NP, se capisci come risolvere qualsiasi problema NP-Complete in P time).

____________________________________________________________
| Tipo di problema | Verificabile in tempo P | Risolvibile in tempo P | Difficoltà crescente
___________________________________________________________ | |
| P | Sì | Sì | |
| NP | Sì | Sì o No * | |
| NP-completo | Sì | Sconosciuto | |
| NP-Hard | Sì o No ** | Sconosciuto *** | |
____________________________________________________________ V

Note Yeso Novoci:

  • * Un problema NP che è anche P è risolvibile in tempo P.
  • ** Un problema NP-Hard che è anche NP-Complete è verificabile in P time.
  • *** Potrebbero esserci problemi NP-Complete (che formano tutti un sottoinsieme di NP-hard). Il resto di NP non lo è.

Ho anche trovato questo diagramma abbastanza utile nel vedere come tutti questi tipi corrispondano tra loro (presta più attenzione alla metà sinistra del diagramma).


Ho un dubbio legato alla tua risposta. L'ho fatto in una domanda separata, ma mi è stato chiesto di pubblicarlo qui. Potete per favore aiutarmi qui? stackoverflow.com/questions/21005651/…
Srikanth,

Non è noto se i problemi NP-completi siano risolvibili in tempi polinomiali. Inoltre, i problemi NP-completi sono NP-difficili, quindi alcuni problemi NP-difficili sono verificabili in tempo polinomiale e possibili alcuni risolvibili anche in tempo polinomiale.
Falk Hüffner,

Questa tabella è errata e contraddittoria. Anche se presumi che NP! = P, che non è stato ancora dimostrato, sarebbe comunque errato. Ad esempio, la classe NP-Hard include problemi NP-Complete; pertanto la tabella afferma che i problemi NP-Complete sono verificabili contemporaneamente in tempo polinomiale e non verificabili in tempo polinomiale.
Michael,

3
@ FalkHüffner Grazie, la tabella è stata aggiornata (si è verificato un errore nella traduzione dal diagramma di Venn).
Johnson Wong,

1
@PeterRaeves Tutti i problemi NP-completi sono NP-hard, per definizione: NP-complete = (NP e NP-hard). L'inverso non è vero: ci sono problemi (come l'Halting Problem) in NP-hard che non sono in NP-complete. "NP (non risolvibile in tempo polinomiale)" - questo non significa NP. NP è "Non deterministico-polinomiale". Tutti i problemi in P sono anche in NP. Se l'inverso è vero è notoriamente sconosciuto.
Jim Balter,

73

Questa è una risposta molto informale alla domanda posta.

3233 può essere scritto come il prodotto di altri due numeri maggiori di 1? Esiste un modo per percorrere un sentiero attorno a tutti e sette i ponti di Königsberg senza prendere due ponti? Questi sono esempi di domande che condividono un tratto comune. Potrebbe non essere ovvio come determinare in modo efficiente la risposta, ma se la risposta è "sì", c'è una prova breve e rapida da verificare. Nel primo caso una fattorizzazione non banale di 51; nel secondo, un percorso per camminare sui ponti (adattando i vincoli).

Un problema decisionale è una raccolta di domande con risposte sì o no che variano solo in un parametro. Pronuncia il problema COMPOSITO = {"È ncomposto": nè un numero intero} o EULERPATH = {"Il grafico Gha un percorso di Eulero?": GÈ un grafico finito}.

Ora, alcuni problemi di decisione si prestano ad algoritmi efficienti, se non ovvi. Euler ha scoperto un algoritmo efficiente per problemi come i "Sette ponti di Königsberg" oltre 250 anni fa.

D'altra parte, per molti problemi di decisione, non è ovvio come ottenere la risposta, ma se si conoscono informazioni aggiuntive, è ovvio come procedere per dimostrare di avere la risposta giusta. COMPOSITO è così: la divisione di prova è l'algoritmo ovvio, ed è lento: per fattorizzare un numero di 10 cifre, devi provare qualcosa come 100.000 possibili divisori. Ma se, per esempio, qualcuno ti dicesse che 61 è un divisore di 3233, la semplice divisione lunga è un modo efficace per vedere che sono corretti.

La classe di complessità NP è la classe di problemi decisionali in cui le risposte "sì" hanno una dimostrazione breve e rapida da verificare. Come COMPOSITO. Un punto importante è che questa definizione non dice nulla su quanto sia difficile il problema. Se si dispone di un modo corretto ed efficace per risolvere un problema decisionale, è sufficiente dimostrare i passaggi della soluzione.

La ricerca sugli algoritmi continua e vengono sempre creati nuovi algoritmi intelligenti. Un problema che potresti non sapere come risolvere in modo efficiente oggi potrebbe rivelarsi una soluzione efficiente (se non ovvia) domani. In effetti, i ricercatori hanno impiegato fino al 2002 per trovare una soluzione efficiente a COMPOSITO! Con tutti questi progressi, ci si deve davvero chiedere: è un po 'illusorio avere delle brevi prove? Forse ogni problema decisionale che si presta a prove efficaci ha una soluzione efficiente? Nessuno lo sa .

Forse il più grande contributo in questo campo è arrivato con la scoperta di una peculiare classe di problemi NP. Giocando con i modelli di circuito per il calcolo, Stephen Cook ha trovato un problema decisionale della varietà NP che era decisamente più duro o più difficile di ogni altro problema NP. Una soluzione efficiente per il problema booleano della soddisfacibilità potrebbe essere utilizzata per creare una soluzione efficiente a qualsiasi altro problema in NP. Poco dopo, Richard Karp mostrò che una serie di altri problemi di decisione potevano servire allo stesso scopo. Questi problemi, in un certo senso i problemi più "difficili" in NP, divennero noti come problemi NP-completi .

Naturalmente, NP è solo una classe di problemi decisionali. Molti problemi non sono naturalmente indicati in questo modo: "trova i fattori di N", "trova il percorso più breve nel grafico G che visita ogni vertice", "fornisci una serie di assegnazioni variabili che rendono vera la seguente espressione booleana". Sebbene si possa parlare in modo informale di alcuni di questi problemi essendo "in NP", tecnicamente ciò non ha molto senso - non sono problemi di decisione. Alcuni di questi problemi potrebbero persino avere lo stesso tipo di potenza di un problema NP completo: una soluzione efficiente a questi problemi (non decisionali) porterebbe direttamente a una soluzione efficiente a qualsiasi problema NP. Un problema come questo si chiama NP-hard .


67

P (tempo polinomiale): come suggerisce il nome stesso, questi sono i problemi che possono essere risolti in tempo polinomiale.

NP (tempo non deterministico-polinomiale): questi sono i problemi di decisione che possono essere verificati in tempo polinomiale. Ciò significa che, se sostengo che esiste una soluzione temporale polinomiale per un problema specifico, mi chiedi di dimostrarlo. Quindi, ti darò una prova che puoi facilmente verificare in tempo polinomiale. Questo tipo di problemi sono chiamati problemi NP. Si noti che qui non stiamo parlando se esiste o meno una soluzione temporale polinomiale per questo problema. Ma stiamo parlando di verificare la soluzione a un determinato problema in tempi polinomiali.

NP-Hard: questi sono almeno tanto difficili quanto i problemi più difficili in NP. Se siamo in grado di risolvere questi problemi in tempo polinomiale, possiamo risolvere qualsiasi problema NP che può eventualmente esistere. Si noti che questi problemi non sono necessariamente problemi NP. Ciò significa che possiamo / non possiamo verificare la soluzione a questi problemi in tempo polinomiale.

NP-Complete: questi sono i problemi che sono sia NP che NP-Hard. Ciò significa che, se siamo in grado di risolvere questi problemi, possiamo risolvere qualsiasi altro problema NP e le soluzioni a questi problemi possono essere verificate in tempo polinomiale.


Quindi hai appena deciso di copiare le definizioni da qualche parte?
Arun Satyarth,

1
La risposta ha senso!
Konstantin,

2
@ArunSatyarth Da dove?
significato-argomenti

3
La migliore risposta in quanto è breve, usa la terminologia sufficiente, ha frasi umane normali (non le cose difficili da leggere cerchiamo di essere il più corrette possibile) e sorprendentemente è l'unica risposta che scrive ciò che N rappresenta.
significato-argomenti

62

Oltre alle altre grandi risposte, ecco lo schema tipico che le persone usano per mostrare la differenza tra NP, NP-Complete e NP-Hard:

inserisci qui la descrizione dell'immagine


1
È dimostrato che esiste un problema in NP-Hard che non è in NP-Complete? Perché questa immagine lo suggerisce. Grazie.
Hilder Vitor Lima Pereira,

9
@VitorLima sì, ad es. I problemi con EXPSPACE sono NP-difficili ma si è dimostrato che non sono NP-completi.
Franck Dernoncourt,

2
Ok grazie. Ho trovato alcuni riferimenti a parlarne. Ad esempio, questo: princeton.edu/~achaney/tmve/wiki100k/docs/NP-hard.html
Hilder Vitor Lima Pereira,

47

Il modo più semplice per spiegare P v. NP e simili senza entrare nei tecnicismi è di confrontare "problemi di parole" con "problemi di scelta multipla".

Quando si tenta di risolvere un "problema di parole", è necessario trovare la soluzione da zero. Quando si tenta di risolvere un "problema a scelta multipla", è possibile scegliere: risolverlo come si farebbe con un "problema di parole" oppure provare a collegare ciascuna delle risposte fornite e scegliere la risposta del candidato adatta.

Accade spesso che un "problema a scelta multipla" sia molto più semplice del corrispondente "problema di parole": sostituire le risposte del candidato e verificare se si adattano può richiedere uno sforzo significativamente inferiore rispetto alla ricerca della risposta giusta da zero.

Ora, se dovessimo concordare lo sforzo che richiede un tempo polinomiale "facile", la classe P consisterebbe in "problemi di parole facili" e la classe NP consisterebbe in "problemi di scelta multipla facile".

L'essenza di P v. NP è la domanda: "Esistono problemi di scelta multipla facili che non sono facili come problemi di parole"? Cioè, ci sono problemi per i quali è facile verificare la validità di una determinata risposta ma trovare quella risposta da zero è difficile?

Ora che comprendiamo intuitivamente cos'è NP, dobbiamo sfidare il nostro intuito. Si scopre che ci sono "problemi a scelta multipla" che, in un certo senso, sono i più difficili di tutti: se si trovasse una soluzione a uno di quei problemi "più difficili di tutti" si sarebbe in grado di trovare una soluzione a TUTTI Problemi NP! Quando Cook l'ha scoperto 40 anni fa, è stata una sorpresa completa. Questi problemi "più difficili di tutti" sono noti come NP-difficili. Se trovi una "soluzione del problema delle parole" per una di esse, troverai automaticamente una "soluzione del problema delle parole" per ogni "problema a scelta multipla facile"!

Infine, i problemi NP-completi sono quelli che sono contemporaneamente NP e NP-difficili. Seguendo la nostra analogia, sono contemporaneamente "facili come problemi di scelta multipla" e "il più difficile di tutti come problemi di parole".


18

I problemi NP-completi sono quei problemi che sono sia NP-Hard sia nella classe di complessità NP. Pertanto, per dimostrare che ogni dato problema è NP-completo, è necessario dimostrare che il problema è sia in NP che NP-difficile.

I problemi che rientrano nella classe di complessità NP possono essere risolti in modo non deterministico in tempo polinomiale e una possibile soluzione (ad esempio un certificato) per un problema in NP può essere verificata per correttezza in tempo polinomiale.

Un esempio di una soluzione non deterministica al problema della k-cricca sarebbe qualcosa del tipo:

1) selezionare casualmente k nodi da un grafico

2) verificare che questi nodi k formino una cricca.

La strategia di cui sopra è polinomiale nella dimensione del grafico di input e quindi il problema della k-cricca è in NP.

Si noti che tutti i problemi risolvibili deterministicamente nel tempo polinomiale sono anche in NP.

Mostrare che un problema è NP-hard implica in genere una riduzione da qualche altro problema NP-hard al tuo problema usando una mappatura temporale polinomiale: http://en.wikipedia.org/wiki/Reduction_(complexity)


Non vedo nulla di errato in questa risposta, ma non so perché sia ​​stato accettato. Non offre molto a ciò che l'OP stava chiedendo. Non è nemmeno diverso dalle spiegazioni standard di questi problemi, e non ci sono spiegazioni chiare su ciò che rende questi problemi in queste classi. Non vale una valutazione negativa, ma sicuramente non vale la pena accettare la risposta.
San Jacinto,

18

Penso che possiamo rispondere in modo molto più conciso. Ho risposto a una domanda correlata e copiando la mia risposta da lì

Ma prima, un problema NP-difficile è un problema per il quale non possiamo dimostrare l'esistenza di una soluzione temporale polinomiale. La durezza NP di alcuni "problemi-P" è di solito dimostrata convertendo un problema NP-difficile già provato in "problema-P" in tempi polinomiali.

Per rispondere al resto della domanda, devi prima capire quali problemi NP-difficili sono anche NP-completi. Se un problema NP-difficile appartiene all'insieme NP, allora è NP-completo. Per appartenere al set NP, deve esserci un problema

(i) un problema di decisione,
(ii) il numero di soluzioni al problema dovrebbe essere finito e ogni soluzione dovrebbe essere di lunghezza polinomiale, e
(iii) data una soluzione di lunghezza polinomiale, dovremmo essere in grado di dire se la risposta al il problema è sì / no

Ora, è facile vedere che potrebbero esserci molti problemi NP-difficili che non appartengono al set NP e che sono più difficili da risolvere. Ad esempio intuitivo, la versione di ottimizzazione del commesso viaggiatore in cui dobbiamo trovare un programma effettivo è più difficile della versione decisionale del commesso viaggiatore in cui dobbiamo solo determinare se esiste o meno un programma con lunghezza <= k.


5

Ci sono davvero delle belle risposte a questa particolare domanda, quindi non ha senso scrivere la mia spiegazione. Quindi proverò a contribuire con un'eccellente risorsa su diverse classi di complessità computazionale.

Per qualcuno che pensa che la complessità computazionale riguardi solo P e NP, ecco la risorsa più esaustiva sui diversi problemi di complessità computazionale. Oltre ai problemi posti dall'OP, ha elencato circa 500 diverse classi di problemi computazionali con belle descrizioni e anche l'elenco dei documenti di ricerca fondamentali che descrivono la classe.


3

A quanto ho capito, un problema np-hard non è "più difficile" di un problema np-complete . In effetti, per definizione, ogni problema di np-complete è:

  1. in NP
  2. NP-hard

inserisci qui la descrizione dell'immagine

- Introduzione. agli algoritmi (3ed) di Cormen, Leiserson, Rivest e Stein, pag. 1069


3
La tua comprensione è errata. La tua definizione di NP-complete è corretta ma non influisce sulla tua prima affermazione. Tutti i problemi in NP-hard sono almeno altrettanto gravi di quelli in NP-complete; alcuni (ad esempio l'Halting Problem, che è infinitamente difficile, e en.wikipedia.org/wiki/EXPSPACE ) sono decisamente più difficili.
Jim Balter,

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.