算法之背包问题

简介: 本文讨论了可分背包问题和0-1背包问题的区别及解决方法,其中可分背包问题可以使用贪心算法解决,而0-1背包问题则通常采用动态规划方法来找到最大价值的解决方案。

可分的背包问题是可以用贪心法来解决,而0-1背包问题通常使用动态规划方法来解决。

可分背包问题
在可分背包问题中,物品可以被分割,您可以取走物品的一部分以适应背包的容量。这里的关键是物品的价值密度,即单位重量的价值。您可以按照价值密度从高到低的顺序选择物品,先取价值密度最高的物品,然后是次高的,依此类推,直到背包装满为止。这种方法称为贪心算法,因为它每一步都选择当前看起来最优的选项。

0-1背包问题
与可分背包问题不同,0-1背包问题中的物品不能分割。您必须决定是否将整个物品放入背包。这就需要使用动态规划来找到最优解。动态规划通过考虑所有可能的组合来确保找到最大价值。它使用一个二维数组 ( dp[i][w] ) 来存储对于前 ( i ) 个物品,当背包容量为 ( w ) 时的最大价值。状态转移方程如下:

𝑑𝑝[𝑖][𝑤]=max⁡(𝑑𝑝[𝑖−1][𝑤],𝑑𝑝[𝑖−1][𝑤−𝑤𝑒𝑖𝑔ℎ𝑡[𝑖]]+𝑣𝑎𝑙𝑢𝑒[𝑖])

这里,( dp[i-1][w] ) 表示不选择第 ( i ) 个物品时的最大价值,而 ( dp[i-1][w-weight[i]] + value[i] ) 表示选择第 ( i ) 个物品时的最大价值。通过这种方式,动态规划确保了在每一步都考虑了所有可能的选择,从而找到了最优解。

软考上也是有类似的题的。

请填写1到4个空。

我来解释这道题吧

首先将c这个二维数组变为0,也就是初始化,那个Memoized_Knapsack这个函数,将c二维数组设置为-1,-1就是已经结束的意思,然后执行Calculate_Max_Value这个函数,这个函数第一件事情就是判断c[i][j]是否为-1,如果是-1就已经结束了,所以这个1这个空应该填c[i][j]。第二个if判断也不难看出就是简单的将物体数量为0的设置为0,把背包容量为0的设置为0.,倘若不知道下面的i,和j代表的什么可以看我上面写的。i是物品数量,j是背包容量。

所以第二个空应该是j>=w[i],因为只有剩余的背包容量大于或者等于w[i]里面的容量,才可以被选进去,第三个空是再次调用Calculate_Max_Value(v,w,i-1,j-w[i])+v[i] ,当c[i][j]选的值比那个temp小的时候,就进行一次互换就行了,也就是c[i][j]=temp。

总结:我觉得很好理解吧,求取到第i的物品的价格就是c[i][j],然后求下一个物品和之前的总价格temp,在与之比较,就行了。

目录
相关文章
|
2月前
|
算法
动态规划算法学习三:0-1背包问题
这篇文章是关于0-1背包问题的动态规划算法详解,包括问题描述、解决步骤、最优子结构性质、状态表示和递推方程、算法设计与分析、计算最优值、算法实现以及对算法缺点的思考。
97 2
动态规划算法学习三:0-1背包问题
|
6月前
|
机器学习/深度学习 算法 C++
【洛谷 P2240】【深基12.例1】部分背包问题 题解(贪心算法)
**深基12.例1**是部分背包问题,$N$堆金币,每堆$(m_i, v_i)$,$T$承重限制。按金币单价降序装包,保证价值最大化。输入$N,T$及每堆金币详情,输出两位小数的最大价值。示例:输入$4,50$,输出$240.00$。AC代码使用C++,通过排序和迭代实现。
75 0
|
2月前
|
算法 C++
【算法】DP背包问题(C/C++)
【算法】DP背包问题(C/C++)
|
4月前
|
算法 Java 测试技术
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
这篇文章介绍了基于动态规划法的三种算法:解决背包问题的递归和自底向上实现、Warshall算法和Floyd算法,并提供了它们的伪代码、Java源代码实现以及时间效率分析。
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
|
6月前
|
算法 Java 决策智能
Java数据结构与算法:动态规划之背包问题
Java数据结构与算法:动态规划之背包问题
|
算法 Python
贪心算法-分数背包问题(Python实现)
贪心算法-分数背包问题(Python实现)
119 0
|
7月前
|
算法
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
53 0
算法系列--动态规划--背包问题(2)--01背包拓展题目(下)
|
7月前
|
算法
算法系列--动态规划--背包问题(5)--二维费用背包问题(下)
算法系列--动态规划--背包问题(5)--二维费用背包问题(下)
47 0
|
7月前
|
算法
算法系列--动态规划--背包问题(5)--二维费用背包问题(上)
算法系列--动态规划--背包问题(5)--二维费用背包问题(上)
60 0
|
7月前
|
算法
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
算法系列--动态规划--背包问题(4)--完全背包拓展题目(下)
47 0
下一篇
DataWorks