背包问题 实验报告

合集下载

背包问题实验报告

背包问题实验报告

背包问题实验报告背包问题实验报告背包问题是计算机科学中的经典问题之一,它涉及到在给定的一组物品中选择一些物品放入背包中,以使得背包的总重量不超过其容量,并且所选择的物品具有最大的总价值。

在本次实验中,我们将通过不同的算法来解决背包问题,并对比它们的效率和准确性。

1. 实验背景和目的背包问题是一个重要的优化问题,它在许多实际应用中都有广泛的应用,比如货物装载、资源分配等。

在本次实验中,我们的目的是通过实际的算法实现,比较不同算法在解决背包问题时的性能差异,并分析其优缺点。

2. 实验方法和步骤为了解决背包问题,我们选择了以下几种常见的算法:贪心算法、动态规划算法和遗传算法。

下面将对每种算法的具体步骤进行介绍。

2.1 贪心算法贪心算法是一种简单而直观的算法,它通过每次选择当前状态下最优的解决方案来逐步构建最终解决方案。

在背包问题中,贪心算法可以按照物品的单位价值进行排序,然后依次选择单位价值最高的物品放入背包中,直到背包的容量达到上限。

2.2 动态规划算法动态规划算法是一种基于递推关系的算法,它通过将原问题分解为多个子问题,并利用子问题的解来构建原问题的解。

在背包问题中,动态规划算法可以通过构建一个二维数组来记录每个子问题的最优解,然后逐步推导出整个问题的最优解。

2.3 遗传算法遗传算法是一种模拟生物进化的算法,它通过模拟自然选择、交叉和变异等过程来搜索问题的最优解。

在背包问题中,遗传算法可以通过表示每个解决方案的染色体,然后通过选择、交叉和变异等操作来不断优化解决方案,直到找到最优解。

3. 实验结果和分析我们使用不同算法对一组测试数据进行求解,并对比它们的结果和运行时间进行分析。

下面是我们的实验结果:对于一个容量为10的背包和以下物品:物品1:重量2,价值6物品2:重量2,价值10物品3:重量3,价值12物品4:重量4,价值14物品5:重量5,价值20贪心算法的结果是选择物品4和物品5,总重量为9,总价值为34。

实验报告分支限界法01背包

实验报告分支限界法01背包

实验报告分支限界法01背包实验报告:分支限界法解决01背包问题一、引言背包问题是数学和计算机科学中一个经典的问题。

背包问题通常分为01背包问题和完全背包问题两种情况。

本实验主要探讨的是分支限界法解决01背包问题,该算法常用于解决NP难问题。

分支限界法通过将问题分解为一系列子问题,并借助剪枝技术,逐步缩小问题的空间,从而找到最优解。

本实验将通过具体的案例来展示分支限界法的求解过程和原理,并对算法的时间复杂度和空间复杂度进行分析。

二、算法原理01背包问题的数学模型为:有n个物品,每个物品有一个重量wi和一个价值vi,在限定的背包容量为W的情况下,如何选择物品放入背包,使得背包中物品的总价值最大。

分支限界法的基本思想是:通过不断地分解问题为更小的子问题,并使用估算函数对子问题进行优先级排序,将优先级最高的子问题优先求解。

具体步骤如下:1.根节点:将背包容量W和物品序号0作为初始状态的根节点。

2.扩展节点:对于任意一个节点S,选择装入下一个物品或者不装入两种分支。

计算新节点的上界。

3.优先级队列:将扩展节点按照上界从大到小的顺序插入优先级队列。

4.剪枝条件:当扩展节点的上界小于当前已找到的最优解时,可以剪枝。

5.结束条件:当到叶节点或者队列为空时,结束。

若叶节点的上界高于当前最优解,更新最优解。

三、实验过程1.输入数据:给定一个物品序列,每个物品有重量和价值,以及一个背包的最大容量。

2.算法实现:根据算法原理,使用编程语言实现分支限界法的求解过程。

3.结果分析:比较算法求解得到的最优解和其他算法(如动态规划)得到的最优解之间的差异。

四、实验结果以一个具体的案例来说明分支限界法的求解过程。

