复杂性和运行时间

时间:2013-06-24 12:34:26

标签: complexity-theory time-complexity

我试着环顾四周,看看我的答案是否可以得到解答,但我没有发现可以帮助我的事情。

在处理运行时复杂性时,您是否考虑了操作数?根据我对处理运行时的理解,你有每个不同的操作数可以花费x倍的时间,所以只计算循环给你的下限?如果这不正确,请你向我解释我的逻辑错误。

例如:

            for (i=0;i<n;i++)
               for (j=0;j<n;j++)
                 a[i,j]=b[i,j]+c[i,j]

只是O(n ^ 2)对吗?或者它是O(a * n ^ 2)因为加法操作数?你运行时使用“O”通常是否正确?

例如:

            for (i=0;i<n;i++)
               for (j=0;j<n;j++)
                 a[i,j] -= b[i,j] * c[i,j]

再次是O(n ^ 2)吗?或者它是O(a ^ 2 * n ^ 2),因为减法和乘法操作数??

谢谢Stack!

1 个答案:

答案 0 :(得分:0)

我建议您阅读O符号的含义。但是,让我向您简要介绍一下:

当我们说f(x)=O(g(x))时,我们的意思是对于一些与输入大小无关的常数c,

f(x)<=c.g(x) for all x>=k

换句话说,超过某一点k,曲线f(n)总是在曲线g(n)上方,如图所示。

enter image description here

现在,在您考虑的情况下,加法和减法的运算,乘法都是需要恒定时间(O(1))的基本运算。 假设添加两个数字需要'a'时间,并且分配结果需要'b'时间。

所以对于这段代码:

  for (i=0;i<n;i++)
   for (j=0;j<n;j++)
     a[i,j]=b[i,j]+c[i,j]

让我们马虎而忽略赋值和更新的for循环操作。 运行时间T(n)=(a+b)n 2

请注意,这只是 O(n 2 ,为什么?

根据定义,这意味着我们可以识别某个点k,超过该点k对于某个常数c,曲线T(n)总是在n 2 之上。

意识到这确实是真的。我们总是可以选择足够大的常数,以便c.n ^ 2曲线始终超出给定曲线。

这就是为什么人们会说:删除常数!

<强>底线: f(n)的大O是g(n)意味着,在某条垂直线的右边,曲线f(n)总是以g(n)为界。