gpt4 book ai didi

java - 将最可能的真实条件放在 if、else-if 或 else 中有什么不同

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:13 25 4
gpt4 key购买 nike

将最可能的条件放在if、else-if或else条件中有什么区别吗

例如:

int[] a = {2,4,6,9,10,0,30,0,31,66}
int firstCase = 0, secondCase = 0, thirdCase = 0;
for( int i=0;i<10;i++ ){
int m = a[i] % 5;
if(m < 3) {
firstCase++;
} else if(m == 3) {
secondCase++;
} else {
thirdCase++;
}
}

执行时间与输入有什么区别

int[] a = {3,6,8,7,0,0,0,0,0,0}

最佳答案

Is there is any different to put most possible true condition in if, else-if or else condition

实际上,Java 的答案是“视情况而定”。

您会看到,当您运行 Java 代码时,JVM 会在收集统计信息时使用解释器启动。可以记录的统计数据之一是最常采用分支指令中的哪条路径。这些统计信息可以然后被 JIT 编译器用来影响代码重新排序,而这不会改变编译代码的语义。

因此,如果您要使用两个不同的数据集(即“大部分为零”和“大部分非零”)执行代码,JIT 编译器可能会以不同方式编译代码。

它是否真的可以进行这种优化取决于它是否可以确定重新排序是有效的。例如,它是否可以推断出被测试的条件是互斥的?


那么这对复杂性有何影响?好吧……假设 JIT 编译器没有做任何“聪明”的事情,让我们为您的简化示例求和。并假设我们不只是处理长度为 10 的数组(这使得复杂性的讨论变得毫无意义)。

考虑一下:

  • 对于每个零,循环执行一次测试和一次递增 - 比如说 2 次操作。

  • 对于每个非零元素,循环执行两次测试和一次递增 - 比如 3 次操作。

因此,当全零时 N 个元素大约需要 2*N 次操作,而全非零时则需要 3*N 次操作。但两者都是 O(N) ... 所以大 O 复杂度不受影响。

(好吧,我遗漏了一些东西......但你明白了。其中一种情况会更快,但复杂性不受影响。)

关于java - 将最可能的真实条件放在 if、else-if 或 else 中有什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com