我正在寻找一种算法来检索 3 个中最接近的两个。我没有任何变量可以接近,只有这三个。例如,如果我有 31、52 和 84,我希望函数返回 31 和 52。
我尝试了一些数组排序的方法,但事实上这三个数字是变量(X、Y 和 Z)。当我对 [X, Y, Z] 数组进行排序时,我失去了 vars 的顺序。
我确信有一个非常简单的解决方案,我现在感觉很傻......这实际上是一个 MAXScript 项目,所以我想避免使用特定的语言功能,但任何类型的信息都会非常感激。
我正在寻找一种算法来检索 3 个中最接近的两个。我没有任何变量可以接近,只有这三个。例如,如果我有 31、52 和 84,我希望函数返回 31 和 52。
我尝试了一些数组排序的方法,但事实上这三个数字是变量(X、Y 和 Z)。当我对 [X, Y, Z] 数组进行排序时,我失去了 vars 的顺序。
我确信有一个非常简单的解决方案,我现在感觉很傻......这实际上是一个 MAXScript 项目,所以我想避免使用特定的语言功能,但任何类型的信息都会非常感激。
呼叫三个数字 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 进行排序。对于首先排序的条目,输出其后两个数字。
对于仅 3 个变量,您需要比较它们之间的距离并选择最接近的两个(请参阅大卫的回答)。对于n
变量,您可以执行以下操作:
O(n log n)
)O(n)
)