Lan*_*ine 2 algorithm math complexity-theory big-o time-complexity
我期望找到以下复杂功能的Big O表示法:f(n) = n^(1/4)
.
我想出了一些可能的答案.
O(n^1/4)
.然而,因为它包含了根,它不是一个多项式,我从来没有见过这种ñ "日根植n
在任何教科书或在线资源.n
限制的上限函数.我尝试用蓝色和绿色绘制n^(1/4)
红色.log2 n
n
该log2 n
曲线与相交n^(1/4)
处n=2.361
,而n
与相交n^(1/4)
处n=1
.
鉴于正式的数学定义,我们可以提出另外两个具有不同限制的Big O符号.
以下显示O(n)
适用于n > 1
.
f(n) is O(g(n))
Find c and n0 so that
n^(1/4) ? cn
where c > 0 and n ? n0
C = 1 and n0 = 1
f(n) is O(n) for n > 1
Run Code Online (Sandbox Code Playgroud)
这个显示O(log2 n)
适用于n > 3
.
f(n) is O(g(n))
Find c and n0 so that
n^(1/4) ? clog2 n
where c > 0 and n ? n0
C = 1 and n0 = 3
f(n) is O(log2 n) for n > 3
Run Code Online (Sandbox Code Playgroud)
通常会使用哪种大O复杂功能描述?都是3"正确"吗?这取决于解释吗?
O(n^1/4)
对于大O符号来说非常好.以下是现实生活中的指数中的裂缝的一些例子n^1/4
是O(n)
,但不是Theta(n)
n^1/4
不在O(log(n))
(证据指南如下).对于任何价值r>0
,以及足够大的价值n
,log(n) < n^r
.
证明:
看看 log(log(n))
和r*log(n)
.对于足够大的值,第一个明显小于第二个.在大O表示法的术语,我们可以确定地说,该r*log(n))
不是在O(log(log(n))
和log(log(n))
是(1) ,因此,我们可以说:
log(log(n)) < r*log(n) = log(n^r) for large enough values of n
Run Code Online (Sandbox Code Playgroud)
现在,用基数指数每一边e
.请注意,左手和右手的值都是正值足够大n
:
e^log(log(n)) < e^log(n^r)
log(n) < n^r
Run Code Online (Sandbox Code Playgroud)
此外,以类似的方式,我们可以显示任何常量c
,以及足够大的值n
:
c*log(n) < n^r
Run Code Online (Sandbox Code Playgroud)
因此,根据定义,它意味着n^r
不在O(log(n))
,并且您的具体情况:n^0.25
不在O(log(n))
.
脚注:
(1)如果你仍然不确定,创建一个新的变量m=log(n)
,是明确比r*m
不O(log(m))
?如果你想锻炼,证明这很容易.