如何从给定

时间:2016-02-24 12:36:56

标签: algorithm time-complexity

我有三种算法,即A,B,C。以下是输入的大小及其各自的运行时间。

Size of Input     A    B   C    
----------------------------             

         512     70  135  42

        1024    134  517  86

        2048    262 2053 182

在这三种算法中,一种有O(n),一种有O(nlogn),另一种有O(n ^ 2)......

2 个答案:

答案 0 :(得分:1)

可以非常粗略地理解不同的复杂程度,如下所示:

  • O(1):当您更改输入大小时,所需的时间根本不会改变。
  • O(log n):当您将​​输入大小加倍时,所花费的时间会增加一些不变量。
  • O(n):当您将​​输入大小加倍时,所用时间也会加倍。
  • O(n log n):当您将​​输入大小加倍时,所用时间会略多一倍。
  • O(n 2 ):当您将​​输入大小加倍时,所用时间是原来的四倍。
  • O(2 n ):当您将​​输入增加一定量时,所用时间会加倍。

通过这种方式,您可以从提供的少量值中了解解决方案。请注意,输入大小始终加倍。在这种情况下,所用的时间也增加了一倍?什么时候比这更多?什么时候翻两番?

最后,您可以尝试找到线性或二次函数,它们(大致)产生给定输入的结果(即运行时间)。如果你能找到一个线性方程(形式为 y = ax + b )那么它是O(n),如果你需要二次方,那么它就是O(n 2 ),等等。

答案 1 :(得分:0)

实际上,big-O表示法在定义函数在两个特定输入大小之间的增长方式方面很差。有几个问题有O(exp n),但实际上比一些非指数函数运行得好。

省略的常量可能会大到使问题无法工作,即使算法可能具有适度低的复杂性。

我怀疑这是一个作业问题,在这种情况下,查看每个函数如何增长,例如,它是否随输入大小线性增加。