【发布时间】:2012-06-17 10:08:04
【问题描述】:
问题
如何求算法的时间复杂度?
在 SO 上发布问题之前我做了什么?
但我无法找到关于如何计算时间复杂度的清晰直接的解释。
我知道什么?
说一个像下面这样简单的代码:
char h = 'y'; // This will be executed 1 time
int abc = 0; // This will be executed 1 time
说一个像下面这样的循环:
for (int i = 0; i < N; i++) {
Console.Write('Hello World !');
}
int i=0; 这只会执行一次。
时间实际上是计算到i=0而不是声明。
i 这将被执行 N+1 次
i++ ; 这将被执行 N 次
所以这个循环需要的操作数是
{1+(N+1)+N} = 2N+2
注意:这仍然可能是错误的,因为我对计算时间复杂度的理解没有信心
我想知道什么?
好的,所以这些小的基本计算我想我知道,但在大多数情况下,我已经看到时间复杂度为
O(N), O(n2), O(log n), O(n!)....还有很多other,
谁能帮我理解如何计算算法的时间复杂度?我相信有很多像我这样的新手想知道这个。
【问题讨论】:
-
对那些感兴趣的人的奖励:Big O 备忘单bigocheatsheet.com
-
查看此博客:mohalgorithmsorbit.blogspot.com。它涵盖了递归和(尤其是)迭代算法。
-
为什么是 Console.Write('Hello World !');不是机器指令?
-
@Chetan 如果你的意思是在计算复杂度时应该考虑
Console.Write,那是真的,但在这种情况下也有点不相关,因为这只改变了一个常量因子,big-O 忽略了 (查看答案),所以最终结果仍然是 O(N) 的复杂度。
标签: algorithm time-complexity complexity-theory