我开始学习复杂性分析,我无法弄清楚这部分算法的整体Big-O复杂性,应该如何计算?
Code Fragment Time Complexity
1 - C = 0 O(1)
2 - while C <= L O(L)
3 - f(C += 1) O(???)
第3步实际上需要更多步骤,但可以概括为执行C步骤的函数f。
我的问题是每次迭代都会增加C,所以任何帮助或方向都会受到赞赏。
答案 0 :(得分:1)
如果f(C)
步数增加C
步,C
每次迭代增加L
,则算法为O(L^2)
。
答案 1 :(得分:1)
让我们在那里插入一些数字,看看会发生什么。
假设“零步”是恒定时间并将其更改为1.所以有两种方法可以回答这个问题:
1 + L * (L + 1) / 2
,所以它是O(L 2 ); 答案 2 :(得分:0)
如果函数f() DOESN&#39; T 改变C ...则显示的三条线的总体复杂度为O(N):时间将随着大小而线性增加L - C
增长。第1行和第3行都没有贡献:它们基本上都是&#34;常数&#34;。
如果函数f() DOES 改变C(例如使用全局变量),则第2行和第3行都有贡献,而cjungel&#39; s和giusti的答案是正确的{ {1}}。
这是一篇很棒的文章:
https://justin.abrah.ms/computer-science/how-to-calculate-big-o.html