Time complexity 增长顺序
为了 是 我试着把两者都除以n,结果Time complexity 增长顺序,time-complexity,big-o,Time Complexity,Big O,为了 是 我试着把两者都除以n,结果 f = O(g) f = 0(g) f = Omega(g)? 但我仍然不知道哪一个生长得更快。有人能帮我解释一下原因吗?我真的很想知道(不使用计算器的情况下,)如何确定哪一个增长更快。比较它们的对数曲线可能最容易: 如果(对于某些C1、C2、a>0) f1,g的增长速度比f快。此外,g(1)=1>0=f(1),对于n>1和f=O(g),则| f(n)2>1,log d2d(logd)>=dlogd+dlog2=d(log2d)>2clog2d>clog(
f = O(g)
f = 0(g)
f = Omega(g)?
但我仍然不知道哪一个生长得更快。有人能帮我解释一下原因吗?我真的很想知道(不使用计算器的情况下,)如何确定哪一个增长更快。比较它们的对数曲线可能最容易: 如果(对于某些C1、C2、a>0)
f
然后(对于足够大的n)
log(f)
两者都受对数(n)增长的控制,所以问题是哪个残差更大。log(n)残差的增长速度比log(log(n))快,无论k有多小或a有多大,因此g的增长速度都比f快
所以用大O表示法:g的增长速度比f快,所以f可以(渐近地)从上面被一个类似g的函数所限定:
log(f) < log(n) + a log(log(n)) + log(C1)
log(g) < log(n) + k log(n) + log(C2)
f(n)
所以f=O(g)。类似地,g可以由f从下方限定,因此g=ω(f)。但是f不能从下面被g这样的函数所限定,因为g最终会超过它。那么f!=ω(g)和f!=θ(g)
但aaa提出了一个很好的观点:直到n变得非常大,g才开始支配f
我对算法缩放没有太多经验,因此欢迎进行更正。检查它们的交点如何
f(n) < C3 g(n)
我用Mathematica作弊
你也可以用衍生品来推理
Solve[Log[n] == n^(0.01/5), n]
1809
{{n -> 2.72374}, {n -> 8.70811861815 10 }}
考虑当n变得非常大时会发生什么,第一个函数的变化趋于零,第二个函数不会失去它的导数(指数大于0)
这告诉你理论上哪个更复杂。
但是在实际应用中,第一个函数的增长速度会更快。我将把它分解为几个简单的、可重用的引理: 引理1:对于正常数k,f=O(g)当且仅当f=O(KG) 证明:假设f=O(g)。然后存在常数c和N,使得N>N时| f(N)|
引理2:如果h是一个正的单调递增函数,f和g对于足够大的n是正的,那么f=O(g)当且仅当h(f)=O(h(g)) 证明:假设f=O(g)。然后存在常数c和N,使得N>N时| f(N)|
引理3:如果h是可逆单调递增函数,则f=O(g)当且仅当f(h)+O(g(h)) 证明:假设f=O(g)。然后存在常数c,N,使得| f(N)|
引理4:如果h(n)对于n>M是非零的,则f=O(g)当且仅当f(n)h(n)=O(g(n)h(n)) 证明:如果f=O(g),那么对于常数c,N,| f(N)|
引理5a:logn=O(n) 证明:假设f=logn,g=n。那么f'=1/n和g'=1,因此对于n>1,g的增长速度比f快。此外,g(1)=1>0=f(1),对于n>1和f=O(g),则| f(n)<| g(n)| 引理5b:n!=O(对数n) 证明:对于矛盾,假设相反,让f=n和g=logn。然后对于一些常数c,n,| n |
现在我们可以把你最初问的问题的答案组合起来 步骤1:
In[71]:= D[Log[n], n]
1
-
n
In[72]:= D[n^(0.01/5), n]
0.002
------
0.998
n
对于任何正常数a
证明:用引理5a记录n=O(n)。因此,用引理3(对于h(n)=n^a)、4和1记录n=1/a记录n^a=O(1/a n^a)=O(n^a)。第二个事实类似地用引理5b得出
步骤2:
log n = O(n^a)
n^a != O(log n)
证明:通过步骤1记录n=O(n^0.002)。然后通过引理2(h(n)=n^5),记录^5n=O((n^0.002)^5)=O(n^0.01)。第二个事实类似
最后答覆:
log^5 n = O(n^0.01)
n^0.01 != O(log^5 n)
换句话说,
n log^5 n = O(n^1.01)
n^1.01 != O(n log^5 n)
证明:将引理4(使用h(n)=n)应用于步骤2
通过练习,这些规则变得“明显”和第二天性。除非你的测试要求你证明你的答案,否则你会发现自己正在快速解决这些大O问题。如果不证明一些关于日志的东西,这不是100%的数学洁净度,但他说:
f = O(g)
f != 0(g)
f != Omega(g)
我们记录了以下两种情况:
f = log(n)^5
g = n^0.01
从这一点我们可以看到,第一个逻辑逐渐变慢,因为它有一个双对数,并且对数增长缓慢告诉您数字n中大约有多少位数。因此,如果g的位数逐渐增长快于f的位数,那么实际数字g的增长肯定快于f!这可能更适合。对于mathoverflow可能太基本了。@Space\u COwbOy这不适合mathoverflow.net!这是为从事原创工作的研究数学家准备的。这是一条路。哈哈,是的,我不知道为什么这会被视为离题。是的,这是一个CS类(算法)的家庭作业问题。“但是如果你的问题通常涉及……软件算法”
n log^5 n = O(n^1.01)
n^1.01 != O(n log^5 n)
f = O(g)
f != 0(g)
f != Omega(g)
f = log(n)^5
g = n^0.01
log(f) = log(log(n)^5)) = 5*log(log(n)) = O(log(log(n)))
log(g) = log(n^0.01) = 0.01*log(n) = O(log(n))