Es stellt sich raus, dass das Rucksackproblem ein NP vollständiges Problem ist. Somit ist eine Lösung des Problems wahrscheinlich nicht in polynomieller Laufzeit möglich. Es gibt aber Algorithmen, welche das Problem approximieren und so in besserer Laufzeit zu einem Ergebnis kommen, welches der eigentlichen Lösung des Problems sehr nahe ist.
Der Approximative Algorithmus nimmt folgende Input Werte:
Des Weiteren wird die folgende Annahme getroffen: Alle
Diese Annahme ist aber harmlos, wenn ist, kann es ohnehin nicht verwendet werden.
Ausserdem gilt: wobei der Profit der optimalen Lösung ist und das maximale
Das Ziel des Algorithmus ist es nun eine Lösung zu finden, welche fast optimal ist und in polynomineller Zeit gefunden werden kann.
Die Idee um das zu erreichen ist es zu runden.
Dazu wird durch ersetzt, wobei folgendermassen definert ist:
und bleiben unverändert die selben Teilmengen wie davor passen in den Rucksack.
Beispiel
, Profite :
Die gerundeten Profite :
Aus der Anwendung des Rundens folgen nun die folgenden Beobachtungen:
Daraus folgen nun die folgenden beiden Varianten:
- , Profit , Laufzeit: (zu langsam)
- , Profit ???, Laufzeit:
Die Ungleichung: gilt, da .
Es stellt sich nun allerdings die Frage, wie gut sich für das ursprüngliche Rucksackproblem eignet.
wird daher untersucht um festzustellen, wie gut es sich eignet.
Es ist bekannt, das das Optimum für ist.
Für jede Teilmenge , welche in den Rucksack passt gilt:
Das gilt auch für :
Daraus folgt dann:
Die Idee ist nun, dass ein (kleines) gewählt wird und gesetzt wird.
(Eigentlich müsste stehen, da ist. Einfachheitshalber wird die Rundung aber weggelassen.)
Daraus folgt nun:
Da klein ist, ist die Lösung fast so gut wie .
Die Laufzeit ist nun:
Also ist die Laufzeit polynominell in