Il problema somma sottoinsieme è NP-completo?

8

Se lo so correttamente, il problema della somma del sottoinsieme è NP-completo. Qui hai una matrice di n interi e ti viene assegnata una somma di destinazione t, devi restituire i numeri dall'array che può riassumere fino alla destinazione (se possibile).

Ma non è possibile risolvere questo problema in tempo polinomiale con il metodo di programmazione dinamica in cui costruiamo una tabella n X t e prendiamo casi come dire che l'ultimo numero è sicuramente incluso nell'output e quindi il target diventa t- a [n]. In altri casi, l'ultimo numero è not incluso, quindi il target rimane lo stesso t ma l'array diventa di dimensione n-1. Quindi in questo modo continuiamo a ridurre le dimensioni del problema.

Se questo approccio è corretto, non è la complessità di questo n * t, che è polinomiale? e quindi se questo appartiene a P e anche NP-completo (da quello che sento) allora P = NP.

Sicuramente, mi manca qualcosa qui. Dov'è la scappatoia in questo ragionamento?

Grazie,

    
posta xyz 21.05.2011 - 09:44
fonte

1 risposta

12

La tua logica è corretta e ciò che hai descritto è un algoritmo di somma parziale valido che lo risolve in O(nt) .

Tuttavia, questo tipo di algoritmo è pseudopolinomiale , il che significa che è esponenziale al numero di bit usati per rappresentare l'input. Ciò significa che se il tuo t è 1000, allora posso rendere il tuo programma 10 volte più lento aggiungendo un altro 0 ( t è ora 10000).

Quindi, mentre l'algoritmo è polinomiale al valore di n e t , è esponenziale alla dimensione dell'input (numero di caratteri, bit , qualunque cosa tu voglia chiamarli, nell'input).

E quindi, questo problema non è in P (a meno che P = NP o qualcosa di simile).

Fonte e ulteriore lettura

    
risposta data 21.05.2011 - 12:56
fonte

Leggi altre domande sui tag