什么是以下程序的时间复杂度

时间:2013-10-20 17:55:02

标签: complexity-theory

以下程序的时间复杂度是多少?

sum=0;
for(i=1;i<=5;i++)
 sum=sum+i;

以及如何在日志中定义这种复杂性?如果有人逐步解释复杂性,我将非常感激。此外,如何在O(大o)和登录。

显示

[被修改]

sum=0; //1 time
i=1;   //1 time
i<=5;  //6 times
i++    //5 times
sum=sum+i;//5 times

是时间复杂度18?正确的吗?

2 个答案:

答案 0 :(得分:2)

预赛

时间复杂度通常不以特定整数表示,因此如果没有单位,例如18“doodads”,则“操作X的时间复杂度为18”这一陈述并不清楚。

通常将时间复杂度表示为某些函数/操作的输入大小的函数。

由于硬件差异甚至不同语言之间的常数因素差异,您经常要忽略特定操作所花费的特定时间。例如,在C和Python中,求和仍为O(n)(一般而言)(您仍需要执行n个添加),但两种语言之间的常数因子的差异将导致C更快操作停止的绝对时间条件。

人们通常也认为“Big-Oh” - 例如O(f(n)) - 是算法的“最坏情况”运行时间。有other symbols used来研究更严格的上限和下限。

您的问题

让我们看一下从1到n的求和,而不是从1到5求和。

复杂性为O(n),其中n是您要汇总的元素数量。

每次添加(使用+)都需要一段时间,在这种情况下您需要n次。

但是,您显示的此特定操作可以在O(1)(常量时间)内完成,因为从1到n的数字之和可以是表示为单个算术运算。我会把这些细节留给你解决。

就对数而言:不完全确定你想要的原因,但是这里有:

因为exp(log(n))n,您可以将其表达为O(exp(log(n)))。你为什么想做这个? O(n)完全可以理解,无需调用logexp

答案 1 :(得分:0)

首先,对于5个输入,循环运行5次,因此它具有O(n)的时间复杂度。我在这里假设i中的值是sum的输入。 其次,你不能只用日志术语来定义时间复杂度,它应该总是用BIG O表示法。例如,如果执行二进制搜索,那么该算法的最坏情况时间复杂度为O(log n),因为当输入数组为8时,您将得到3次迭代的结果。

复杂性= log2(基数)8 = 3

现在这里你的comlexity在日志中。