用分治法求解三维空间中的最近点对

这篇博客介绍了一种用分治策略求解三维空间中点集P的最近点对的方法。首先按照y值划分点集为pL和pR,然后分别对这两个集合递归求解最近点对。在合并阶段,通过构建一个数组middleP和middleArrayY,只检查每个点后面15个点以确定最近点对,最终找到全局最近点对。算法保证了在每个步骤中,最近点对的距离不会超过之前找到的最小距离。
摘要由CSDN通过智能技术生成

题目如下:

用分治法求解下面的问题

 

输入:

P=(p(1),p(2),…,p(n))为三维空间中n个不同的点,即

P(i)=(x(i), y(i), z(i)) ,1≤i  ≤n

输出:

距离最近的两点。


 

所有的过程与寻找二维空间中的最近点对类似(见算法导论第二版591页),只是在找Y内的最短距离时,需要考虑的紧随其后的点的数目不同。

(1)Divide:我们按照y值的大小来分割三维空间。平面y=middleY代表将点集P分割的中间曲面,得到两个集合pL和pR;

(2)Conquer:分别对pL和pR集合求最近点对,和最近的距离,lMinDistance和rMinDistance,然后将当前的最近距离设置为lMinDistance和rMinDistance的最小值currentMinDistance=min{lMinDistance,rMinDistance};

(3)Merge:建立一个数组middleP和middleArrayY,分别代表平面y=middleY两侧y值的距离不超过currentMinDistance的范围内所有的点和所有的y值的集合。我们在middleP中找最近的点对。可以证明,对于middleP中的每一个点,仅需要检查紧随其后的15个点即可。

证明:我们可以在平面y=middleY的两侧做两个边长为currentMinDistance的正方体,分别记为L1和R1。假定在某一级递归调用中,最近的点对des1属于pL,des2属于pR,则des1和des2的距离Distance(des1,des2)一定严格小于min{lMinDistance,rMinDistance}。点des1必在平面y=middleY上,或者在平面的左侧;点des2必在平面y=middleY上,或者在平面的右侧。由此可知,des1和des2在以y=middleY为中心,两个在平面上投影重合的正方体L1和R1围城的区域θ内。

下面证明,至多有16个点位于θ内。因为L1中的所有点之间的距离至少为currentMinD

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值