复杂性理论 – 如何找到算法的时间复杂性

问题

如何找到算法的时间复杂性?

我在发布一个问题之前我做了什么?

我已经经历了thisthisthis和许多其他链接

但没有在哪里可以找到一个明确和直接的解释如何计算时间复杂性。

我知道什么 ?

说一个简单的代码如下:

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;这将执行N 1次

一世 ;这将执行N次

所以这个循环所需的操作数是

{1(N 1)N} = 2N 2

注意:这仍然可能是错误的,因为我不信任我对计算时间复杂性的理解

我想知道什么?

好吧,所以这些小的基本计算我想我知道,但在大多数情况下,我已经看到时间复杂性

O(N),O(n2),O(log n),O(n!)….和许多other

任何人都可以帮助我理解如何计算算法的时间复杂性?我相信有很多新手像我想知道这一点。

最佳答案

How to find time complexity of an algorithm

你将它执行的机器指令加起来作为其输入大小的函数,然后将表达式简化为最大(当N是非常大时)项,并且可以包括任何简化的常数因子。

例如,让我们看看我们如何简化2N 2个机器指令来描述这只是O(N)。

为什么我们删除两个2?

我们对算法的性能感兴趣,因为N变大。

考虑两个项2N和2。

当N变大时,这两个项的相对影响是什么?假设N是百万。

然后第一项是200万,第二项只有2。

出于这个原因,我们删除除了大N的最大项。

所以,现在我们已经从2N 2到2N。

传统上,我们只对恒定因素的性能感兴趣。

这意味着,当N很大时,我们并不关心性能上是否存在一定的倍数。 2N的单位不是很好地定义在第一位。所以我们可以乘以或除以一个常数因子得到最简单的表达式。

所以2N变成刚刚N.

斯坦福大学(地球上最好的CS学校之一)刚刚开始一个免费的在线课程分析算法,我建议如果你有兴趣,你加入这个课程:

https://www.coursera.org/course/algo

注册仍然开放几天。

转载注明原文:复杂性理论 – 如何找到算法的时间复杂性 - 代码日志