假设有4个物品,其重量和价值分别为{2,3,4,5}和{3,4,5,6},背包的最大容量为8、通过分支限界法求解,得到最优解为9,对应的物品选择为{2,3,5}。

通过与动态规划算法的结果比较,可以发现分支限界法的最优解与动态规划算法得到的最优解是一致的。

【优质】背包问题实验报告-范文word版 (13页)

【优质】背包问题实验报告-范文word版 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==背包问题实验报告篇一:背包问题实验报告课程名称:任课教师:班级:201X姓名:实验报告算法设计与分析实验名称:解0-1背包问题王锦彪专业:计算机应用技术学号:11201X 严焱心完成日期: 201X年11月一、实验目的:掌握动态规划、贪心算法、回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对上述方法的理解。

二、实验内容及要求:1.要求分别用动态规划、贪心算法、回溯法和分支限界法求解0-1背包问题;2.要求显示结果。

三、实验环境和工具:操作系统:Windows7 开发工具:Eclipse3.7.1 jdk6 开发语言:Java四、实验问题描述:0/1背包问题:现有n种物品,对1<=i<=n,第i种物品的重量为正整数Wi,价值为正整数Vi,背包能承受的最大载重量为正整数C,现要求找出这n种物品的一个子集,使得子集中物品的总重量不超过C且总价值尽量大。

动态规划算法描述:根据问题描述,可以将其转化为如下的约束条件和目标函数:nmax?vixi?n??wixi?C?i?1?x?{0,1}(1?i?n)?i寻找一个满足约束条件,并使目标函数式达到最大的解向量nX?(x1,x2,x3,......,xn)wixi,使得?i?1?C,而且?vixii?1n达到最大。

0-1背包问题具有最优子结构性质。

假设(x1,x2,x3,......,xn)是所给的问题的一个最优解,则(x2,x3,......,xn)是下面问题的一个最优解:?n??wixi?C?w1x1max?i?2?x?{0,1}(2?i?n)?i如果不是的话,设(y?vixi。

i?2nn2,y3,......,yn)是这个问题的一个最优解,则?viyi??vixi,且w1x1 i?2i?2n??wiyii?2?C。

背包问题实验报告

背包问题实验报告

背包问题实验报告1. 引言背包问题是一类经典的组合优化问题,在现实生活中有着广泛的应用。

背包问题可以描述为:有一个背包容量为W的背包和N个物品,每个物品有一定的重量和价值,要求将物品放入背包中使得背包的总价值最大。

本实验旨在通过比较不同的算法策略,找到解决背包问题的最佳方法,以提高背包问题的求解效率。

2. 实验环境•操作系统:Windows 10•编程语言:Python 3.8•开发环境:Visual Studio Code3. 实验过程3.1 暴力穷举法暴力穷举法是解决背包问题的一种基本策略。

该方法通过遍历所有可能的组合,计算每个组合的价值,并找到最大价值的组合作为最优解。

具体步骤如下:1.初始化最大价值max_value为0,最优解combo为空集。

2.遍历所有可能的物品组合:–将组合中的物品放入背包中,计算背包中物品的总价值。

–若背包总价值超过max_value,则更新max_value和combo。

3.输出最优解combo和最大价值max_value。

该方法的时间复杂度为O(2^N),其中N为物品的数量,在物品数量较大时效率较低。

3.2 动态规划法动态规划法是解决背包问题的一种高效策略。

该方法通过构建价值表,利用子问题的最优解来求解背包问题的最优解。

具体步骤如下:1.初始化一个二维数组value_table,其中value_table[i][j]表示前i个物品放入容量为j的背包中的最大价值。

2.根据以下递推关系来填充value_table的值:–若第i个物品的重量大于背包容量j,则value_table[i][j]等于value_table[i-1][j],表示第i个物品不能放入背包中。

–若第i个物品的重量小于等于背包容量j,则value_table[i][j]等于max(value_table[i-1][j], value_table[i-1][j-w[i]]+v[i]),表示第i个物品可以选取并放入背包中,或不选取第i个物品。

完全背包实验报告

完全背包实验报告

一、实验目的本次实验旨在通过C++编程实现完全背包问题,并对其算法原理、时间复杂度、空间复杂度进行分析。

