分治法和蛮力法求解最近对问题供参习.docVIP

分治法和蛮力法求解最近对问题供参习.doc

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

蛮力法与分治法求解最近对问题 摘要:在计算机科学理论和程序设计实践中,往往会面对众多的问题,面对这些问题,人们想到了很多算法来解决。 最常见也最常用的是蛮力法,在解决问题和研究算法过程中,人们常在不断探索和寻求许多好的算法来求解同一个问题。本文就最近对问题,分别对蛮力法和分治法的思想、复杂度、效率做了一定的讲述,并对两个方法在此问题中的效率进行了简单分析。 关键字:蛮力法、分治法、效率。 一.引言 通常我们所说的最接近对问题是指平面上(即二维坐标平面)给定n 个点,找其中的一对点,使得在n 个点的所有点对中,,该点对的距离最小。在求解这个问题时,我们可以采用很多算法来实现。最朴素的解法就是蛮力法,所谓蛮力法就是将是一种简单直接地解决问题的方法,常常直接基于问题的描述和所涉及的概念定义,来求解问题。这样一来,显得蛮力法确实比较实用而方便。往往事物都有两面性,此算法确实简单实用,可是效率却比较低。所以我们针对不同问题时,要采用合适的算法来求解,达到效率和求解难度综合起来达到一个比较好的极点。本文在研究最近对问题时又采用了分治法,所谓分治法,就是分而治之即把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题 (1)适用泛围广,是能解决几乎所有问题的一般性方法; (2)常用于一些非常基本、但又十分重要的算法(排序、查找、矩阵乘法和字符串匹配等); (3)解决一些规模小或价值低的问题; (4)可以做为同样问题的更高效算法的一个标准; (5)可以通过对蛮力法的改进来得到更好的算法。 2、分治法 分治法,就是分而治之即把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题 三.算法的基本思想及复杂度分析 3.1.蛮力法 (1)基本思想 蛮力法求解最近对问题的过程是:分别计算每一对点之间的距离,然后通过排序找出距离最小的一对,为了避免对同一对点计算两次距离,只考虑ij的那些点对(Pi,Pj)。 (2)复杂度分析 算法的基本操作是计算两个点的欧几里得距离。在求欧几里得距离时,我们要避免求平方根操作,因为求平方根时要浪费时间,而在求解此问题时,求解平方根并没什么更大的意义。如果被开方的数越小,则它的平方根也越小。因此,算法的基本操作就是求平方即可,其执行次数为: T(n)= =2=n(n-1)=O(n) 3.2.分治法 (1)基本思想 用分治法解决最近对问题,就是将集合S分成两个子集S1和S2,每个子集中有n/2个点。然后在每个子集中递归的求其最接近的点对,在求出每个子集的最接近点对后,关键问题是如何实现分治法中的合并步骤,如果组成S的最接近点对的2个点都在S1中或都在S2中,则问题很容易解决。但是,如果这2个点分别在S1和S2中,则对于S1中任一点p,S2中最多只有n/2个点与它构成最接近点对的候选者,仍需计算才能得到准确结果。 (2)复杂度分析 应用分治法求解含有n个点得最近对问题,其时间复杂性可由下面的递推式表示: T(n)=2T(n/2)+f(n) 合并子问题的解的时间f(n)=O(1),由通用分治递推式的主定理可得: T(n)=O(nlogn) 为提高算法效率,在算法中采用预排序技术,即在使用分治法之前,预先将S中的n个点依其y坐标排序好。经过预排序处理后的算法所需的计算时间T(n)满足递归方程:当n小于4时,T(n)=O(1);当n大于等于4时,T(n)=2T(n/2)+O(n)。由此易知,T(n)=O(nlogn)。预排序所需的计算时间显然为O(nlogn)。因此,整个算法所需的计算时间为O(nlogn)[M ] ,清华大学出版社。 【4】 东学刊(自然科学版) 第6 卷第2 期。 ? 4

文档评论(0)

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

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

1亿VIP精品文档

相关文档