寻找最近点对算法

该博客介绍了一种使用分治策略寻找二维平面上最近点对的算法,目标是降低时间复杂度从O(n^2)到O(n.log n)。算法包括对点集按x坐标排序,递归处理左右子集,以及处理中间区域的点以找到最短距离。文中还给出了Java代码实现。
摘要由CSDN通过智能技术生成
寻找最近点对算法一般而言需要O(n^2)的时间复杂度,即枚举法,分别计算每两个点对之间的距离,取最小。
但是还有一种分治算法理论上可以将时间复杂度减小到O(n.log n)的级别。但是由于递归的开销,可能效果并不一定好,具体还要看问题特点。

算法描述:
①若问题规模小于3,直接枚举法求解。
②否则,将点集按照x坐标排序,取中间点。
③以中间点的xm坐标为边界,左右分别递归求解,得到左右最短距离
④取左右两边递归结果的最小值a,取出x坐标在xm-a到xm+a之间的点集
⑤对于中间区域的点集,按照y坐标排序
⑥对于每一个点,依次计算y坐标比它大的7个点,计算最小距离。
⑦将中间区域的最小距离与a比较,取最小值返回。

下面是java代码:

/**
* @param pointList
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值