0

这两者的时间空间复杂度有什么不同吗?

for (int i=0; i<= 100; i++) {
    System.out.println("hi");
}

for (int i=100; i>= 0; i--) {
    System.out.println("hi");
}

如果循环更大更复杂怎么办?比如什么时候i <= 1000000

4

6 回答 6

3

不,两者在空间或时间复杂度上没有区别。

我很想知道你为什么认为可能存在。

PS当然,如果实际代码不同,那么答案也可能不同。

于 2013-09-06T09:50:05.770 回答
0

只要您不使用某些逻辑(取决于索引变量)跳出循环,空间/复杂性就应该没有区别。

如果您需要迭代索引的每个值,则反向顺序与向前顺序完全相同。

于 2013-09-06T09:52:34.947 回答
0

对于这个特定的例子不是。对于较大的阵列,在某些系统上可能会更慢。

通常系统会针对顺序访问内存进行优化。只要内存访问模式是可预测的,两个循环都具有相同的效率,但在较旧的机器或不同的架构上,情况可能会有所不同。

因为空间复杂度不是(我错过了这个问题)

于 2013-09-06T09:52:37.943 回答
0

对于这些简单的循环?不,您只是在使用一个常量字符串、一些System.out.println()' 开销和一个迭代的原语。

但是,对于更复杂的嵌套循环,可能会有所不同,尤其是当循环嵌套时,内部循环长度会发生变化。

于 2013-09-06T09:50:03.643 回答
0

没有两者具有相同的时间空间复杂度。

于 2013-09-06T09:50:19.757 回答
0

因此,时间复杂度没有差异,即 O(N)。

决定采用哪种方法取决于您的设计。例如,如果我必须找到给定数字的最大素数,我可能会使用第二种方法。所以基本上它是(你的预期项目的)设计特定的。

于 2013-09-06T09:50:38.017 回答