方差的渐近运行时间是多少?

时间:2013-06-29 14:12:37

标签: algorithm big-o asymptotic-complexity

正如您所看到的,我对所有这些运行时分析仍然很新,并希望确保我正在计算的每一步都是正确的.. 另外我讨厌用伪代码形式写,所以我用Python做了这个......这里就是

def mean(n):
    sum = 0               #cost = 1
    for i in n:           #cost = n
        sum += i          #cost = n
    return sum/len(n)     #cost = 1

因此,平均值的整体运行时间(如果错误则纠正我)= O(1)+ O(n)+ O(n)+ O(1)= O(n)

def variance(n):
    var = 0                    #cost = 1
    for i in n:                #cost = n
        var += (i-mean(n))**2  #cost = n*n or n+n ??
    return var / len(n)        #cost = 1

问题是方差的总运行时间是多少?你能告诉我们所有的工作吗?

1 个答案:

答案 0 :(得分:1)

O(N ^ 2),因为你正在进行N次O(N)操作。

通常,循环在确定运行时时是乘法的;你的方差循环是“for i in lg(n)”那么你的运行时间就是O(N * lg(N)),因为你要执行O(N)运算lg(N)次;同样你的内部操作是O(2 ^ N),外部循环为“for i in n”,那么你的运行时将是O(N * 2 ^ N)

另一种常见的循环格式是

for(int i = 0; i < N; i++) {
    for(int j = i; j < N; j++) {
        // O(1) operation
    }
}

这仍然是O(N ^ 2),但分析有点棘手:你需要取arithmetic series“1 + 2 + 3 + ... + n-1 + n的总和“这是n *(n - 1)/ 2,或O(N ^ 2)