Rucksackprobleme lassen sich leicht durch dynamische Programmierung lösen. Dynamische Programmierung läuft in Polynomialzeit; deshalb machen wir das, richtig?
Ich habe gelesen, dass es sich tatsächlich um ein NP-vollständiges Problem handelt, was bedeuten würde, dass das Lösen des Problems in einem Polynomproblem wahrscheinlich unmöglich ist.
Wo ist mein Fehler?
Antworten:
Das Rucksackproblem ist wenn die Zahlen als Binärzahlen angegeben werden. In diesem Fall benötigt die dynamische Programmierung exponentiell viele Schritte (in Bezug auf die Größe der Eingabe, dh die Anzahl der Bits in der Eingabe), um zu beenden .NP-complete †
Wenn die Zahlen in der Eingabe dagegen unär sind, funktioniert die dynamische Programmierung in Polynomzeit (in der Größe der Eingabe).
Diese Art von Problemen wird als schwachNP-complete .
Diese Art von Algorithmus, dh Polynom in der größten Zahl, die Teil der Eingabe ist, aber Exponential in der Eingabelänge, wird Pseudo-Polynom genannt .
quelle
m
(Packungsgröße) undn
(Anzahl der Artikel) ist völlig unbekannt, oder? Und bezüglich "wenn die Zahlen als Binärzahlen angegeben werden" ... aber kannst du das nicht für irgendetwas sagen? Bei den meisten Algorithmen wird die Eingabegröße in Basis 10 angegeben. Warum wird hier von Binärdaten gesprochen? Und ob Sie binär, oktal, dezimal usw. codieren,actual
hängt direkt vonn
und ab, wie oft Sie Ihre Hauptalgorithmusschleife durchlaufenW
.Die Hauptverwirrung liegt in der Differenz zwischen " Größe " und " Wert ".
" Polynomial Time " impliziert ein Polynom bezüglich der Größe der Eingabe.
" Pseudopolynomial Time " impliziert ein Polynom bezogen auf den Wert der Eingabe. Es kann gezeigt werden (siehe unten), dass dies äquivalent zu einer Exponentialfunktion für die Größe der Eingabe ist.
Mit anderen Worten: Es sei die Größe der Eingabe und Wert der Wert der Eingabe.Nsize Nval
Polynomialzeit: fürO(Nxsize) x∈N
Pseudopol. Zeit: fürO(Nxval) x∈N
Das Rucksackproblem hat nun eine pseudopolynomielle und keine polynomielle Lösung, da die dynamische Programmierlösung eine Laufzeit , die von einem Wert abhängt - dh , wobei ein Wert ist, der die maximale Kapazität darstellt.O(nW) W
Jetzt kann ein Wert in eine Größe umgewandelt werden, indem er in der Anzahl der Stellen dargestellt wird, die für die Darstellung erforderlich sind. gibt an, wie viele Stellen erforderlich sind, um mit Basis darzustellen . Dies kann gelöst werden, ergibt:Nsize=Logb(Nval) Nval b Nval
Das Einfügen in die pseudopolynomiale Zeitdefinition zeigt, dass es exponentiell in :Nsize
Pseudopol. Zeit: fürb , x ∈ NO(bxNsize) b,x∈N
quelle
Das in Karps Artikel definierte Knapsack-Problem ist NP-Complete, da es eine Reduzierung von anderen NPC-Problemen (in diesem Fall Exact Cover) auf Knapsack gibt. Dies bedeutet, dass es keinen Polynomalgorithmus gibt, der alle Instanzen des Knapsack-Problems lösen kann , es sei denn, .P=NP
Es gibt jedoch verschiedene Varianten (z. B. 0-1 Knapsack und andere ), die möglicherweise polynomzeitliche Lösungen oder gute Approximationen aufweisen oder nicht. Dies ist jedoch nicht dasselbe wie das allgemeine Knapsack-Problem. Es kann auch effiziente Algorithmen geben, die für bestimmte (Familien von) Instanzen funktionieren , aber diese Algorithmen werden für andere Instanzen länger dauern.
quelle