如何计算使用max函数的算法中的操作数?

时间:2014-09-08 06:15:17

标签: algorithm complexity-theory operation

我必须获取以下伪代码的操作计数:

x(1) = b(1) / L(1,1);
for j = 2 : n
    sum = 0;
    for k = (j-1) : max(1,j-m)
        sum = sum + L(j,k) * x(k);
    end
    x(j) = ( b(j) - sum ) / L(j,j);
end

我得到以下结果:
总操作数= 1 +((j + 2) - max(1,j-m))*(n-1)

处理此问题的常见惯例是什么?

1 个答案:

答案 0 :(得分:0)

内循环中的迭代次数:

j=2   -> 1 (k=1 to 1)
j=3   -> 2 (k=2 to 1)
...
j=m   -> m-1 (k=m-1 to 1)
j=m+1 -> m (k=m to 1)
j=m+2 -> m (k=m+1 to 2)
...
j=n   -> m (k=n-1 to n-m)

因此,您总体上有1+2+...+(m-1)+(n-m)*m个内循环。

在每个内循环中,您正在进行2次操作。而且,你在外循环中做了两个操作。

最后,操作总数为:

  2*(1+2+...+(m-1)+(n-m)*m) + 2*(n-1)
= (m-1)*m + 2*(n-m)*m + 2*(n-1)
= m*(2*n-m-1)+2*(n-1)
= O(m(2n-m) + n)

如果您正在寻找一个更简单的表达式,您可以使用O(mn),但它不太精确(您的算法确实比这更好)。