基于递归法的最接近点对问题(共7页).docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《基于递归法的最接近点对问题(共7页).docx》由会员分享,可在线阅读,更多相关《基于递归法的最接近点对问题(共7页).docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上基于递归法的最接近点对问题姓名:杨 意学号:9学院:数学信息学院 专业:计算机辅助教育目 录1、 问题综述22、 用递归法解决22.1 一维情形下的分析22.2 二维情形下的分析32.3 算法优化62.4 算法实现63、结论9基于递归法的最接近点对问题摘要:在计算机应用中,常用诸如点、圆等简单的几何对象表现现实世界中的实体。在涉及几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来处理,则具有最大碰撞危险的两架飞机就是这个空间中最近的一点。这类问题是计算机几何学中研究的基本问题之一。本文就运用递归法对一维
2、和二维的情况加以讨论。关键词:最接近点对 递归法问题综述最接近点对问题的提法是:给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。实际情况下,最接近点对可能多于一对,为简单起见 ,我们只找其中的一对作为问题的解。有一个最直观的方法就是将每一点与其他n-1个点的距离算出,找出达到最小距离的两点即可。然而,这样做效率太低,我们想到用递归法来解决这个问题。2、 用递归法解决将所给的平面上n个点的集合S分成两个子集S1和S2 ,每个子集中约有n/2个点 。然后在每个子集中递归地求其最接近的点对。在这里,一个关键的问题是如何实现递归法中的合并步骤,即由S1 和S2的最接
3、近点对,如何求得原集合S中的最接近点对。如果组成S的最接近点对的两个点都在S1中或都在S2中,则问题很明显就可以找到答案。可是还存在另外一种可能,就是这两给点分别在S1和S2 中的时候。下面主要讨论这种情况。2.1 一维情形下的分析为使问题易于理解和分析,我们先来考虑一维的情形。此时,S中的n各点退化为x轴上的n个实数x1,x2,x3xn。最接近点对即为这n个实数中相差最小的两个实数。我们尝试用递归法来求解,并希望推广到二维的情形。假设我们用x轴上的某个点m将S划分为两个集合S1和S2 ,使得S1=xS | xm ;S2 = xS | xm 。这样一来,对于所有p和qS2 有pq。 递归地在S
4、1和S2 上找出其最接近点对p1,p2和q1,q2,并设d=min| p1- p2|,| q1- q2|由此易知,S中的最接近进点对或者是 p1 ,p2,或者是 q1 ,q2,或者是某个p3,q3,其中,p3S1且q3S2 。如图2-1-1所示。 图2-1-1 一维情形的递归法 我们注意到,如果S的最接近点对是p3,q3,即|p3-q3|d,则p3和q3两者与m的距离不超过d,即| p3-m|d,| q3 -m|d。也就是说 ,p3(m-d,m,q3(m,m+d。由于每个长度为d的半闭区间至多包含S1中的一个点,并且m是S1和S2 的分割点,由图2-1-1可以看出,如果(m-d,m中有S中点
5、,则此点就是S1中最大点。同理,如果(m,m+d中有S中点,则此点就是S2 中最小点。因此,我们用线性时间就能找到区间(m-d,m和(m,m+d中所有点,即p3和q3。从而我们用线性时间就可以将S1的解和S2 的解合并成为S的解。但是,还有一个问题需要认真考虑,即分割点m的选取,即S1和S2 的划分。选取分割点m的一个基本要求是由此将S进行分割,使得S= S1S2 ,S1,S2 ,且S1x|xm ,S2 x| xm 。容易看出,如果选取m=max(S)+min(S)/2,可以满足分割要求。然而,这样选取分割点,有可能造成划分出的子集S1和S2 的不平衡 。例如在最坏情况下,| S1|=1,|
6、S2 |=n-1,这样的计算效率与分割前相比提高幅度不明显。这种现象可以通过递归法中“平衡子问题”的方法加以解决。我们可以适当选择分割点m,使S1和S2 中有个数大致相等的点。我们会想到用S中各点坐标的中位数来作为分割点。 由此,我们设计出一个求一维点集S的最接近点对的算法Cpair 1如下:-Bool Cpair 1(S,d)N=|S|;if(n2) d=; return false;m=S中各点坐标的中位数;/构造S1和S2 ; S1=xS | xm ;S2 = xS | xm ;Cpair 1(S1,d1);Cpair 1(S2 ,d2);p=max(S1);q=min(S2 );d=m
7、in(d1,d2,q-p);return true-2.2 二维情形下的分析 以上一维算法可以推广到二维的情形。 设S中的点为平面上的点,它们都有两个坐标值x和y。为了将平面上点集S线性分割为大小大致相等的两个子集S1和S2 ,我们选取一垂直线L:x=m来作为分割直线。其中,m为S中各点x坐标的中位数。由此将S分割为S1=pS | x (p) m 和S2 =pS | x (p) m 。从而使S1和S2 分别位于直线L的左侧和右侧,且S=S1S2 。由于m是S中各x坐标的中位数,因此S1和S2 中得点数大致相等。 递归地在S1和S2 上解最接近点对问题,我们分别得到S1和S2 中的最小距离d1和
8、d2。现设d=mind1,d2。若S的最接近点对(p,q)之间的距离小于d,则p和q必分属于S1和S2 。不妨设pS1,qS2 。那么p和q距直线L的距离均小于d。因此,若我们用P1和P2分别表示直线L的左边和右边的宽为d的两个垂直长条区域,则pP1且qP2,如图2-2-1所示。图2-2-1 距直线L的距离小于d的所有点在一维情形下 ,距分割点距离为d的两个区间(m-d,m和(m,m+d中最多各有S中一个点。因而这两点成为唯一的未检查过的最接近点对候选者。二维的情形则要复杂些。此时,P1中所有点和P2中所有点构成的点对均为最接近点对的候选者。在最坏的情况下有n2/4对这样的候选者。考虑P1中任
9、意一点p,它若与P2中的点q构成最接近点对的候选者,则必有distance(p,q) d。满足这个条件的P2中的点有多少个呢?容易看出这样的点一定落在一个d*2d的矩形R中,如图2-2-2所示。图2-2-2 包含点q的d*2d矩形R由d的意义可知,P2中任何两个S中的点的距离都不小于d。由此可以推出矩形R中最多只有6个S中的点。下面我们来证明这个结论 。我们可以将矩形R的长为2d的边3等分,将它的长为d的边2等分,由此导出6个(d/2)*(2d/3)的矩形。如图2-2-3(a) 所示。 如图2-2-3 矩形R中点的稀疏性 若矩形R中有多于6个S中的点,则由鸽舍原理易知至少有一个(d/2)*(2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 递归 最接近 问题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内