ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:31.98KB ,
资源ID:7846472      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7846472.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(01背包分支要点Word格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

01背包分支要点Word格式.docx

1、CF,GG,L,MG,MGN,OO /0-1背包问题 分支限界法求解 #include stdafx.h MaxHeap.h#include using namespace std;class Object template friend Typep Knapsack(Typep p,Typew w,Typew c,int n, int bestx); public: int operator =a.d; private: int ID; float d;/单位重量价值 ;template class Knap;class bbnode friend Knap; bbnode * parent

2、; /指向父节点的指针 bool LChild; /左儿子节点标识 class HeapNode Typew,Typep operator Typep() const return uprofit; Typep uprofit, /节点的价值上界 profit; /节点所相应的价值 Typew weight; /节点所相应的重量 int level; /活节点在子集树中所处的层序号 bbnode *ptr; /指向活节点在子集中相应节点的指针 class Knap Typep MaxKnapsack(); MaxHeapHeapNode *H; Typep Bound(int i); void

3、 AddLiveNode(Typep up,Typep cp,Typew cw,bool ch,int lev); bbnode *E; /指向扩展节点的指针 Typew c; /背包容量 int n; /物品数 Typew *w; /物品重量数组 Typep *p; /物品价值数组 Typew cw; /当前重量 Typep cp; /当前价值 int *bestx; /最优解 template inline void Swap(Type &a,Type &b);void BubbleSort(Type a,int n);int main() int n = 3;/物品数 int c = 3

4、0;/背包容量 int p = 0,45,25,25;/物品价值 下标从1开始 int w = 0,16,15,15;/物品重量 下标从1开始 int bestx4;/最优解 cout背包容量为:cendl;物品重量和价值分别为: for(int i=1; i=n; i+) (wi,pi) 背包能装下的最大价值为:Knapsack(p,w,c,n,bestx)此背包问题最优解为:bestxi return 0; Typep Knap:Bound(int i)/计算节点所相应价值的上界 Typew cleft = c-cw; /剩余容量高 Typep b = cp; /价值上界 /以物品单位重量

5、价值递减序装填剩余容量 while(i=n & wi=cleft) cleft -= wi; b += pi; i+; /装填剩余容量装满背包 if(i=n) b += pi/wi*cleft; return b;/将一个活节点插入到子集树和优先队列中 void Knapparent = E;LChild = ch; HeapNodeInsert(N);/优先队列式分支限界法,返回最大价值,bestx返回最优解 MaxKnapsack() H = new MaxHeap(1000); /为bestx分配存储空间 bestx = new intn+1; /初始化 int i = 1; E = 0

6、; cw = cp = 0; Typep bestp = 0;/当前最优值 Typep up = Bound(1); /搜索子集空间树 while(i!=n+1) /检查当前扩展节点的左儿子节点 Typew wt = cw + wi; if(wt bestp) bestp = cp + pi; AddLiveNode(up,cp+pi,cw+wi,true,i+1); up = Bound(i+1); /检查当前扩展节点的右儿子节点 if(up=bestp)/右子树可能含有最优解 AddLiveNode(up,cp,cw,false,i+1); /取下一扩展节点 DeleteMax(N); E

7、 = N.ptr; cw = N.weight; cp = N.profit; up = N.uprofit; i = N.level; /构造当前最优解 for(int j=n; j0; j-) bestxj = E-LChild; E = E-parent; return cp;/返回最大价值,bestx返回最优解 Typep Knapsack(Typep p,Typew w,Typew c,int n, int bestx) Typew W = 0; /装包物品重量 Typep P = 0; /装包物品价值 /定义依单位重量价值排序的物品数组 Object *Q = new Object

8、n; /单位重量价值数组 Qi-1.ID = i; Qi-1.d = 1.0*pi/wi; P += pi; W += wi; if(W=c) return P;/所有物品装包 /依单位价值重量排序 BubbleSort(Q,n); /创建类Knap的数据成员 Knap K; K.p = new Typepn+1; K.w = new Typewn+1; K.pi = pQi-1.ID; K.wi = wQi-1.ID; K.cp = 0; K.cw = 0; K.c = c; K.n = n; /调用MaxKnapsack求问题的最优解 Typep bestp = K.MaxKnapsack

9、(); for(int j=1; j j+) bestxQj-1.ID = K.bestxj; delete Q; delete K.w; delete K.p; delete K.bestx; return bestp;void BubbleSort(Type a,int n) /记录一次遍历中是否有元素的交换 bool exchange; for(int i=0;n-1;i+) exchange = false ; for(int j=i+1;=n-1; if(aj=aj-1) Swap(aj,aj-1); exchange = true; /如果这次遍历没有元素的交换,那么排序结束 if(false = exchange) break ;b) Type temp = a; a = b; b = temp;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2