如何解决为什么这个问题的大O时间复杂度是C?
The screenshot of the question
我的计算是:
statement | time
------------------------|--------
var value = 0; | 1
for(var i=0;i<n;i++) | 1 + (n+1) + n
for(var j=0;j<i;j++); | n + n*(n(n+1)/2 +1) + n* n(n+1)/2
value += 1; | n*(n(n+1)/2
解决方法
让我们开始计算最初的几次迭代计数。
i (counter) j (# of iterations for each value of i)
0th 0
1st 1
2nd 2
. .
. .
(n-1)th n-1
现在,前N个整数的总和定义为n(n+1)/2
,其中范围从1
到n
。更多详细信息here。
在我们的情况下,范围从0
开始,一直到n-1
(上表中的RHS)。在求和公式中将n
替换为n-1
,将得到n(n-1)/2
。
Big O的复杂度为O(n * n),所以n平方。
操作数为n(n-1)/ 2。
Big O复杂度忽略常量和低阶项。
,该问题的措词很差,因此没有确切的答案。确实,作者没有说哪个操作“很重要”。例如,当i = 0时,内部循环执行一次(至少初始化和测试),而主体不执行。
现在,如果我们仅计算值的增量数,则最内部的循环恰好执行其中的i个,而外部循环使i从0变为n-1。因此,总共有Tn-1 = n(n-1)/ 2(三角数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。