恒定大小输入的运行时间如何不变?

时间:2017-05-17 07:21:53

标签: algorithm sorting asymptotic-complexity

我在Cormen发现了这个声明:

  

由于算法在常量输入上的运行时间是常数,因此算法运行时间引起的重现通常会有   对于足够小的n,T(n)= theta(1)。

但是如果我们考虑排序那么即使输入大小是恒定的,运行时间也会改变(当输入已经排序时,输入是降序排列,我们必须按升序排序)。运行时间如何不变?

2 个答案:

答案 0 :(得分:0)

假设我们比较了3种算法

  • A ,其运行时间恰好为:122n + 1(= O(n)
  • B ,运行时间为:5 *n²+ 4 * n +17(= O(n²)
  • C ,运行时间恰好为:n³+ 20(= O(n³)

如果我们git每个相同的常量n = 4的输入我们得到不同的运行时间

  • A:144个时间单位
  • B:113个时间单位
  • C:84个时间单位

即使所有三种算法都具有不同的复杂度,n的特定(常数)值的结果也会产生恒定的运行时间。

因此,从结果144 113 84中,您可以对其他n值的不同算法的复杂性一无所知。

因此,只有在想要描述n的所有可能变量的算法行为时,O-Notation才有意义。如果您只对特定n的运行时间感兴趣,那么O符号是没用的,因为它不会告诉您任何因素。在上面的例子中,具有最差复杂度(C)的算法在给定的n = 4时具有最低的运行时间。

简而言之:无论算法的复杂程度如何,如果你遇到一个恒定大小的问题,你总会得到一个恒定的运行时间。

o-notation仅描述与不同输入大小相关的运行时间变化,以及任何常数因子的抽象。

Relevant question

答案 1 :(得分:0)

对给定问题使用已建立的算法预先计算一个表,该表在第1列中包含大小为n的所有不同输入,在第2列中,对应于同一行第1列中输入的算法输出。现在,修改后的算法是使用输入作为表列1的索引,只输出该行中第2列中包含的内容。

该表的大小是预先计算的固定m。因此,修改后的算法的运行时仅依赖于m,因为它需要输出最多大小为m的一些数据。因此,修改算法的运行时为O(1)