2我开发了一种算法,我试图以最详细的方式记录其时间复杂度,并且我遇到了问题。
算法看起来像这样:
for i=0:n {
task 1;
task 2;
for j=0:i {
task 3;
}
task 4;
}
所以我通过说任务1的复杂度为O(t1)来记录我的复杂性,...... 但是,当我试图解释任务3时,我会被卡住,因为它基本上会执行i次,我计划说算法的复杂性是任务1 +任务2 + i *任务3的复杂性的n倍+任务4.因为我将依赖于我,我真的不知道最好的方式来呈现这些东西。
据我所知,如果任务1,2和4不存在,复杂性将为O(n ^ 2)。但我不知道如何通过与我之前的解释相一致来表达这一点。
我希望这是有道理的,谢谢你的帮助。
答案 0 :(得分:3)
最简单的方法可能是单独计算它们。
执行任务3:1+2+3+...+n
= n(n+1)/2
次。
任务1,2和4分别执行n
次。
所以(假设每个任务都需要O(1)
),我们有一个复杂的
O(n(n+1)/2 + 3n) = O(n²/2 + n/2 + 3n) = O(n²)
(在大O表示法中可以忽略常数因子和渐近较小的项)。
更一般地说(如果每个任务不一定需要O(1)
),我们可以说复杂性是:
O(t3*n² + n*(t1 + t2 + t4))
ti
表示任务i
需要多长时间。