Big Oh、Big Omega 和 Theta 算法的计算复杂度

Computational Complexity of Algorithm in Big Oh, Big Omega and Theta

我正在尝试解决以下有关计算复杂性的问题:

Compute the computational complexity of the following algorithm and write down its complexity in Big O, Big Omega and Theta

for i=1 to m {
   x(i) =0;
   for j=1 to n {
      x(i) = x(i) + A(i,j) * b(j)
   }
}

where A is mxn and b is nx1.

我得到了大 O O(mn^2)Omega(1)Theta(mn^2).

回想一下 f = Theta(g) 当且仅当 f=O(g)f=Omega(g)

矩阵向量乘积可以在 Theta(mn) 时间内计算(假设是简单的实现),向量的和在 O(m) 内计算,所以总 运行 时间是 Theta(mn).从这里可以看出时间也是 O(mn)Omega(mn).

假设下面的语句在常数时间内运行:

    x(i) = x(i) + A(i,j) * b(j)

这是在 O(1) 中完成的,并且不依赖于 ij 的值。由于您在内部 for 循环中迭代此语句,恰好 n 次,因此您可以说以下代码在 O(n) 中运行:

x(i) =0;
for j=1 to n {
    meth1
}

(假设赋值也是在恒定时间内完成的)。同样,它不依赖于 i 的确切值。最后我们考虑外循环:

for i=1 to m {
   meth2
}

方法 meth2 被精确重复 m 次,因此时间复杂度的严格上限为 O(n·m).

由于没有条件语句,也没有递归和数据结构Abx 不改变程序的执行,算法也是big Omega(m n)big Theta(m n)

当然你可以高估 big oh 而低估 big omega:对于每个算法你都可以说它是 Ω(1) 而对于某些算法它是 O(2n),但关键是你买的东西不多。