以下程序的时间复杂度是多少?
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?正确的吗?
答案 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)
完全可以理解,无需调用log
或exp
。
答案 1 :(得分:0)
首先,对于5个输入,循环运行5次,因此它具有O(n)的时间复杂度。我在这里假设i中的值是sum的输入。 其次,你不能只用日志术语来定义时间复杂度,它应该总是用BIG O表示法。例如,如果执行二进制搜索,那么该算法的最坏情况时间复杂度为O(log n),因为当输入数组为8时,您将得到3次迭代的结果。
复杂性= log2(基数)8 = 3
现在这里你的comlexity在日志中。