通过对比不同实现方式,加深对动态规划算法的理解,提高解决实际问题的能力。

二、实验原理完全背包问题是指有n种重量和价值分别为wi、vi(1≤i≤n)的物品,从这些物品中挑选总重量不超过W的物品,求出挑选物品价值总和最大的挑选方案,这里每种物品可以挑选任意多件。

解决完全背包问题常用的方法是动态规划。

动态规划的核心思想是将复杂问题分解为若干个相互重叠的子问题,并存储已求解的子问题的解,避免重复计算。

三、实验步骤1. 定义状态定义状态dp[i][w]表示从前i种物品中挑选总重量不超过w的物品时所能获得的最大价值。

2. 状态转移方程当不选择第i种物品时,状态dp[i][w] = dp[i-1][w]。

当选择第i种物品时,状态dp[i][w] = max(dp[i-1][w], dp[i-1][w-wi] + vi)。

其中,wi表示第i种物品的重量,vi表示第i种物品的价值。

3. 初始化初始化dp[0][w] = 0,表示不选择任何物品时的最大价值为0。

4. 计算按照状态转移方程计算dp[n][W],其中n为物品种类数,W为背包容量。

5. 输出结果输出dp[n][W],即为所求的最大价值。

四、实验实现1. C++代码实现```cpp#include <iostream>using namespace std;const int MAXN = 100; // 物品种类数上限const int MAXW = 1000; // 背包容量上限int w[MAXN], v[MAXN]; // 物品重量和价值数组int dp[MAXN+1][MAXW+1]; // 动态规划表int main() {int n, W;cout << "请输入物品种类数和背包容量:" << endl; cin >> n >> W;cout << "请输入每种物品的重量和价值:" << endl; for (int i = 1; i <= n; i++) {cin >> w[i] >> v[i];}// 初始化dp表for (int i = 0; i <= n; i++) {for (int j = 0; j <= W; j++) {dp[i][j] = 0;}}// 计算dp表for (int i = 1; i <= n; i++) {for (int j = 1; j <= W; j++) {if (j >= w[i]) {dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]); } else {dp[i][j] = dp[i-1][j];}}}// 输出结果cout << "最大价值为:" << dp[n][W] << endl;return 0;}```2. 测试用例```plaintext输入:4 71 62 35 46 5输出:14```五、实验分析1. 时间复杂度动态规划算法的时间复杂度为O(nW),其中n为物品种类数,W为背包容量。

背包问题实验报告

背包问题实验报告

背包问题实验报告《背包问题实验报告》背包问题是一个经典的组合优化问题,它在计算机科学和运筹学领域被广泛应用。

在这个问题中,我们需要从一组物品中选择一些放入背包,使得它们的总重量不超过背包的承载能力,同时价值最大化。

在本实验中,我们将探讨不同算法在解决背包问题时的表现,并分析它们的优缺点。

首先,我们使用了贪心算法来解决背包问题。

贪心算法的基本思想是每次选择当前最有利的物品放入背包,直到背包装满或者没有物品可选。

虽然贪心算法在一些情况下能够得到较好的解,但它并不保证能够得到最优解,因为它只考虑了局部最优解而没有综合考虑所有可能的选择。

接着,我们使用了动态规划算法来解决背包问题。

动态规划算法通过将问题分解成子问题,并保存子问题的解来避免重复计算,从而得到最优解。

动态规划算法在解决背包问题时能够得到最优解,但它需要额外的空间来保存子问题的解,因此在处理大规模问题时可能会消耗较多的内存。

最后,我们使用了回溯算法来解决背包问题。

回溯算法通过不断尝试所有可能的选择,并在满足条件时继续向下搜索,直到找到解或者搜索完所有可能的选择。

回溯算法能够得到最优解,但它的时间复杂度较高,因为它需要尝试所有可能的选择。

通过实验我们发现,不同算法在解决背包问题时有各自的优缺点。

贪心算法简单快速,但不能保证得到最优解;动态规划算法能够得到最优解,但需要额外的空间;回溯算法能够得到最优解,但时间复杂度较高。

因此,在实际应用中需要根据具体情况选择合适的算法来解决背包问题。

