资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
成 绩 评 定 表学生姓名xx班级学号xx专 业信息与计算科学课程设计题目1.分治法解决最近距离问题2.分支限界解决旅行商售货员问题评语组长签字:成绩日期 20 年 月 日课程设计任务书学 院理学院专 业信息与计算科学学生姓名xx班级学号xx课程设计题目1.分治法解决最近距离问题2.分支限界解决旅行商售货员问题实践教学要求与任务:1、巩固和加深对计算机算法分析与设计基本知识的理解。2、初步掌握简单软件的分析方法和设计方法。3、了解与课程有关的工程技术规范,能正确解释和分析设计结果。4、具体任务(1)分治法解决最近距离问题(2)分支限界解决旅行商售货员问题工作计划与进度安排:第一天 查阅资相关料; 第二、三天 程序设计; 第四天 程序调试; 第五天 答辩指导教师: 201 年 月 日专业负责人:201 年 月 日学院教学副院长:201 年 月 日摘 要计算效率是一个古老的研究课题。科学技术的发展使得计算日趋复杂,计算量越来越大,许多理论上可计算的问题,常常由于其计算量巨大布变成了现实不可计算的问题,这就产生了理论可计算而现实不可计算的矛盾,而算法设计与分析的任务就是对各类具体的问题设计高质量的算法,以及研究设计算法的一般规律和方法。常用的算法设计方法主要有分治法、动态规划、贪婪法和回溯法等。问题一:运用分治法对多点最近距离问题进行算法设计,把问题分解为不是相互独立的子问题,计算保存子问题的答案,从而再求重复子问题时可以直接找到答案。通过反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。问题二:运用分支限界对旅行商售货员问题进行算法设计,求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。)分支限界法首先确定一个合理的限界函数,并根据限界函数确定目标函数的界;然后按照广度优先策略遍历问题的解空间树,在某一分支上,依次搜索该结点的所有孩子结点,分别估算这些孩子结点的目标函数的可能取值(对最小化问题,估算结点的下界,对最大化问题,估算结点的上界)。如果某孩子结点的目标函数值超出目标函数的界,则将其丢弃(从此结点生成的解不会比目前已得的更好),否则入待处理。 关键词: 算法设计与分析;分支限界法;分治法目 录1分治法解决最近距离问题11.1 问题描述11.2 算法设计21.3 算法实现31.4 运行结果与分析62分支限界解决旅行商售货员问题72.1 问题描述72.2 算法设计82.3 算法实现92.4 运行结果与分析14总结15参考文献16IV1分治法解决最近距离问题1.1 问题描述已知集合S中有n个点,分治法的思想就是将S进行拆分,分为2部分求最近点对。算法每次选择一条垂线L,将S拆分左右两部分为SL和SR,L一般取点集S中所有点的中间点的x坐标来划分,这样可以保证SL和SR中的点数目各为n/2,(否则以其他方式划分S,有可能导致SL和SR中点数目一个为1,一个为n-1,不利于算法效率,要尽量保持树的平衡性)依次找出这两部分中的最小点对距离:L和R,记SL和SR中最小点对距离 = min(L,R),如图1.1:图1.1以L为中心,为半径划分一个长带,最小点对还有可能存在于SL和SR的交界处,如图1.1中的虚线带,p点和q点分别位于SL和SR的虚线范围内,在这个范围内,p点和q点之间的距离才会小于,最小点对计算才有意义。1.2 算法设计 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。 如果原问题可分割成k个子问题,1kn ,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 分治法在每一层递归上都有三个步骤: 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题; 合并:将各个子问题的解合并为原问题的解。分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 3) 利用该问题分解出的子问题的解可以合并为该问题的解; 4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。算法的时间复杂度:首先对点集S的点x坐标和y坐标进行升序排序,需要循环2nlogn次,复杂度为O(2nlogn)接下来在分治过程中,对于每个SyL中的点,都需要与SyR中的6个点进行比较O(n)= 2O(n/2) + (n/2)*6 (一个点集划分为左右两个点集,时间复杂度为左右两个点集加上中间区域运算之和)其解为O(n) O(3nlogn)因此总的时间复杂度为O(3nlogn),比蛮力法的O(n2)要高效。1.3 算法实现#include#includestruct Point double x; double y; ; double ClosestPoints(Point S,int n) int i,j,a=0,b=0,c=0; int p=0,q=0; double dmin,k=99999.0,d1,d2,d,r25,m,sum=0; Point temp,S15,S25,P15,P25; if(n2) return k; for(i=0;i=i;j-)if(Sj.xSj-1.x) temp=Sj; Sj=Sj-1; Sj-1=temp; for(i=0;in;i+) sum+=Si.x; m=sum/(float)n; for(i=0;in;i+) if(Si.xm) S1a+=Si; else S2b+=Si; d1=ClosestPoints(S1,a); d2=ClosestPoints(S2,b); if(d1d2) d=d1; else d=d2; for(i=0;ia;i+) if(abs(S1i.x-m)d) P1p+=S1i; for(i=0;ib;i+) if(abs(S2i.x-m)d) P2q+=S2i; for(i=0;i=i;j-)if(P1j.yP1j-1.y) temp=P1j; P1j=P1j-1; P1j-1=temp; for(i=0;i=i;j-)if(P2j.yP2j-1.y) temp=P2j; P2j=P2j-1; P2j-1=temp; dmin=abs(P20.y-P10.y); for(i=0;iq;i+) for(j=0;jp;j+) if(abs(P2i.y-P1j.y)d) rc+=sqrt(P1i.x-P2j.x)*(P1i.x-P2j.x)+(P1i.y-P2j.y)*(P1i.y-P2j.y); dmin=r0; for(i=0;ic;i+) if(ridmin) dmin=ri; if(ddmin) return d; else return dmin; void main() int i,n; Point S100; cout请输入点的个数(小于等于100的正整数):n; cout请输入平面上的n个点的横纵坐标:endl; for(i=0;iSi.xSi.y; cout平面上最近两个点间的距离为:ClosestPoints(S,n)endl; 1.4 运行结果与分析图1.2问题1运行结果 输入4个不同点的坐标分别为4,5,6,1,2,10,7,8,输出平面上最近两个点的距离为4.47214。根据多组测试的数据来看,分治法解决该问题得效率比蛮力法要高效的多,但是如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。2分支限界解决旅行商售货员问题2.1 问题描述 某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。 路线是一个带权图。如图1.3中各边的费用(权)为正数。图1.3的一条周游路线是包括V中的每个顶点在内的一条回路。周游路线的费用是这条路线上所有边的费用之和。旅行售货员问题的解空间可以组织成一棵树,从树的根结点到任一叶结点的路径定义了图的一条周游路线。旅行售货员问题要在图1.3中找出费用最小的周游路线。 图1.32.2 算法设计 分支限界法类似于回溯法,也是一种在
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号