O(n!)
并不等同于O(n^n)
。它在渐近意义下小于O(n^n)
。
O(log(n!))
等同于O(n log(n))
。以下是一种证明方法:
注意到通过使用对数规则log(mn) = log(m) + log(n)
,我们可以看出:
log(n!) = log(n*(n-1)*...2*1) = log(n) + log(n-1) + ... log(2) + log(1)
证明:O(log(n!)) ⊆ O(n log(n))
log(n!) = log(n) + log(n-1) + ... log(2) + log(1)
哪个小于:
log(n) + log(n) + log(n) + log(n) + ... + log(n) = n*log(n)
因此,O(log(n!))
是O(n log(n))
的子集。
证明 O(n log(n)) ⊆ O(log(n!))
:
log(n!) = log(n) + log(n-1) + ... log(2) + log(1)
比(将所有(n-x)
替换为n / 2
的左半部分表达式)更大:
log(n/2) + log(n/2) + ... + log(n/2) = floor(n/2)*log(floor(n/2)) ∈ O(n log(n))
因此,O(n log(n))
是O(log(n!))
的子集。
由于O(n log(n)) ⊆ O(log(n!)) ⊆ O(n log(n))
,它们属于等效的大O类。
n!
就是它本身。虽然表示法有些奇怪... - leppie