什么是算法分析中的“相关操作”?

时间:2015-03-23 20:53:20

标签: big-o time-complexity analysis

我一直在研究算法的分析,并且我多次想到要定义算法的时间复杂度,我必须找到算法执行的“相关操作”的数量。然而,至少据我所知,没有一个来源(Cormen,Skiena,Sedgewick ......)提到我如何知道哪些操作实际上是相关的。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

一般来说,你只需计算你在给定环境中关心的操作。

E.g。

fib(n)
{
   if(n < 2) 
      return 1;

   return fib(n-1) + fib(n-2)
}

您可以在此代码中找到的操作是:

  • if statement
  • 比较
  • 返回值
  • 递归通话
  • 除了

每个操作都需要一些时间才能执行,但每个操作都执行得非常快(假设输入n是64位数,程序在“普通”计算机上运行)。因此,这个函数的复杂性必须来自重复调用,尤其不是来自它自己的调用,而是来自调用的数量。所以你计算递归调用并忘记其他操作,知道它们运行得很快,意味着O(1)(恒定时间)。

您可以忽略某些操作的原因是您根据oOΘΩω来计算复杂性(Landau-Notation),它允许你在asymtotics中计算,其中slwo生长部分和常数不起任何作用。

我认为没有简单的答案如何知道,哪些操作是相关的。有一些简单的例子(比如我给的那个),但总的来说并不容易。然后你必须计算一切可能相关的东西,直到你注意到它不是。