我怎样才能证明n!任何常数自然数p不在O(n ^ p)中? 对于所有k?
,是(n k)(n选择k)在O(n ^ p)中答案 0 :(得分:10)
log (n!) = n log n - n + O(log n) = O(n log n)
但是
log (n^p) = p log n = O(log n)
表示常量p
。显然,n!
的增长速度比n^p
快,因此不是O(n^p)
。
答案 1 :(得分:8)
你可以证明n!通过显示你总是可以选择n(对于固定常数p),n! > n^p
。
(为了得到一个想法,选择一些低的p值并绘制n!对n ^ p)
第二部分的推理遵循相同的路线。绑定(n选择k)然后使用第一部分。
提示:正如卡萨布兰卡所说,你可以使用Stirling's approximation
答案 2 :(得分:2)
编辑(2011年3月) - 仅使用简单计算的简单方法
显示O(n!)不等于O(n ^ p)的一种方法是比较n的对数!记录n ^ p。
ln(n!)= sum(ln(i)){i:1到n}
ln(n ^ p)= p * ln(n)
这似乎没有帮助,因为我们不知道日志的总和是多少。诀窍是通过使用ln(i)di从1到n
的积分来计算下限在下图中可以看到,黑色的ln(x)小于蓝色的和步功能。
鉴于ln(i)di的不定积分是i * ln(i) - i + C,我们可以从1到n积分得到:
n * ln(n) - n + 1作为下限。
因为没有选择的p大于所有可能的n:
O(p ln(n))< O(n ln(n)),O(n ^ p)<为O(n!)
注意:积分ln(n)得到ln(n!)的近似值是斯特林近似的基础。这是一个更粗略的近似,如果你继续采取反日志:n! > = e *(n / e)^ n,而斯特林有sqrt(2 * pi * n)而不是e。
从1到n + 1的积分会给你一个上界(sum步函数适合ln(n)的图形)