CodeVS2319 最近最远点对

http://codevs.cn/problem/2319/

题意:给定笛卡尔平面内的若干个点,求最近两点的距离和最远两点的距离,距离是欧氏距离,点数不大于100,000。

对于最近点对考虑分治的做法:用一条直线将所有点分成两部分,对于两部分的点进行分治,然后考虑两部分联合的结果。

可以先把所有点按纵坐标排序,这样就容易用平行于x轴的直线划分。设两边分别求出的结果的较小值是d,我们只需考虑直线两侧离直线距离d以内的所有点即可。

考虑枚举直线某一侧的所有点,对于每个点,在直线另一侧到该点距离小于d的点,是有常数性的限度的。

假设这个点离直线非常非常近,或者就在直线上,以该点为圆心,d为半径所作出的圆在直线另一侧的部分是一个劣弓形,或者半圆。

直线另一侧的一个点若要到该点的距离小于d,则必须落在这个弓形或半圆以内。一个小小的半圆里面能有多少个点呢?注意到在这些点中,所有点对的距离不小于d!

最多只有5个点。事实上,具体算法实现非常简单。对前一半点和后一半点进行分治,然后两重循环枚举前一半点和后一半中的前五个点,计算距离并更新即可。

对于最远点对,显然答案中的两个点一定在整个点集的凸包上,凸包可以用Graham算法来求出。然后旋转卡壳即可。

关于旋转卡壳,我们这里要找的就是在凸包上,与每个点距离最远的另一个点,设凸包上的若干个点依次是p[]号点,离p[i]号点最远的点是f[i]号点。

则对于顺时针依次的p[i]和p[i+1],其答案f[i]和f[i+1]也一定按顺时针排列,这是比较显然的,于是可以用单调队列来求出f[],选出最远的一对即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最远采样算法(PCL)是一种在三维空间中对云数据进行采样的算法。云是由大量离散组成的三维数据集,可用于表示物体的形状、结构和特征等信息。 最远采样算法的目标是从云数据中选择一组具有最大平均距离的离散集合。这样的采样结果能够更好地表示原始云数据的几何特征,可以用于云数据的降采样、特征提取等应用。 算法的实现步骤如下: 1. 随机选择一个初始作为起始采样; 2. 计算其他所有与已选取的采样之间的距离,并选择距离最远作为下一个采样; 3. 重复步骤2,直到选取足够数量的采样,或者达到预定的采样密度。 该算法的优是能够保留云数据的重要几何特征,尤其适用于包含明显结构的云数据。通过最远采样,可以有效地减少云数据的规模,提高后续处理的效率。 然而,最远采样算法也存在一些限制。例如,在云数据中存在噪音或稀疏区域时,算法可能无法准确地选择代表性的采样。此外,算法的性能受云数据的分布、密度和采样数量等因素的影响。 总之,最远采样算法是一种常用的云数据采样方法,通过选择具有最大平均距离的,能够保留云数据的几何特征。它在云处理和分析中具有广泛应用,可用于降采样、特征提取、配准等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值