在一个循环里进行多个操作,和在多个循环里进行一个操作,在时间复杂度上,有区别吗?

2019-08-20 08:10:01 +08:00
 OpenSSH

如果是在同一个循环里,复杂度是 O(n)

但是如果分开多个循环,复杂度是不是还是 O(n)?

int a = 1000;
while(a > 0) {
    // 操作 1
    // 操作 2
    // 操作 3
    a--;
}

如果把这 3 个操作,分别写在 3 个循环里,在时间复杂度上,是一样的吧?

3163 次点击
所在节点    问与答
27 条回复
Aruforce
2019-08-20 11:09:01 +08:00
@Aruforce #20 算法时间复杂度表示 O(n )和 O(3N) ;实际上的时间差异 才考虑 a--的性能
mcfog
2019-08-20 11:14:39 +08:00
@Aruforce 实际情况有很多的 locality 和 cache 的因素要考虑
比如说操作 123 分别是磁带机上三个不同文件的读写操作,拆三个循环就都是顺序读写,合在一起反而多了大量倒带的耗时,对比内存里的 a--完全不是一个量级的耗时
reus
2019-08-20 11:23:21 +08:00
都是 O(n),不看常数项的
lumotian
2019-08-20 12:38:25 +08:00
考虑访问的局部性原理
OpenSSH
2019-08-20 14:55:53 +08:00
感谢各位的回复,又学到不少新知识了。
guaohann
2019-08-20 19:18:44 +08:00
我记得以前看的 csapp 里有类似例子,切换会有开销,一个循环里进行多个操作的速度更快。
mogami95
2019-08-20 23:03:58 +08:00
@mcfog 老哥说的一针见血!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX