优先队列式分支限界法求解0-1背包问题

优先队列式分支限界法求解0-1背包问题

ID:39607796

大小:445.67 KB

页数:18页

时间:2019-07-07

优先队列式分支限界法求解0-1背包问题_第1页
优先队列式分支限界法求解0-1背包问题_第2页
优先队列式分支限界法求解0-1背包问题_第3页
优先队列式分支限界法求解0-1背包问题_第4页
优先队列式分支限界法求解0-1背包问题_第5页
资源描述:

《优先队列式分支限界法求解0-1背包问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、算法分析与设计实验报告第7次实验姓名学号班级时间6.4上午地点四合院实验名称优先队列式分支限界法求解0-1背包问题实验目的通过上机实验,要求掌握优先队列式分支限界法求解0-1背包问题的问题描述、算法设计思想、程序设计。实验原理1、使用优先队列式分支限界法算法,根据不同的输入用例,能准确的输出背包能装的最大价值,并计算出程序运行所需要的时间。2、分支限界法常以广度优先或最小耗费优先(最大效益优先)方式搜索问题的解空间树,对于0-1背包问题的解空间树是一个棵子集树。3、在分支限界法中有一个活结点表,活结点表中的每个活

2、结点只有一次机会成为扩展结点,一旦成为 扩展结点就一次性产生所有儿子结点,在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入到活结点表中。4、为了尽快找到0-1背包问题的解,每次选取下一个活结点成为扩展结点的判断依据是当前情况下最有可能找到最优解的下一个结点。因此,每次选择扩展结点的方法:当前情况下,在活结点表中选择活结点的上界,最大的活结点成为当前的扩展结点。这一过程一直持续到找到所需的解或活结点表为空时为止。实验步骤1、定义树结点类bbnode,用于构造子集树,以便计算最优解;定

3、义堆结点类HeapNode,用于定义堆元素类型;定义最大堆类MaxHeap,用于实现优先队列定义.物品类Object,用于保存物品编号和物品的单位重量价值;定义解决0-1背包问题的主类Knap。2、设计求解0-1背包问题的主函数Knapsack,在其中对物品以单位价值量排序。3、设计负责求解0-1背包问题的最优值和最优解函数MaxKnapsack在其中调用计算结点价值上界函数Bound,向子集树和最大堆中插入结点函数AddLiveNode和释放最大堆最大结点的函数DeleteMax,实现优先级队列。4、输入数据到

4、input.txt文件中。5、添加计算运行时间的代码,计算不同规模数据的运行时间,并将结果输出到output文件中。6、分析时间复杂度:在最坏的情况下所有的节点都入队,最后一个节点才是最优解,这种情况下时间复杂度是指数阶。最好的情况是只装单位价值最大的物品,其余分支都不符合条件被截去这种情况下时间复杂度是常数时间。但分支限界法本质上还是穷举法,平均时间复杂度仍是指数阶。关键代码//物品类classObject{friendTypepKnapsack(Typew*,Typep*,Typew,int,int*);pu

5、blic:intoperator<=(Objecta)const{return(d>=a.d);}private:intID;//物品编号floatd;//单位重量价值};//树结点类classbbnode{friendclassKnap;friendTypepKnapsack(Typew*,Typep*,Typew,int,int*);private:bbnode*parent;//指向父节点的指针intLChild;};//堆结点类classHeapNode{friendclassKnap;friendcla

6、ssMaxHeap;public:operatorTypep()const{returnuprofit;};private:Typepuprofit,//结点的价值上界profit;//结点所相应的价值Typewweight;//结点所相应的重量intlevel;//活结点在子集树中所处的层序号bbnode*elemPtr;//指向该活结点在子集树中相应结点的指针};//最大堆类classMaxHeap{public:MaxHeap(intmaxElem){HeapElem=newHeapNode*[maxEle

7、m+1];//下标为0的保留capacity=maxElem;size=0;}voidInsertMax(HeapNode*newNode);HeapNodeDeleteMax(HeapNode*&N);private:intcapacity;intsize;HeapNode**HeapElem;};//0-1背包问题的主类classKnap{friendTypepKnapsack(Typew*,Typep*,Typew,int,int*);public:TypepMaxKnapsack();private:Ma

8、xHeap*H;TypepBound(inti);voidAddLiveNode(Typepup,Typepcp,Typewcw,intch,intlevel);bbnode*E;//指向扩展结点的指针Typewc;//背包容量intn;//物品总数Typew*w;//物品重量数组(以单位重量价值降序)Typep*p;//物品价值数组(以单位重量价值降序)Typewcw;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。