正如您所看到的,我对所有这些运行时分析仍然很新,并希望确保我正在计算的每一步都是正确的.. 另外我讨厌用伪代码形式写,所以我用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
问题是方差的总运行时间是多少?你能告诉我们所有的工作吗?
答案 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)