算法分析與复杂性理论实验报告求最近点对的问题.docVIP

算法分析與复杂性理论实验报告求最近点对的问题.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法分析與复杂性理论实验报告求最近点对的问题

深 圳 大 学 实 验 报 告 课程名称: 算法分析与复杂性理论 实验项目名称: 实验二 分治法求最近点对问题 学院: 计算机与软件学院 专业: 软件工程 指导教师: 杨烜 报告人:文成 学号:2150230509 班级: 15级软工学术型 实验时间: 2015-10-22 实验报告提交时间: 2015-10-24 教务部制 实验目的与要求: 实验目的: (1)? (2)?。 实验要求 1.?blackboard提交电子版实验报告,注意实验报告的书写,整体排版。 2.?实验报告的实验步骤部分需详细给出算法思想与实现代码之间的关系解释,不可直接粘贴代码(直接粘贴代码者视为该部分内容缺失)。 3.?实验报告样式可从/guide.aspx?表格下载-学生适用-在校生管理-实践教学-实验:深圳大学学生实验报告) 4.?源代码作为实验报告附件上传。 5.?在实验课需要现场运行验证。 实验内容: 1.?对于平面上给定的N个点,给出所有点对的最短距离,即,输入是平面上的N个点,输出是N点中具有最短距离的两点。 2.?要求随机生成N个点的平面坐标,应用蛮力法编程计算出所有点对的最短距离。 3.?要求随机生成N个点的平面坐标,应用分治法编程计算出所有点对的最短距离。 4.?分别对N=100,1000,10000,100000,统计算法运行时间,比较理论效率与实测效率的差异,同时对蛮力法和分治法的算法效率进行分析和比较。 5.?利用Unity3D 输出分治算法中间每个步骤的计算结果,并增设help按钮,详细解释算法思想算法思想提示 1.??S中的x轴和y轴坐标进行排序,得到X和Y,很显然此时X和Y中的点就是S中的点。 2.??点数较少时的情形 3.??点数|S|3时,将平面点集S分割成为大小大致相等的两个子集SL和SR,选取一个垂直线L作为分割直线,考虑XL和XR,YL和YR,这里还需要排序吗? 4.??两个递归调用,分别求出SL和SR中的最短距离为dl和dr。 5.??取d=min(dl, dr),在直线L两边分别扩展d,得到边界区域Y,Y’是区域Y中的点按照y坐标值排序后得到的点集,Y又可分为左右两个集合Y’L和Y’R 6.??对于Y’L中的每一点,检查Y’R中的点与它的距离,更新所获得的最近距离 实验过程及内容: (实验代码已作为附件提交,名为“算法实验二.cpp”) 当点的数量小于3时,直接计算,当点的个数大于3时,采用分治法。 当N=1时 当N=2时 只有两个点,最近点对就是这两个点 测试数据为(1,1)(2,2) 预期结果为d=1.414 与预期结果相同 使用蛮力法求最近点对,核心代码如下 (计算两点之间的距离,分别将每个点与其它点的距离求出来,找出最近点距离) 当N3时,使用分治法的情况 核心代码如下: 当N=6时,给定一组测试数据 测试数据与与预期结果相同。 下面随机生成N个点的平面坐标,求解最近点对。 并计算时间 产生随机数代码: 计算时间代码 分治法例举: 数据处理分析: 扩大N的规模做测试 n 10 100 1000 10000 100000 蛮力法 1秒 9秒 57秒 分治法 1秒 9秒 30秒 由以上数据可知,随着N的增大,分治法效率比蛮力法效率越来越高。 蛮力法求解最近对问题的过程是:分别计算每一对点之间的距离,然后找出距离最小的那一对,为了避免对同一对点计算两次距离,只考虑i<j的那些点对(Pi, Pj)。 其实也就是组合的问题,即从n个点中选取两个点的所有组合情况的问题,共有(n*(n-1))种情况。因此时间复杂度为: 治法求解含有n个点的最近对问题,其时间复杂性可由下面的递推式表示: 合并子问题的解的时间f(n)=O(n),根据通用分治递推式可得T(n)=O(nlog2n)。 实验结论与体会: 分治法的思想就是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同

文档评论(0)

df9v4fzI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档