如果你测量点 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 倍的测量值。