【发布时间】:2017-09-11 20:58:14
【问题描述】:
我的问题是如何计算此操作的 O 表示法,其中两个外部循环将执行 O(n^3) 次。我的问题是,当在条件中使用模数并且内部 for 循环仅在 i 是 j 中的一个因素时运行时,o 表示法将是什么。
for(int i = 1 ; i <= n ; i++) {
for(int j =1; j <= i ∗ i ; j++) {
if(j % i == 0 ) {
for(int k = 0 ; k < j ; k++ ){
sum++;
}
}
}
}
【问题讨论】:
-
仍然会被计算为 O(n^3)。
-
为什么不将中间循环定义为
for(int j = i; j <= i * i; j += i) {?看起来不那么可怕并且更容易编译。 -
或者只是让 j 的范围从 1 到 i,然后在需要值时乘以
i... -
考虑到内部循环是 O(n^2),我实际上希望它是 O(n^4)。
-
@Turing85:但你不能忽视这样一个事实,即 if 条件在每次迭代中都不为真。对于每个外部循环,这是真的 i 次。它测试了 O(n^3) 次(我假设每次检查的时间都是恒定的,所以如果整体结果比 O(n^3) 差,这无关紧要),但只通过 O(n^2) 次,所以内部循环只执行 O(n^2) 次,但本身是 O(n^2),导致整体 O(n^4)。至少,我是这么认为的……