综上所述,通过本实验我们对背包问题的解决算法有了更深入的了解,并且能够根据具体情况选择合适的算法来解决实际问题。

希望本实验能够对相关领域的研究和应用有所帮助。

普通背包问题实验报告

普通背包问题实验报告

一、实验目的1. 理解背包问题的基本概念和求解方法。

2. 掌握动态规划算法在背包问题中的应用。

3. 通过编程实现普通背包问题的求解,并分析算法的效率。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 背包问题简介背包问题是一种经典的组合优化问题,其基本模型如下:设有n件物品,第i件物品的重量为w[i],价值为v[i],背包的最大承重为W。

如何选择物品装入背包,使得背包中的物品总价值最大?2. 动态规划算法动态规划是一种有效的算法设计方法,其基本思想是将复杂问题分解为若干个相互重叠的子问题,通过求解子问题来逐步求解原问题。

对于背包问题,我们可以使用动态规划算法求解。

设dp[i][j]表示在考虑前i件物品的情况下,背包容量为j时能够达到的最大价值。

则有以下状态转移方程:dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]),其中i=1,2,...,n,j=1,2,...,W。

3. 实验步骤(1)创建一个二维数组dp,大小为[n+1][W+1],初始化所有元素为0。

(2)遍历物品,对于每个物品i(i=1,2,...,n),遍历背包容量j(j=1,2,...,W):a. 如果物品i的重量小于等于当前背包容量j,则计算dp[i][j]的值,即选择物品i或不选择物品i的最大价值。

b. 如果物品i的重量大于当前背包容量j,则dp[i][j]的值等于dp[i-1][j],即不选择物品i。

(3)找到dp[n][W]的值,即为背包能够达到的最大价值。

(4)根据dp数组,输出装入背包的物品。

4. 实验结果与分析(1)输入:物品数量:4物品重量:[2, 3, 4, 5]物品价值:[3, 4, 5, 6]背包容量:5(2)输出:最大价值:9装入背包的物品:[2, 3, 4](3)分析:实验结果表明,该算法能够有效地求解普通背包问题。

动态规划方案解决算法背包问题实验报告含源代码

动态规划方案解决算法背包问题实验报告含源代码

动态规划方案解决算法背包问题实验报告含嘿,大家好!今天我来给大家分享一个相当有趣的编程问题——背包问题。

这可是算法领域里的经典难题,也是体现动态规划思想的好例子。

我会用我10年的方案写作经验,给大家带来一份详细的实验报告,附带哦!让我简单介绍一下背包问题。

假设你是一个盗贼,要盗取一个博物馆里的宝贝。

博物馆里有n个宝贝,每个宝贝都有它的价值v和重量w。

你有一个承重为W的背包,你希望放入背包的宝贝总价值最大,但总重量不能超过背包的承重。

这个问题,就是我们要解决的背包问题。

一、算法思路1.创建一个二维数组dp,dp[i][j]表示前i个宝贝放入一个承重为j的背包中,能达到的最大价值。

2.初始化dp数组,dp[0][j]=0,因为如果没有宝贝,那么无论背包承重多少,价值都是0。

3.遍历每个宝贝,对于每个宝贝,我们有两种选择:放入背包或者不放入背包。

4.如果不放入背包,那么dp[i][j]=dp[i-1][j],即前i-1个宝贝放入一个承重为j的背包中,能达到的最大价值。

5.如果放入背包,那么dp[i][j]=dp[i-1][j-w[i]]+v[i],即前i-1个宝贝放入一个承重为j-w[i]的背包中,加上当前宝贝的价值。

6.dp[i][j]取两种情况的最大值。

二、defknapsack(W,weights,values,n):dp=[[0for_inrange(W+1)]for_inrange(n+1)]foriinrange(1,n+1):forjinrange(1,W+1):ifj>=weights[i-1]:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weights[i-1]]+values[i -1])else:dp[i][j]=dp[i-1][j]returndp[n][W]测试数据W=10weights=[2,3,4,5]values=[3,4,5,6]n=len(values)输出结果max_value=knapsack(W,weights,values,n)print("最大价值为:",max_value)三、实验结果分析通过上面的代码,我们可以得到最大价值为15。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
课程名称:算法设计与分析实验名称:解0-1背包问题任课教师:王锦彪专业:计算机应用技术班级: 2011 学号: ****** 姓名:严焱心完成日期: 2011年11月
一、实验目的:
掌握动态规划、贪心算法、回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对上述方法的理解。

