O(log n!) == O(n log n)
。证明有点数学。 首先,我们有log(n!) = log(1) + log(2) + ... + log(n) <= log(n) + log(n) + ... + log(n) = n log(n)
。另一方面,我们还得到以下内容
2 log(n!) = 2*(log(1) + log(2) + ... + log(n))
= (log(1) + log(n)) + (log(2) + log(n-1)) + ... + (log(i) + log(n-i+1)) + ... + (log(n) + log(1))
= log(1*n) + log(2*(n-1)) + ... + log(i*(n-i+1)) + ... log(n*1)
>= log(n) + ... + log(n) = n log(n)
i*(n-i+1) = i*n - i*i + i >= n
以来我们得到的不等式(似乎有些神秘,但它基本上说乘积比求和的增长快)。所以我们有
log(n!) <= n log(n) <= 2 log(n!)
。通过O标记的定义,这意味着O(log(n!)) = O(n log(n))
。