什么是次线性算法?

时间:2015-08-31 13:01:17

标签: algorithm asymptotic-complexity limits

我的一位同事向我提出了以下问题。

Which of the following expressions is not sublinear?
O(log log n)
O(n)
O(logn)
O(root(n))

我已经完成了https://en.wikipedia.org/wiki/Time_complexity#Sub-linear_time,但不能,但我不确定我是否完全了解它。有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:14)

如果函数f(x)比其他函数g(x)增长得快,如果它们的比率x接近无穷大的极限达到某个正数,有界数,则如下面的定义所示。

enter image description here

在次线性的情况下,我们想要证明函数比c * n增长得慢,其中c是一些正数。

因此,对于列表中的每个函数f(n),我们需要f(n)与(c * n)的比率。如果限制为0,则表示函数f(n)是次线性的。否则它会以相同(近似)的速度增长n或更快。

lim n->inf (log log n)/(c*n) = 0 (via l'Hopital's)

(适用次线性)

lim n->inf (n)/(c*n) = 1/c != 0

<强>(线性)

lim n->inf (log n)/(c*n) = 0 (via l'Hopital's)

(适用次线性)

lim n->inf (sqrt(n))/(c*n) = 0  

(适用次线性)

答案 1 :(得分:9)

我想我理解你为什么感到困惑:你链接的维基百科页面使用Little-Oh表示法:

  

亚线性时间

     

如果T(n)= o(n)

,则称算法在子线性时间内运行(通常拼写为次线性时间)

注意T(n)= o(n)是一个更强的要求,而不是说T(n)= O(n)。

特别是对于O(n)中的函数,你不能总是有不等式

f(x) < k g(x) for all x > a

对您选择的每个k感到满意。 y=xk=1会证明你错了,并且很少 - 哦符号要求每个k都满足该表达式。

任何O(n)函数在o(n)中也。因此,您的非子线性表达式为O(n)。

我建议您阅读this answer继续学习