分治法--最接近点对问题

本文介绍使用分治法解决二维平面上寻找距离最近点对的问题,通过中位线划分点集并递归求解左右两侧的最近点对,最终在限定区域内找到跨线最近点对,实现算法复杂度降低至O(nlogn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

空间二维平面上n个点,找到其中距离最近的一对点

分治法思想:用中位线将二维平面尽可能的等分为两个点集,点集最好有一样的点数目

然后将问题分解为:从左边点集找最小min1,右边点集最小min2,然后再找两边的相互的最小

假如直接这样解相互的算法复杂度仍然是O(n2),跟穷尽法一样,得找到相互得规律,然后减少算法复杂度

如果存在相互中是最小的点,那么必定有dist<min(min1,min2)=alpha,这只是在一个小区间内成立的,仔细的研究这个区间,发现,区间大小在中位线左右alpha,上下alpha内,而这个区间最多会有6个点,也就是说每个点最多比对6个点就可以得到结果,这样最后的算法复杂度可以降到O(nlogn)

分治法可以用做一个解决问题的思路,比如赛程安排,也可以作为一种提高效率的方法,但是假如要提高效率,对于其中的步骤必须有好的解法才行,比如这个算法中的点的分析,还有比如矩阵strassen乘法的一次减少

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值