二、实验内容及要求:
1. 要求分别用动态规划、贪心算法、回溯法和分支限界法求解0-1背包问题;
2. 要求显示结果。

三、实验环境和工具:
操作系统:Windows7
开发工具:Eclipse3.7.1 jdk6
开发语言:Java
四、实验问题描述:
0/1背包问题:现有n 种物品,对1<=i<=n ,第i 种物品的重量为正整数W i ,价值为正整数V i ,背包能承受的最大载重量为正整数C ,
现要求找出这n 种物品的一个子集,使得子集中物品的总重量不超过C 且总价值尽量大。

动态规划算法描述: 根据问题描述,可以将其转化为如下的约束条件和目标函数:
⎪⎩⎪⎨⎧≤≤∈≤∑∑==)1}(1,0{C max 1
1n i x x w x v i
n
i i i n
i i
i
寻找一个满足约束条件,并使目标函数式达到最大的解向量),......,,,(321n x x x x X =,使得C 1∑=≤n i i i x w ,而且∑=n
i i i x v 1达到最大。

0-1背包问题具有最优子结构性质。

假设),......,,,(321n x x x x 是所给的问题的一个最优解,则),......,,(32n x x x 是下面问题的一个最优解:∑∑==⎪⎩⎪⎨⎧≤≤∈-≤n i i i i
n
i i i x v n i x x w x w 22
11max )2}(1,0{C 。

如果不是的话,设),......,,(32n y y y 是这个问题的一个最优解,则∑∑==>n i n i i i i i x v y v 22
,且∑=≤+
n i i i y w x w 211C 。

因此,∑∑∑====+>+n i i i n i n i i i i i x v x v x v y v x v 1
221111,这说明),........,,,(321n y y y x 是所给
的0-1背包问题比),........,,,(321n x x x x 更优的解,从而与假设矛盾。

按照上面的情况,可以得到递推公式:设最优值为m(i,j)。

⎩⎨⎧+-+++=}),1(),,1(max{),1(),(i i v w j i m j i m j i m j i m i
i w w ≥<≤j j 0
⎩⎨⎧=n v j n m 0),( i
i w w ≥<≤j j 0 贪心算法描述:计算每种物品单位重量的价值;将尽可能多的单位重量价值最高的物品装入背包;如果单位重量价值最高的物品全部装入背包后,背包的总重量小于c ,则选择单位重量次高的物品并尽可能多的装入背包;依次进行下去,直到背包装满为止。

回溯算法描述:回溯法从根结点出发,以深度优先的方式搜索整个解空间。

开始结点成为一个活结点,同时也成为当前的扩展结点。

在当前的扩展结点处,搜索向纵深方向移至一个新结点。

新结点就成为一个新的活结点,并成为当前扩展结点。

如果在当前的扩
展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。

此时往回移动至最近的一个活结点处,并使这个活结点成为当前的扩展结点。

回溯法递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。

针对所给问题,定义问题的解空间;确定易于搜索的解空间结构;以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。

分支限界算法描述:分支限界法以广度优先的方式搜索问题的解空间树,每一个活结点只有一次机会成为扩展节点。

活结点一旦成为扩展节点,就一次性产生其所有儿子节点,那些导致不可行解或导致非最优解的儿子节点被舍去,其余儿子节点被加入到活结点表中。

此后,从活结点表中取下一节点成为当前扩展节点,并重复上述节点扩展过程。

这个过程一直持续到找到所需的解或活结点表为空时为止。

五、实验原理、结果与结论:
1.1、动态规划求解0-1背包问题
实验结果:
实验原理:动态规划方法建立在最优原则的基础上,以空间换取时间,将一个问题的解决方案视为一系列决策的结果。

在动态规划中,还要看每个最优决策序列中是否包含一个最优子序列。

即无论过程的初始状态和初始决策是什么,其余的决策必须相对于初始决策所产生的状态构成一个最优决策。

如果把第i个物品装入背包,则背包中物
品的价值就等于把前i-1个物品装入容量为i w j -的背包中的价值加
上第i 个物品的价值i v ;如果第i 个物品没有装入背包,则背包中物
品的价值就是等于把前i-1个物品装入容量为j 的背包中所取得的价值。

取二者中价值较大者作为把前i 个物品装入容量为j 的背包中的最优解。

2.1、贪心算法求解背包问题:
实验结果:
实验原理:贪心算法也要求问题具有最有子结构性质。

0-1背包问题不能用贪心算法来求解。

在选择物品)1(n i i ≤≤装入背包时,可以选择一部分,而不一定要全部装入背包。

贪心法得不到最优解,无法保证最终能将背包装满,部分闲置的背包容量使背包单位重量的价值降低了。

3.1、回溯法求解背包问题:
实验结果:
实验原理:用回溯法解0-1背包问题时,用到状态空间树。

在搜索状态空间树时,只要其左儿子结点是一个可行结点,搜索就进入其左子树。

当右子树有可能包含最优解时才进入右子树搜索,否则将右子树剪去。

计算右子树中解的上界将剩余物品依其单位重量价值排序,
然后依次装入物品,直至装不下时,再装入该物品的一部分而装满背包。

由此得到的价值是右子树中解的上界,用此值来剪枝。

在搜索状态空间树时,由函数Backtrack控制。

在函数中是利用递归调用的方法实现了空间树的搜索。

4.1、分支界限法求解背包问题:
实验结果:
实验原理:在类Knap中有四个函数:上界函数Bound (),计算节点所对应价值的上界;函数AddLiveNode()是将一个新的活结点插入到子集树和优先队列中;KnapsackF()实施对子集树的优先队列式分支界限搜索。

其中假定物品依其单位价值从大到小已经排好序。

cw 是该结点的重量;cp是该结点的价值;up是价值上界。

算法的while 循环不断扩展结点,直到子集树的一个叶结点成为扩展结点为止。

此时优先队列中所有活结点的价值上界均不超过该叶结点的价值。

因此该叶结点相应的解为问题的最优解。

在while循环内部,算法首先检查当前扩展结点的左儿子结点的可行性。

如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。

当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。

六、时空效率分析:
动态规划法:由于函数Knapsack中有一个两重for循环,所以时间复杂度为O[nc]。

空间复复杂度也是O[nc],即O(nc)。


Traceback 需要O(n)。

贪心算法: 算法的时间上界O(nlogn)。

回溯法:上界函数Bound 需要O(n)时间,在最坏情况下有)2(n O 个右儿子结点需要计算上界,所以解0-1背包问题的回溯算法所需要的计算时间为)2(n n O 。

分支限界法:计算上界的函数Bound 需要O(n)的时间,而且在最坏情况下有)2(n O 个结点需要计算上界,所以在最坏情况下的时间复杂度为)2(n n O 。

四种算法比较:
从计算复杂性理论看,背包问题是NP 完全问题。

回溯法和分枝限界法等可以得到问题的最优解,可是计算时间太慢;动态规划法也可以得到最优解,当n m 2 时,算法需要)2(n n O 的计算时间,计算速度慢;采用贪心算法,不一定是最优解。

以上几种方法中回溯法、动态规划法、贪心法都广泛地应用到不同的实际问题中,并在应用中不断地改进。

七、实验总结:
在做本次实验之前,自己对动态规划、贪心、回溯法、分支限界法的原理不是非常的理解,花了很多时间看了课本上的相关内容。

不过那是C++代码,有些封装好的方法在Java里好像没能找到对应的方法,所以只能自己编写同功能的对应方法。

同时课本所提供的代码也是不能直接翻译过来用,当你懂得算法的基本原理后,你会发现数组下标会出错,课本所提供的代码数组下标一般都是从1开始,而我们输入的数据数组下标默认都是从0开始,所以在参考课本所提供的代码的同时,必须结合算法的实际情况对代码中的相关变量进行修改,这样才能充分利用课本所提供的代码完成本次实验。

通过本次试验,自己基本上掌握上述算法解0-1背包问题的原理,达到实验的目的。

相关文档
最新文档