我正在尝试解决有关计算复杂性的以下问题:
计算以下算法的计算复杂度 记下Big O,Big Omega和Theta的复杂性
for i=1 to m { x(i) =0; for j=1 to n { x(i) = x(i) + A(i,j) * b(j) } }
其中A是mxn,b是nx1。
我结束了Big O O(mn^2)
大Omega(1)
和Theta(mn^2)
。
答案 0 :(得分:1)
回想f = Theta(g)
当且仅当f=O(g)
和f=Omega(g)
。
矩阵向量乘积可以在Theta(mn)
时间内计算(假设天真实现)和O(m)
中的向量之和,因此总运行时间为Theta(mn)
。从这里开始,时间也是O(mn)
和Omega(mn)
。
答案 1 :(得分:1)
假设以下语句以恒定时间运行:
x(i) = x(i) + A(i,j) * b(j)
因此在 O(1)中完成,并且不依赖于i
和j
的值。由于您在内部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)中时间复杂度的上限很紧。
由于没有条件语句,也没有递归和数据结构 A , b 和 x 不会改变执行该程序,算法也是 big Omega(mn)和 big Theta(mn)。
当然你可以高估大哦和低估大欧米茄:对于每个算法,你可以说它是Ω(1)而对于某些人来说它是 O(2) n ),但重点是你不会买那么多。