T(n)转换为O(n)

时间:2013-02-23 04:02:04

标签: big-o time-complexity

在处理时间复杂性时,我对T(N)O(N)之间的区别感到有些困惑。我有三个算法及其各自的T(N)方程式,我必须找到最差的时间复杂度O(N),我不确定它与T(N)有何不同。

一个例子是:

T(n) = 150⋅N² + 3⋅N + 11⋅log₂(N)

O()只是O(N²)

此外,是否应始终使用具有较低复杂度的算法?我有一种感觉答案是否定的,但我不太清楚为什么。

3 个答案:

答案 0 :(得分:5)

  

O()是否只是O(N²)

对于大N,N²术语将主导运行时,因此其他术语不再重要。

例如,对于N = 10,在你的例子中,150⋅N²已经是15000,而3⋅N= 30和11⋅log2(N)= 36.5,所以非N²项只占0.44%总步数。

对于N =100,150⋅N2=1500000,3⋅N= 300,11·log 2(N)= 73.1,因此非N 2项只占总步数的0.025%。

因此,对于更高的N,低阶项的相关性会降低。

  

此外,是否应始终使用具有较低复杂度的算法?

没有。因为Big-O表示法仅描述渐近行为,因为N变大,并且不包括任何常数因子开销,所以通常可以更好地使用具有较低开销的不太优化的算法。

在你的例子中,如果我有一个替代算法,你试图解决的问题是运行时T'(N)=10⋅N³,那么对于N = 10,它只需要10000步,而你的例子将是需要150067步。基本上,for any N ≤ 15,T'(N)算法会更快,并且对于任何N> 15,你的T(N)算法会更快。所以如果你事先知道你不会看到任何N> 15,通过选择理论上效率较低的算法T'(N),你会更好。

当然,在实践中还有许多其他考虑因素,例如:

  • 您可以在库,网络等中重复使用的算法的可用性
  • 如果您自己实施:易于实施
  • 算法是否可以轻松扩展到多个核心或多台计算机

答案 1 :(得分:2)

T(n)是表示输入大小为n所需时间的函数。大哦符号是对它的分类。就像你在你的例子中所说的那样,那个例子的大哦将是n ^ 2。

关于你的第二个问题,大哦符号表示你应该使用的算法,因为输入大小接近无穷大。实际上,在某些情况下,您永远无法获得足够大的输入来补偿。

例如,如果T1(n)= 999999999999 * N且T2(n)= 2 * N ^ 2,则最终n足够大以使T2大于T1。但是,对于较小尺寸的n,T1更大。您可以绘制函数图形,甚至可以求解方程组,找出n的大小会产生影响。

注意:还要记住,大哦是复杂的绑定,这意味着你可以拥有一个仍然正确的宽松界限。

答案 2 :(得分:1)

T(n)只是一个函数。 O或大哦是一个复杂程度。

对于那个问题,T(n)可以是f(n)或g(n)。

我希望这很清楚。

Big Oh衡量算法的时间或空间复杂度。

您不考虑复杂度的较低阶,因为对于非常大的n值,更高阶的复杂度是>>较低阶的复杂性。