(Latest Revision: Mon, Apr 17, 2023)
Backtracking Algorithm for The Knapsack Problem
(number of objects = n, weight limit = W)
Use the function below.
Start by calling Tell_Objects(n,W)
/* Given the set of objects {1, 2, ... , objNum}
and weight limit equal to "weightLim," and
assuming that the "table" of the knapsack problem
OPT values is available, tell which objects should
be selected to yield the greatest total value possible
without going over the weight limit. */
Tell_Objects (objNum, weightLim)
{
if (objNum > 0)
{
/* if we can get MORE value using this object
than we can get NOT using it ... */
if (table[objNum, weightLim] > table[objNum-1, weightLim])
{
/* ... then we need this object. Include it in the solution set. */
write (objNum) ;
/* if there's any remaining capacity in the knapsack ... */
if (weightLim-weight[objNum] > 0)
/* ... then figure out the remaining value we can get with the
remaining objects and remaining capacity in the knapsack. */
Tell_Objects (objNum-1, weightLim-weight[objNum]) ;
}
/* Otherwise, we DO NOT include this object,
and we use all the capacity we have
to get best value from the remaining object. */
else Tell_Objects (objNum-1, weightLim) ;
}
}