Problema allo zaino: NP completo nonostante la soluzione di programmazione dinamica?


52

I problemi dello zaino sono facilmente risolti dalla programmazione dinamica. La programmazione dinamica viene eseguita in tempo polinomiale; è per questo che lo facciamo, giusto?

Ho letto che in realtà è un problema NP completo, il che significherebbe che risolvere il problema nel problema polinomiale è probabilmente impossibile.

Dov'è il mio errore?


5
Tieni presente che DP è polinomiale nella "dimensione della tabella". La tabella è esponenzialmente grande per Zaino (vedi la risposta di Kaveh).
Raffaello

Risposte:


41

Il problema dello zaino è NP-complete quando i numeri sono indicati come numeri binari . In questo caso, la programmazione dinamica richiederà esponenzialmente molti passaggi (nella dimensione dell'ingresso, ovvero il numero di bit nell'ingresso) per terminare .

D'altra parte, se i numeri nell'input sono indicati in unario, la programmazione dinamica funzionerà in tempo polinomiale (nella dimensione dell'ingresso).

Questo tipo di problemi si chiama debolmente NP-complete .

2nnnnlgnO(n)=O(2lgn/2)

Questo tipo di algoritmo, ovvero il polinomio nel numero più grande che fa parte dell'input, ma esponenziale nella lunghezza dell'input è chiamato pseudo-polinomio .


Ma pensa agli oggetti da mettere nello zaino. Gli oggetti devono essere inseriti e tale ingresso deve essere polinomiale con il numero di oggetti. Se gli oggetti sono abbastanza numerosi, l'input è polinomiale con la dimensione del problema. Quindi perché non posso dire che il problema dello zaino è un problema P in termini di dimensioni della tabella? Ho sbagliato?
Strin

mm2lgmm

Puoi suddividere l'input in input più piccoli la cui codifica binaria ha una dimensione che termina l'algoritmo in tempo polinomiale e quindi combinare le soluzioni?
Char

@Kaveh "La dimensione dell'input è di circa 2 lg m" Non capisco da dove prendi quella parte. La relazione tra m(formato confezione) e n(numero di articoli) è totalmente sconosciuta, giusto? E ri "quando i numeri sono dati come numeri binari" ... ma non potresti dirlo per niente? Con la maggior parte degli algoritmi, parliamo della dimensione dell'input nella base 10. Perché qui parliamo di binario? E se si codifica in binario, ottale, decimale, ecc ... il actualnumero di volte che si scorre il ciclo dell'algoritmo principale dipende direttamente da entrambi ne W.
The111

1
@ The111, penso che sia meglio se lo pubblichi come una nuova domanda e io posterò una risposta. Penso che la tua domanda sia più fondamentale e che i commenti non siano molto correlati a questa domanda.
Kaveh,

33

La principale confusione sta nella differenza tra " dimensione " e " valore ".

" Tempo polinomiale " implica polinomio wrt le dimensioni dell'input.

" Tempo pseudopolinomiale " implica polinomio wrt il valore dell'input. Si può mostrare (sotto) che questo equivale ad essere esponenziale rispetto alla dimensione dell'input.


NsizeNval

O(Nsizex)xN

O(Nvalx)xN

O(nW)W

Nsize=Logb(Nval)NvalbNval

Nval=bNsize

Nsize

O(bxNsize)b,xN


7
Creato un account qui solo per dire grazie mille! Solo dopo il tuo esempio l'ho finalmente capito.
Inoryy,

2
La tua risposta batte tutti, bravo!
Muhammad Razib,

1
Per aggiungere a questa grande risposta possiamo dire che se cambiamo W da 100 a 101 la dimensione del problema non aumenta, la dimensione aumenta se aggiungiamo un altro bit a W che lo rende due volte più grande, quindi la tabella hanno il doppio delle righe e quindi con l'aumento delle dimensioni di una, il tempo del problema è raddoppiato, ecco perché è esponenziale.
Amen,

@bcorso Supponiamo che ti venga dato un valore N. E che dovevi trovare la somma dei numeri da 1 a N e hai usato il metodo for loop, sarebbe un algoritmo Time pseudopolinomiale?
DollarAkshay,

8

P=NP

Vi sono, tuttavia, diverse varianti (ad esempio, Zaino 0-1 e altri ) che possono avere o meno soluzioni a tempo polinomiale o buone approssimazioni. Ma questo non è lo stesso del problema generale dello zaino. Inoltre, potrebbero esserci algoritmi efficienti che funzionano per specifiche (famiglie di) istanze , ma questi algoritmi impiegheranno più tempo su altre istanze.

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.