0

我正在寻找一种算法来检索 3 个中最接近的两个。我没有任何变量可以接近,只有这三个。例如,如果我有 31、52 ​​和 84,我希望函数返回 31 和 52。

我尝试了一些数组排序的方法,但事实上这三个数字是变量(X、Y 和 Z)。当我对 [X, Y, Z] 数组进行排序时,我失去了 vars 的顺序。

我确信有一个非常简单的解决方案,我现在感觉很傻......这实际上是一个 MAXScript 项目,所以我想避免使用特定的语言功能,但任何类型的信息都会非常感激。

4

2 回答 2

4

呼叫三个数字 A、B 和 C。

计算三个变量:

AB = (A - B)^2
BC = (B - C)^2
CA = (C - A)^2

然后比较 AB、BC 和 CA。如果AB最小,输出A和B。如果BC最小,输出B和C。如果CA最小,输出C和A。

如果你想让它更优雅一点,请创建一个由三个数字组成的结构,并创建三个这样的结构,如下所示:

S1 = (A-B)^2, A, B
S2 = (B-C)^2, B, C
S3 = (C-A)^2, C, A

然后根据第一个数字对 S1,S2,S3 进行排序。对于首先排序的条目,输出其后两个数字。

于 2012-05-02T11:24:33.817 回答
3

对于仅 3 个变量,您需要比较它们之间的距离并选择最接近的两个(请参阅大卫的回答)。对于n变量,您可以执行以下操作:

  1. 对值进行排序 ( O(n log n))
  2. 遍历排序列表并找到相邻变量之间的最小差异 ( O(n))
  3. 结果是具有最小差异的变量对
于 2012-05-02T11:36:42.587 回答