小樱知识 > 生活常识背包问题(01背包问题例题讲解)

背包问题(01背包问题例题讲解)

提问时间:2022-06-06 23:34:32来源:小樱知识网


复杂性分析

时间复杂度:o()。

因为有多余的子问题。

辅助空房间:O(1)。

因为没有额外的数据结构来存储值。

2.通过自下而上构造临时数组K[][],可以避免重新计算同一个子问题。

方法:在动态编程中,我们将考虑递归方法中提到的相同情况。在DP[][]表中,让我们将从1到w的所有可能的权重视为列,将权重保持为行。考虑从1到I的所有值,状态DP[i][j]将表示j-weight的最大值。因此,如果考虑wi(第I行的权重),可以将其填入所有列wi(权重值> wi)。

现在可能发生两种情况:

在给定栏中填写作业指导书。

不要在给定栏中填写作业指导书。

现在,我们不得不最大限度地考虑这两种可能性。形式上,如果我们在第j列不填充ith weight,DP[i][j]的状态将与DP[i-1][j]的状态相同,但如果我们填充weight,DP[i][j]将等于wi的值+前一行权重为j-wi的列的值。因此,我们使用这两种可能性中的最大值来填充当前状态。

以下是上述方法的python代码实现:

def knapSack(W, wt, val, n):    K = [[0 for x in range(W + 1)] for x in range(n + 1)]    # Build table K[][] in bottom up manner    for i in range(n + 1):        for w in range(W + 1):            if i == 0 or w == 0:                K[i][w] = 0            elif wt[i-1] 

以上内容就是为大家推荐的背包问题(01背包问题例题讲解)最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题

内容来源于网络仅供参考
二维码

扫一扫关注我们

版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。

本文标题:背包问题(01背包问题例题讲解)

本文地址:https://www.xiaoyin02.com/shcs/296820.html

相关文章