EntwurfRZ

Aus ProgrammingWiki
Archivierte Version vom 2016-01-20T18:09:59+00:00. Aktuelle Version

Pseudopolynomialität

Das Rucksackproblem scheint auf den ersten Blick mit dynamischer Programmierung in Polynomialzeit lösbar zu sein.
Im folgenden Beispielcode gibt es:

  • Eine for-Schleife zur Initialisierung des Array \mathcal{O}(n+1) (vernachlässigbar, da es eine Eigenart von Javascript ist, dass man mehrdimensionale Arrays nicht mit einem einzigen Aufruf erzeugen kann)
  • Eine äußere for-Schleife über die Anzahl der Gegenstände \mathcal{O}(n)
  • Eine innere for-Schleife über Anzahl der möglichen Gewichte \mathcal{O}(max)

Es ergibt sich damit eine Laufzeit von \mathcal{O}(n) \dot{} \mathcal{O}(max) = \mathcal{O}(n \dot{} max), was zunächst polynomial erscheint.

Der Irrtum liegt in der Betrachtung von max als Konstante. Bei der Worst-Case-Betrachtung kann max jeden beliebigen Wert annehmen. Somit kann man ihn auch in Abhängigkeit von n definiert, z.B. max = 2^n
Es ergibt sich damit eine Komplexität von \mathcal{O}(n \dot{} 2^n) welche nicht mehr polynomial begrenzt ist.