算法第3章
* 2.递归关系 设所给0-1背包问题的子问题 的最优值为m(i,j),即m(i,j)是背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式: * 注:(3-4-3)式 此时背包容量为j,可选择物品为i。此时在对xi作出决策之后,问题 处于两种状态之一: 背包剩余容量是j,没产生任何效益; 剩余容量j-wi,效益值增长了vi . 从n推至i+1,i算出最优值m(i,j) ( i=n,…,1) 。 m(1,c)为最优值。 然后用回溯法Traceback找出最优解xi 其中i,c为整值。 3.算法复杂度分析: 从m(i,j)的递归式容易看出,算法Knapsack需要O(nc)计算时间; Traceback需O(n)计算时间 ;算法总体需要O(nc)计算时间。当背包容量c很大时,算法需要的计算时间较多。例如,当c2n时,算法需要Ω(n2n)计算时间。 * 4.算法描述 template class Type void Knapsack( Type *v, int *w, int c, int n, Type **m) { int jMax = min(w[n]-1, c) //背包剩余容量// for (int j = 0; j=jMax; j++) //背包不同剩余容量j ? j
原创力文档

文档评论(0)