分治算法之平面最接近点问题.docVIP

  • 11
  • 0
  • 约4.66千字
  • 约 14页
  • 2017-11-29 发布于湖北
  • 举报
分治算法之平面最接近点问题

分治算法的应用 课程名称: 算法设计与分析 院 系: 计算机科学与信息工程学院 学生姓名: ******* 学 号: ************ 专业班级: ***************************** 指导教师: ****** 2013年12月27日 分治算法的应用 摘 要:分治算法的基本思想是将一个规模为N的问题分解为K规模较小的子问题,这些子问题相互独立且与原问题性质相同。就可得到原问题的解。分治法与动态规划法实际上都是递归思想的运用 二者的根本策略都是对问题进行分解,找到大规模与小规模的关系,然后通过解小规模的解,得出大规模的解不同点: 适用于分治法的问题分解成子问题后,各子问题间无公共子问题,而动态规划法相反。k = 2 , 从分治法的一般设计模式可以看出,用它设计出的程序一般是一个递归过程。因此,分治法的计算效率通常可以用递归方程来进行分析。 关键词:分治法 平面最接近点 二分法 递归 子问题 目 录 第1章 绪论 3 1.1 分治算法的知识介绍 3 1.2 分治算法的问题描述 3 第2章 分治算法的理论知识 5 2.1数据结构和算法效率 5 2.2分治算法之折半查找 5 第3章 平面最接近点问题 6 3.1 平面最接近点问题描述 6 3.2 平面最接近点问题算法分析 7 3.3 测试结果与分析 9 第4章 结论 11 参考文献 12 第1章 绪论 1.1 分治算法的知识介绍 分治算法的基本思想是将一个规模为N的问题分解为K规模较小的子问题,这些子问题相互独立且与原问题性质相同。就可得到原问题的解。所给平面上n个点的集合S分成两个子集S1和S2,每个子集中约有n/2个点。然后在每个子集中递归地求最接近的点对O(nlognlogn),另外对于二维最接近点问题,我们用一个结构体来存储每个点的横纵坐标,再用一个一位数组来存储重叠的子集,再用一个数组来存储最近距离的结点,使用数组更方便输入和排序,而对于一维的问题,因为把原问题分成子问题后,重叠的自己最多只有一个,所以只用一个一位数组存储输入的数据就可以了。而且为了提高分治的效率,先对输入的数据进行排序,选取适当的分割点,然后在运用分治策略。 2.2分治算法之折半查找 ?折半查找法也称为二分查找法或二分搜索法,它充分利用了元素间的次序关系,采用分治策略而较快地查找数据。现要求给出一个待查找的实例,并给出二分搜索算法,编写程序利用此算法实现查找。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,其主要思想也是递归,即来源于分治递归算法,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。 第3章 平面最接近点问题 3.1 平面最接近点问题描述 我们用分治的方法,将所给平面上n个点的集合S分成两个子集S1和S2,每个子集中约有n/2个点。然后在每个子集中递归地求最接近的点对。在这里,一个关键的问题是如何实现分治法中的合并步骤,即由S1和S2的最接近点对,如何求得原集合S中的最接近点对。如果这两个点分别在S1和S2中,问题就变得很简单了,但是如果这两个点一个在S1中,一个在S2中,问题就变得复杂了,我们首先考虑一维的情形,对于一维的情形,?假设我们用m点将S分为S1和S2两个集合,这样一来,对于所有的p(S1中的点)和q(S2中的点),有pq。递归地在S1和S2上找出其最接近点对{p1,p2}和{q1,q2},并设d = min{ |p1-p2| , |q1-q2| },?由此易知,S中最接近点对或者是{p1,p2},或者是{q1,q2},或者是某个{q3,p3},如图1所示。? 如果最接近点对是{q3,p3},即|p3-q3|d,则p3和q3两者与m的距离都不超过d,且在区间(m-d,d]和(d,m+d]各有且仅有一个点。这样,就可以在线性时间内实现合并,时间的复杂度是O(nlogn)。 图3-1 一维情形 在二维情形下,类似的,利用分治法,由图3-1可见,形成的宽为2d的带状区间,最多可能有n个点,合并时间最坏情况下为n^2,。但是,P1和P2中的点具有以下稀疏的性质,对于P1中的任意一点,P2中的点必定落在一个d X 2d的矩形中,且最多只需检查六

文档评论(0)

1亿VIP精品文档

相关文档