【问题标题】:Biggest diameter of a set with a distance function具有距离函数的集合的最大直径
【发布时间】:2016-03-10 17:39:13
【问题描述】:

我有一组元素之间的距离函数满足三角不等式。

我想找到相隔最大距离的元素对。

有没有比尝试所有配对更好的已知解决方案?

【问题讨论】:

  • 可以订购您的元素吗?
  • 这听起来像是“最近点对问题”的变体,如果元素是二维空间中的点并且您可以访问各个点的坐标。
  • 我注意到,如果有 N 个维度,您需要与 N 个已知点的距离来确定空间中的位置,所以如果您知道 N+1 个点中的 N 个在哪里,并且您只知道 N-1 个到第 N+1 个点的距离,您无法计算第 N 个距离。所以我会惊讶地发现一个算法在 N 维的 N+1 个点上最接近的点对没有计算所有对之间的距离。
  • @mcdowella 你不需要知道点的位置;事实上,你甚至不需要知道空间有多少维。您只需要知道一对点之间的距离小于另一对点之间的距离,即可取消第一对点之间相距最远的资格。如果您测量一些对之间的距离,并使用三角不等式推断其余对之间的距离小于找到的最大距离,那么您无需测量每一对即可得到答案。
  • @m69 您不需要知道维数,但如果您的点随机分散在 N 维空间中,那么随着 N 变得越来越大,不等式的用处越来越小。考虑长度为 N 的随机位向量。两个这样的向量在平均 N/2 处不同,标准差为 sqrt(3N)/2。因此,对于大 N,几乎所有成对距离都足够接近,相对而言,|ab| 不太可能+ |交流|

标签: algorithm distance theory


【解决方案1】:

如果你测量点 a 到点 b、c 和 d 的距离,你会发现 |ab| + |交流|

一个可能的算法是:
首先测量从点 a 到所有其他点的距离,找到离 a 最远的点 n,然后给出所有对 b,x 其中 |ab|+|ax| 对 b 点做同样的事情,只测量那些尚未设置的距离。检查你是否找到了一个新的最大值,然后再次给出所有对 c,x 其中|bc|+|bx| 继续为点 c、d、... 执行此操作

在最好的情况下,您可以在 N-1 次测量后找到一组 N 个点中的最长距离(如果 |ax| 是距 a 的任何其他距离的两倍)。在最坏的情况下,您需要测量每一对(如果最短距离超过最长距离的一半,或者如果您在通过点的顺序上不走运)。


如果您想将距离测量的数量减少到绝对最小值,并且对于每个未知距离 x,y,您检查每个先前存储的值 |ax|+|ay|、|bx|+|by|、|cx |+|cy| ...查看它是否小于当前最大值并因此可以用作 |xy| 的值,测量次数大大减少。

在方形 2D 空间中的 1000 个随机点上运行此算法,通常需要 499,500 次测量,返回在 2,000 到 10,000 次测量之间的最大距离(或总数的 0.4% 到 2%,平均大约 1 %)。

这并不一定意味着该算法在实践中比测量每个距离要快得多;这取决于测量与避免测量所需的循环、加法和比较的组合相比有多昂贵。


正如@mcdowella 所指出的,随着空间维数的增加,这种方法的效率会降低。点数也有很大的影响。下表显示了相对于总对数的测量次数。这些是在“正方形”空间中随机分布点的测试的平均值(即所有维度的坐标都在同一范围内)。如您所见,此方法最适用于 2D 或 3D 空间中具有许多点的几何问题。但是,如果您的数据在某些方面存在高度偏差,结果可能会有所不同。

10点(45对) 100点(4950对) 1000点(499500对) 昏暗的测量。占总测量值的百分比。占总测量值的百分比。占总数的百分比 1 16.6674 37.04 221.17 4.47 4877.97 0.98 2 22.4645 49.92 346.77 7.01 5346.78 1.07 3 27.5892 61.31 525.73 10.62 7437.16 1.49 4 31.9398 70.98 731.83 14.78 12780.02 2.56 5 35.3313 78.51 989.27 19.99 19457.84 3.90 6 38.1420 84.76 1260.89 25.47 26360.16 5.28 7 40.2296 89.40 1565.80 31.63 33221.32 6.65 8 41.6864 92.64 1859.08 37.56 44073.42 8.82 9 42.7149 94.92 2168.03 43.80 56374.36 11.29 10 43.4463 96.55 2490.69 50.32 73053.06 14.63 20 44.9789 99.95 4617.41 93.28 289978.20 58.05 30 44.9996 99.999 4936.68 99.73 460056.04 92.10 40 4949.79 99.99 496893.10 99.48 50 4949.99 99.9999 499285.80 99.96 60 499499.60 99.9999

正如预期的那样,测试结果在更高维度上变得可预测,异常值之间只有百分之几,而在 2D 中,某些测试用例需要比其他用例多 30 倍的测量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 2010-11-29
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多