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

新手上路,请多包涵

我有一个用 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;
}

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

我想知道是否值得改变我目前使用的东西?

任何速度提高都会有很大帮助

原文由 Chris 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 659
2 个回答

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

如果您的算法有问题,最好的办法是研究宏观优化(“全局”的东西,如算法选择或调整)——通常会在那里获得 更好的 性能改进。

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

原文由 paxdiablo 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于许多实用程序类型的方法,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);
}

原文由 wpgreenway 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题