【发布时间】:2012-02-23 18:09:02
【问题描述】:
我的“证明”为什么 lg(n!) 是 O(nlg(n)) 是因为 n 在多项式上大于 lg(n!),因此 nlg(n) 在多项式上总是大于 lg(n !)。这是一个可以接受的理由吗?还是你必须在数学上证明它(在这种情况下我不知道如何处理阶乘)
【问题讨论】:
标签: algorithm complexity-theory
我的“证明”为什么 lg(n!) 是 O(nlg(n)) 是因为 n 在多项式上大于 lg(n!),因此 nlg(n) 在多项式上总是大于 lg(n !)。这是一个可以接受的理由吗?还是你必须在数学上证明它(在这种情况下我不知道如何处理阶乘)
【问题讨论】:
标签: algorithm complexity-theory
使用斯特林近似值:http://en.wikipedia.org/wiki/Stirling%27s_approximation
ln n! = n\ln n - n +O(ln(n))
【讨论】:
回想一下 ln(a⋅b) = ln(a) + ln(b)。因此,ln(n!) = ln(n⋅(n−1)⋅…⋅2⋅1) = ln(n) + ln(n−1) + … ln(2) + ln(1);通过检查得出 n⋅ln(n) ≤ ln(n!)。
【讨论】:
您可能确实需要一些在数学上更严格的东西,但这并不太难。自从
lg(n!) = lg 1 + lg 2 + lg 3 + ..... + lg n
您可以考虑y = lg x 图形下方的区域,并将其与http://en.wikipedia.org/wiki/Rectangle_method 近似。你会得到类似http://en.wikipedia.org/wiki/Stirling's_approximation 的东西。
因为你的矩形需要上下边界。
【讨论】:
我见过的通常证明是,对于足够大的 n,n!
【讨论】:
n^n 大于 比 n! :)