回溯算法 0-1 背包算法 2009-12-03 10:38:04 阅读 218 评论 0 字号:大中小 订阅 .
【实验目的】
学习掌握回溯算法。
【实验内容】
用回溯法求解 0—1 背包问题,并输出问题的最优解。 0—1 背包问题描述如下:
给定 n 种物品和一背包。物品 i 的重量是 Wi,其价值为 Vi,背包的容量是 c,问应如何选择
装入背包中的物品,使得装入背包中物品的总价值最大。
【实验条件】
Microsoft Visual C++ 6.0
【需求分析】
对于给定 n 种物品和一背包。在容量最大值固定的情况下,要求装入的物品价值最大化。
【设计原理】
一、回溯法:
回溯法是一个既带有系统性又带有跳跃性的的搜索算法。 它在包含问题的所有解的解空间树
中,按照深度优先的策略, 从根结点出发搜索解空间树。 算法搜索至解空间树的任一结点时,
总是先判断该结点是否肯定不包含问题的解。 如果肯定不包含, 则跳过对以该结点为根的子
树的系统搜索, 逐层向其祖先结点回溯。 否则,进入该子树, 继续按深度优先的策略进行搜
索。回溯法在用来求问题的所有解时, 要回溯到根, 且根结点的所有子树都已被搜索遍才结
束。而回溯法在用来求问题的任一解时, 只要搜索到问题的一个解就可以结束。 这种以深度
优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。
二、算法框架:
1、问题的解空间:应用回溯法解问题时,首先应明确定义问题的解空间。问题的解空间应
评论0
最新资源