Algorithm 如何从给定的运行时间中找出算法的复杂度

Algorithm 如何从给定的运行时间中找出算法的复杂度,algorithm,time-complexity,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) 实际上,big-O表示法在

我有三种算法,即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)

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

省略的常量可能太大,以致于即使算法的复杂度较低,问题也无法解决


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

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

  • O(1):当您更改输入大小时,所花费的时间根本不会更改
  • O(logn):当您将输入大小增加一倍时,所花费的时间会增加一定数量
  • O(n):当输入大小翻倍时,所花费的时间也会翻倍
  • O(n logn):当您将输入大小增加一倍时,所花费的时间会增加一倍多一点
  • O(n2):当输入大小翻倍时,所花费的时间是原来的四倍
  • O(2n):当你增加一定量的输入时,所花费的时间是原来的两倍
这样,您就可以从提供的几个值中查看解决方案。请注意,输入大小始终是原来的两倍。在哪种情况下,所用的时间也会增加一倍?什么时候会比这多一点?什么时候翻两番


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

是的,我试过了,但我怀疑我是否考虑了x轴的输入大小和y轴的运行时间。我把x取为512个单位,y取为70个单位。。。我怀疑我可以用不同的单位。我很伤心地忘记了我的学校数学…看看输入大小和各自的执行时间就知道了。当输入大小翻倍时,执行时间会发生什么变化?它也加倍了吗?是不是比两倍多一点?它是四倍吗?是的,我也试过了,但是A和C大约是O(n)。。B是O(nlogn),但没有O(n^2)O(logn):如果输入大小加倍,则运行时增加1