N个点,求距离最近的两个点---分治策略(1)
创始人
2024-05-11 04:29:20
0

设平面有n个点P_{1},P_{2},...,P_{n},P_{i}的直角坐标是(x_{i},y_{i}),i = 1, 2, ...,n,求距离最近的2个点,距离计算:d(P_{i}, P_{j}) = ((x_i - x_j)^2 + (y_i - y_j)^2)^{1/2}

首先这个问题是可以使用蛮力算法,一共n(n-1)/2个点对,每对点对计算需要常数的时间,蛮力算法需要O(n^2)的时间。

由于点对有二维的空间坐标,直觉上我们可以通过将平面进行划分,如图,用一条垂直线将集合P划分为P_L和左右2部分,两部分点数近似相等,即

|P_L| = \left \lceil \frac{|P|}{2} \right \rceil ,|P_R| =\left \lfloor \frac{|P|}{2} \right \rfloor

P中最临近点有3种情况:都在P_L中,都在P_R中,或者一个点在P_L中,一个在P_R中。算法分别计算这3种情况。对于前两种情况,分别计算P_L中和P_R中的点对,这是2个n/2规模的子问题,对于第三种情况,需要找到由一个P_L和一个P_R中的点所构成的最邻近点对。假设P_LP_R中的最邻近的点对的距离分别是\delta _L\delta _R,令\delta = min\{ \delta _L, \delta_R\},那么对于距离小于\delta的点对只可能出现在第3种情况,为了找到这样的点对,只需要寻找垂直线l两边距l不超过\delta的窄缝内的点即可。

MinDistance(P, X, Y)
input : n个点的集合P,X和Y分别给出P中点的橫、纵坐标
output : 最近的两个点及距离
1.如果P中点数小于等于3, 则直接计算其中的最小距离
2.排序X,Y
3.做垂直线l将P近似划分为大小相等的点集PL和PR,PL的点在l左边,PR的点在l的右边
4.MinDistance(PL, XL, YL); dL = PL中的最小距离
5.MinDistance(PR, XR, YR); dR = PR中的最小距离
6.d <- min(dL, dR)
7.对于在线l左边距离d范围内的每个点,检查l右边是否有点与它的距离小于d,如果存在则将d修改为新值

行4和行5是递归调用,每个对应于n/2规模的子问题,行2的排序需要O(nlogn)时间,行3的划分基于行2的排序,不需要额外的计算。行6需要的时间是常数,所以只需要看行7的计算复杂度。如下图

 设左半部分的任意一点(x_i, y_i),在右边窄缝内距离该点小于d的点,其纵坐标一定在y_i + dy_i-d之间,即右边窄缝里面的点一定位于右边长2d,宽d的框框里面,才有可能和(x_i, y_i)的距离小于d。将这个空间分成6份,每一个小矩形的对角线的长度是5d/6,说明在每一个小矩形内最多只能有1个点,因此,右边和(x_i, y_i)的距离小于d的点最多能有6个。对左边的每个点来说,检查另一边是否有点与它距离小于d,只需要检查常数个点。假设所有距线l不超过d的窄缝中的点构成集合S。只要S中点的纵坐标已经排好序(通过顺序扫描Y,检查每个点的橫坐标看它是否距l小于d。如果是,就把它放到S中。这需要额外O(n)时间,不超过行2的O(nlogn)排序时间),我们可以按照S中点的纵坐标顺序考察,比如说从具有最大纵坐标的点开始,顺序检查每个点。如果这个点的纵坐标是y,那么只需要检查那些纵坐标不小于y-d的点,看看其中是否存在分布在分布在另一侧,且与该点的距离小于d的点。上面已经证明在另一侧相关区域内的点不超过6个,而同侧区域的点也不会超过6个,因此这个检查之多需要考察12个纵坐标(如果高度是d,准确地说是不超过8个),这仅需要常数的时间。由于S的点数不超过n,因而对窄缝中所有点的检查需要O(n)时间。而这个时间也不超过行2的排序时间。于是,除了递归调用外,额外的工作时间是O(nlogn).

基于上面的分析,不难写出该算法时间复杂度的递推方程

\left\{\begin{matrix} T(n) = 2T(n/2) + O(nlogn) & \\ T(n) = 1 & n \leqslant 3 \end{matrix}\right.

根据主定理(Master Theorem)推导和理解(3)_Happy_Traveller的博客-CSDN博客​​​​​​

T(n) = O(nlog^2n)

比起蛮力算法O(n^2),已经有了明显的改进

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...