《算法设计与分析》历年期末试题整理(含答案)_第1页
《算法设计与分析》历年期末试题整理(含答案)_第2页
《算法设计与分析》历年期末试题整理(含答案)_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 if (ai&bk+i&cn+k-i】) COlk=l;ai=bk+i=cn+k-i=O;if (k=n) return 1; elsefdund=queen_one(k+1 m);ai=bk+i=cn+k-i=l;return found; 分支定界法:分支限界法:这足一种用于求解组合优化问题的排除IP解的拽索算法。类似于回溯法,分枝定界法在拽索 解空闻时,也经常使用树形结构来组织解空然而与回溯法不同的足,回溯算法使用深度 优先方法捜索W结构,而分枝定界一般用宽度优先或胬小耗费方法来搜索这些树。闪此,可 以很容易比较回溯法与分枝定界法的异同。相对而言,分枝定界算法的解空叫比回溯法人得 多,

2、因此当内存容星有限吋,回溯法成功的可能性更大。算法思想:分枝定界(branch and bound)是另一种系统地搜索解空问的方法,它4回溯法 的主要区别在于对E-节点的扩充方式。每个活节点有且仅有一次机会变成E-节点。当一个 节点变为E-节点时,则生成从该节点移动一步即可到达的所有新节点。在生成的节点中, 抛弃那些不可能导出(最优)川行解的节点.其余节点加入活节点表,然后从表中选择一个 节点作为下一个E-节点。从活节点表中取出所选择的节点并进行扩充.直到找到解或活动 表为空,扩充过程才结束。有两种常用的方法用来选择下一个E-节点(虽然也可能存在其他的方法):1)先进先出(FIFO)即从活节点

3、表中取出节点的顺序与加入节点的顺序相同,闪此活 节点表的性质与队列相同。2)最小耗费或W人收益法在这种模式中.每个节点都有一个对沌的耗费或收益。如果S找 一个a有最小耗费的解,则a节点表可用最小堆来建立,下一个e-节点就是只有最小耗费 的活节点:如果希望拽索一个良有最人收益的解,则可用最人难來构造活节点表,下一个 E-节点是具有最大收益的活节点装载问题用一个队列Q來存放活结点表,Q中weight 表示每个活结点所相沌的当前载重鼠。当 weight=-l时.表示队列己达到解空叫树 同一层结点的尾部。算法首先检测当前扩展结点的左儿子结 点是否为行结点。如果足则将其加入到活 结点队列中。然后将其右儿

4、子结点加入到活 结点队列中(右儿子结点一定是可行结旬。2 个儿子结点部产生后.当前扩展结点被舍 弃。活结点队列中的队首兀素被取出作为当前扩展结点,由于队列中每一层结点之后 都有一个尾部标记-1,故在取队首索时, 活结点队列一定不空。当取出的兀索足-1 时.再判断当前队列足否为空。如果队列非 空,则将尾部标记-1加入活结点队列,算法 开始处理下一层的活结点。/*该版本只算出最优解*/#include#include struct Queue) int weight;struct Queue* next,;mtbestw = O;/目前的鉍优值 Queue* Q, /活结点队列 Queue* lq

5、 = NULL ; Queue* fq = NULL ;int Add(int w)Queue* q;q = (Queue*)malloc(sizeof(Queue); if(q=NULL)priiitfC1没有足够的空问分; return 1;q-next = NULL;q-weiglit = w;if(Q-next = NULL)!Q-next = q;fq = lq = Q-uext ; /一定要使元索放到链lq-next = q;iq = q;/ lq = q-nextletxun 0;nit IsEmptyO!if(Q-next=NULL)renun 1;return 0;int D

6、elete(int&w)Queue* tmp = NULL ;!i fq = Q-next;tmp = fq ;w = fq-weiglit;Q next = fq-next ; /*一定不能去了链表头 fq = fq-next;fiee(tmp);return 0 ; void EuQueue(mt wt.uit& bestw,int l, int n) /该函数负贵加入 活结点 /如果不是叶结点,则将结点权值Vt加 入队列Qif(1 = n)/叶子if (wtbestw)bestw = vt,elseAdd(M); /不足叶子 mt MaxLoaduig(int w, uit c, uh

7、n) /返回最优装裁值/为层次1初始化 mt eu;/返回值inti = l;/当前扩展结点的层 mt Ew = 0; /当前扩展结点的权值 bestw =0;/ y前的最优值 Q = (Queue*)malloc(sizeof(Queue); Q-next = NULL : Q- weight = -1;err = Add(-l); /标记本展的尾部leturn 0 ;while (true)/检査左孩子结点if (Ew + wi = c) / xi = 1 EnQueue(Ew + wi, bestw,i,n); /右孩子总是nJ行的EiiQueue(Ew, besnv,i, n); /

8、xi = 0 Delete(Ew); /取下一个扩展结点 if(Ew = -l)/到达层的尾部if (IsEmptyO)return besm*;Add(-l);/同层结点的尾部Delete(Ew);/収下一扩展结点 1+;/进入下一层int mam()mt n =0; int c = 0 ;int l = 0 ; mt* w; FILE *in,*out; in=fopen(Minput.txtM,HiM); out = fopeufoutput.txt,”w”): if(m=NULL| out=NULL) prmtf(”没有输入输出文件n”J; renirn 1 ; fscanf(in,”d”,&n); fscanf(iii, W,&c); w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论