在3中检索2个最接近的数字

时间:2012-05-02 11:21:05

标签: sorting language-agnostic numbers

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

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

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

2 个答案:

答案 0 :(得分: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进行排序。对于首先排序的条目,输出其后两个数字。

答案 1 :(得分:3)

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

  1. 对值(O(n log n)
  2. 进行排序
  3. 浏览排序列表,找出相邻变量(O(n)
  4. 之间的最小差异
  5. 结果是具有最小差异的变量对