找到3个数字中最小的Java的最有效方法?

2022-08-31 17:28:24

我有一个用Java编写的算法,我想提高效率。我认为可以提高效率的一部分是找到3个数字中的最小值。目前我正在使用如下方法:Math.min

double smallest = Math.min(a, Math.min(b, c));

这有多有效?用 if 语句替换会更有效率吗, 如下所示:

double smallest;
if (a <= b && a <= c) {
    smallest = a;
} else if (b <= c && b <= a) {
    smallest = b;
} else {
    smallest = c;
}

或者,如果任何其他方式更有效

我想知道是否值得更改我当前使用的内容?

任何速度增加都会非常有帮助


答案 1

对于许多实用程序类型的方法,apache共享资源库具有可靠的实现,您可以利用这些实现或从中获得其他见解。在这种情况下,有一种方法可以在org.apache.commons.lang.math.NumberUtils中找到三个双精度中最小的一个。它们的实现实际上与您最初的想法几乎相同:

public static double min(double a, double b, double c) {
    return Math.min(Math.min(a, b), c);
}

答案 2

,这真的不值得改变。在摆弄像这样的微优化时,您将获得的那种改进将不值得。如果函数调用足够多,甚至方法调用成本也会被删除。min

如果你的算法有问题,你最好的选择是研究宏观优化(“大局”的东西,如算法选择或调整) - 你通常会得到更好的性能改进。

您的评论认为删除提供了改进可能是正确的,但这是因为这是一个相对昂贵的操作。 在成本方面甚至不会接近这一点。Math.powMath.min


推荐