最近点问题(分治算法)

一、问题描述

对于平面上的一些点对:p1, p2, …,pn, 找出两个点,使得这两个点之间的距离最小;
解题思路:

  1. 首先对所有的点按照x坐标排序, 然后按x坐标在pivot处将点集二分为坐标点集S1和右边点集S2;
  2. 先递归求得左边点集的最小距离min_left, 然后递归求得右边点集的最小距离min_right; 比较左右点集的最小距离min = min(min_left, min_right);
  3. 此外, 靠近pivot左右min的区域(pivot-min, pivot+min)的区域,存在点对距离小于min,并且一个点在pivot左侧, 一个点在pivot右侧;
    在这里插入图片描述

二、优化第三步骤

对于第三步骤中, 求解(pivot-min, pivot+min)区域中的点对, 假设其中有N个点,暴力法计算点对时间是O(n^2), 不可取;
计算区域[pivot-min, pivot+min] 的点对距离可以采用下面优化:
1) 由于点对点两个点一个在左边S_left = [pivot-min, pivot],一个在右边S_right = [pivo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值