博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最近点对问题
阅读量:4512 次
发布时间:2019-06-08

本文共 632 字,大约阅读时间需要 2 分钟。

     最近点对问题定义:已知上m个点的集合,找出对接近的一对点。
     在二维空间里,可用分治法求解最近点对问题。预处理:分别根据点的x轴和y轴坐标进行排序,得到X和Y,很显然此时X和Y中的点就是S中的点。
情况(1):点数小于等于三时:

                                

情况(2):点数大于三时:
     首先划分集合S为SL和SR,使得SL中的每一个点位于SR中每一个点的左边,并且SL和SR中点数相同。分别在SL和SR中解决最近点对问题,得到DL和DR,分别表示SL和SR中的最近点对的距离。令d=min(DL,DR)。如果S中的最近点对(P1,P2)。P1、P2两点一个在SL和一个在SR中,那么P1和P2一定在以L为中心的间隙内,以L-d和L+d为界,如下图所示:

                       

     如果在SL中的点P和在SR中的点Q成为最近点对,那么P和Q的距离必定小于d。因此对间隙中的每一个点,在合并步骤中,只需要检验yp+d和yp-d内的点即可。
步骤1:根据点的y值和x值对S中的点排序。
步骤2:找出中线L将S划分为SL和SR
步骤3:将步骤2递归的应用解决SL和SR的最近点对问题,并令d=min(dL,dR)。
步骤4:将L-d~L+d内的点以y值排序,对于每一个点(x1,y1)找出y值在y1-d~y1+d内的所有点,计算距离为d'。                 如果d'小于d,令d=d',最后的d值就是答案。

转载于:https://www.cnblogs.com/AdaByron/archive/2011/10/07/2200966.html

你可能感兴趣的文章
org.apache.catalina.LifecycleException异常的处理
查看>>
C++转向C#的疑惑:难道C#中没有拷贝构造函数 ?[转]
查看>>
计算一个整数二进制中1的个数
查看>>
netdom join 错误:指定的域不存在,或无法联系。
查看>>
Android中Dialog的使用
查看>>
12/10/2015 校内测试:数列
查看>>
Android Activity接收Service发送的广播
查看>>
[Leetcode] Spiral Matrix | 把一个2D matrix用螺旋方式打印
查看>>
加速和监控国际网络
查看>>
亲历亚马逊、华为机器学习面试,原来考官想听到这些回答[转]
查看>>
【Flex】读取本地XML,然后XML数据转成JSON数据
查看>>
RecyclerView使用StaggeredGridLayoutManager布局的粘性头部实现
查看>>
Android 优雅的让Fragment监听返回键
查看>>
Android 数据库框架总结,总有一个适合你!
查看>>
Android 设置 横屏 竖屏
查看>>
Spring MVC兑现QQ第三方登录
查看>>
R类型5 R语言 数据帧
查看>>
百度云推送教程
查看>>
简单几步轻松实现在微信中直接下载APK
查看>>
python基础(六)
查看>>