获取下面的复杂性顺序
O(1), O(log(n)), O(n⋅log(n)),O(n), O(n²), O(2ⁿ), O(n!), O(nⁿ), O(n³).
订单应如下:
O(1) < O(log(n)) < O(n) < O(n log n) < O(n²) < O(n³) < O(2ⁿ) < O(nⁿ) < O(n!)
在我看来,nⁿ=n⋅n⋅n⋅...
但是,n! = n(n-1)(n-2).....
所以O(n!) < O(nⁿ)
然而,另一位朋友说O(nⁿ) < O(n!)
,
因为n! = sqrt( 2πn ) ⋅ (n/e)ⁿ
我不知道怎么弄这个,请详细解释一下。
答案 0 :(得分:2)
公式n! ≈ sqrt( 2πn ) ⋅ (n/e)ⁿ
称为Stirlings approximation
但是,如果你知道O(n!) < O(nⁿ)
比sqrt(n)
下降慢得多((1/e)ⁿ
增长),这也会显示n
。 (limn → ∞ sqrt(n) / eⁿ = 0
)。所以
O(n!) = O(sqrt(n) ⋅ (1/e)ⁿ ⋅ nⁿ) < O(nⁿ)
holdes,因为sqrt(n) ⋅ (1/e)ⁿ
远小于1,大约为O((1/e)ⁿ)
。
但这个公式只是一个近似值。如你所说:
nⁿ = n ⋅ n ⋅ ... ⋅ n (n times)
n! = n ⋅ (n-1) ⋅ ... ⋅ 2 ⋅ 1
< n ⋅ n ⋅ ... ⋅ n = nⁿ
这应该表明O(n!) < O(nⁿ)
。
答案 1 :(得分:0)
假设N = 4。