数据结构与算法课程设计报告--最近点对问题的解决算法.docx
《数据结构与算法课程设计报告--最近点对问题的解决算法.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计报告--最近点对问题的解决算法.docx(8页珍藏版)》请在第壹文秘上搜索。
1、课程设计报告课程名称:数据结构与算法项目名称:最近点对问题的解决算法正文部分1)简介题目原文:最近点对问题在一片金属板上钻多个大小一样的洞,如果洞太近(洞中心距离Dcm),金属可能会断。现假设在金属板上,钻了n个洞,请编程判断该金属板是否会断。该问题的抽象模型:在一个二维平面中有有限的点,求其中距离最近的两点的距离。2)实现(算法,流程,数据结构,复杂度分析等的描述)算法:采用分治法。首先划分集合S为SL和SR,使得SL中的每一个点位于SR中每一个点的左边,并且SL和SR中点数相同。分别在SL和SR中解决最近点对问题,得到DL和DR,分别表示SL和SR中的最近点对的距离。令d=min(DL,D
2、R)o如果S中的最近点对(PLP2)。PLP2两点一个在SL和一个在SR中,那么Pl和P2一定在以L为中心的间隙内,以L-d和L+d为界,如下图所示:LSl SR 如果在SL中的点P和在SR中的点Q成为最近点对,那么P和Q的距离必定小于do因此对间隙中的每一个点,在合并步骤中,只需要检验ypd和yp-d内的点即可。流程:步骤1:根据点的y值和X值对S中的点排序。步骤2:找出中线L将S划分为SL和SR步骤3:将步骤2递归的应用解决SL和SR的最近点对问题,并令d=min(dL,dR)o步骤4:将L-d-L+d内的点以y值排序,对于每一个点(XLyI)找出y值在yl-d-yld内的所有点,计算距离
3、为do如果Cr小于d,令d=d,最后的d值就是答案。数据结构:顺序存储。算法复杂度分析:STLisort使用了时间复杂度为O(Mgn)的排序算法,对于一个数据规模为n的最近点对问题,定义它的复杂度为T(n)o算法的第一步将问题分解成两个子问题,分解这部分的复杂读是2T(n)第2步线性扫描,上界为0(n)。第3步对于P中的每一个点,其比较的时间复杂度是常数。由于需要扫描所有P点,上界为0(n)。原问题时间复杂度T(n)=2T(n)+0(n)使用算法导论的主定理可以得出总的上界为O(nlgn)易知空间复杂度为0(n)3)结果展示(效果,功能,以及其他相关图片,数据等)可自行设置安全距离,设置打孔数
4、量请输入打孔数量?至少需要两个点.至少需要两个点.实际运行效果,附穷举法验证:请设定安全距离.4.567请输入打孔数量?1017.3555.08安全.0.3312.98615.03317.000.80:5安全.55安全.7.98.8安全.77危险,最近两点的距离为2.01246,少于4.567使用穷举法验证最小距离为2.012464)问题分析(碰到什么问题,如何解决)在类中定义的比较方法需要定义为静态,所以将数据存储容器作为全局变量定义。5)程序代码清单(代码应含有恰当的注释语句)/*源代码*/#include#include#include#includeusingnamespacestd;
5、classPointdoublex,y;点对象的结构public:Point(doublex,doubley)(this-x=x;this-y=y;)doubledistjo(Pointp)returnsqrt(-p.x)*(x-p.x)+(y-p.y)*(y-p.y);)friendclassPlane:;vectorcontainer:点集的容器,使用STLVeCtor存储classPlanePub附平面类的声明voidadd(Pointp)(container.psh-back(p);)staticboolcmpXY(constPoint&a,constPointsb)(if(a.xI=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 课程设计 报告 最近 问题 解决
