Wir wissen, dass das Rucksackproblem durch dynamische Programmierung in O (nW) -Komplexität gelöst werden kann. Wir sagen jedoch, dass dies ein NP-vollständiges Problem ist. Ich finde es hier schwer zu verstehen.
(n ist die Anzahl der Elemente. W ist das maximale Volumen.)
Antworten:
O(n*W)
sieht aus wie eine Polynomzeit, ist es aber nicht , es ist ein Pseudopolynom .Die Zeitkomplexität misst die Zeit, die ein Algorithmus als Funktion der Länge in Bit seiner Eingabe benötigt. Die dynamische Programmierlösung ist zwar linear im Wert von
W
, aber exponentiell in der Länge vonW
- und darauf kommt es an!Genauer gesagt ist die zeitliche Komplexität der dynamischen Lösung für das Rucksackproblem im Wesentlichen durch eine verschachtelte Schleife gegeben:
Somit ist die zeitliche Komplexität klar
O(n*W)
.Was bedeutet es, die Größe der Eingabe des Algorithmus linear zu erhöhen? Es bedeutet , unter Verwendung von zunehmend längere Element - Arrays (so
n
,n+1
,n+2
, ...) und mehr progressivW
(so, wennW
istx
Bit lang, nach einem Schritt , den wir verwenden ,x+1
Bits, dannx+2
Bits, ...). Aber der Wert vonW
wächst exponentiell mitx
, daher ist der Algorithmus nicht wirklich polynomisch, sondern exponentiell (aber es sieht so aus, als wäre er polynomisch, daher der Name: "Pseudo-Polynom").Weitere Referenzen
quelle
W
undn
hier geben jedoch die Anzahl der Schleifeniterationen an. Sie können sie beliebig codieren, und diese Schleife wird immer noch wiederholtn * W
. Ich glaube, der Grund für dieses "Pseudopolynom" ist,n
dass die tatsächliche EingabegrößeW
viel größern
sein kann und daher nicht als Konstante behandelt werden kann.for
Schleife von1
bisn
(won
ist die Eingabe); In diesem Fall beträgt die Größe der Eingabe immer noch etwa 40 Bit, wenn Ihre Schleife 10 ^ 12 Iterationen ausführt. Die Anzahl der Iterationen wächst schneller als die Anzahl der Bits, die die Eingabe codieren sollen. Die zeitliche Komplexität ist nicht linear. 2) Betrachten Sie erneut einefor
Schleife, die über ein Eingabearray (mit Größen
) von1
bis iteriertn
. Wenn Sie 10 ^ 12 Iterationen haben, bedeutet dies, dass Ihr Array 10 ^ 12 Elemente enthält. Die Anzahl der Iterationen wächst mit der gleichen Geschwindigkeit wie die Größe der Eingabe. Zeit kompl. ist linear.Im Rucksack-0/1-Problem benötigen wir 2 Eingänge (1 Array & 1 Ganzzahl), um dieses Problem zu lösen:
Nehmen wir an, n = 10 und W = 8:
also ist die Zeitkomplexität T (n) = O (nW) = O (10 · 8) = O (80)
Wenn Sie die Größe von n verdoppeln :
n = [n1, n2, n3, ..., n10 ] -> n = [n1, n2, n3, ..., n20 ]
also Zeitkomplexität T (n) = O (nW) = O (20 · 8) = O (160)
Wenn Sie jedoch die Größe von W verdoppeln , bedeutet dies nicht, dass W = 16 ist, sondern dass die Länge doppelt so lang ist:
W = 1000 -> W = 10000000 im binären Term (8 Bit lang)
also ist T (n) = O (nW) = O (10 · 128) = O (1280)
Die benötigte Zeit nimmt exponentiell zu, so dass es sich um ein NPC-Problem handelt.
quelle
Es hängt alles davon ab, welche Parameter Sie eingeben
O(...)
.Wenn das Zielgewicht durch die Anzahl begrenzt ist
W
, ist das ProblemO(n*W)
, wie Sie bereits erwähnt haben, komplex.Aber wenn die Gewichte viel zu groß sind und Sie einen Algorithmus mit unabhängiger Komplexität benötigen
W
, ist das Problem NP-vollständig. (O(2^n*n)
in der naivsten Umsetzung).quelle
Dies liegt daran, dass das Rucksackproblem eine pseudo-polynomielle Lösung hat und daher als schwach NP-vollständig (und nicht stark NP-vollständig ) bezeichnet wird.
quelle
Die Größe der Eingabe ist
log(W)
Bits für das Gewicht (undO(n)
für die Arrays "value" und "weight").Die eingegebene Gewichtsgröße ist also
j = log(W)
(und nicht nurW
). AlsoW = 2ʲ
(als Binär wird verwendet).Die endgültige Komplexität ist
O(n * W)
Diese Lösung ist also kein Polynom.
quelle
Sie können diese kurze Erklärung lesen: Die NP-Vollständigkeit des Rucksacks .
quelle
Um die NP-Vollständigkeit zu verstehen , muss man ein bisschen Komplexitätstheorie lernen. Im Grunde ist es jedoch NP-vollständig, da ein effizienter Algorithmus für das Rucksackproblem auch ein effizienter Algorithmus für SAT , TSP und den Rest wäre.
quelle