排序算法复杂性的证明

时间:2017-07-14 17:21:03

标签: algorithm sorting asymptotic-complexity

该定理表示:

任何比较排序算法都会在最坏的情况下执行Ω(nlg(n))比较。

证明我找到了:

查看算法执行的最坏情况下的比较次数,意味着在其决策树中从根到叶子的最长路径。

高度为h的二叉树最多有2 ^ h个叶子,并且有n个!排列(输出),我们有:

  

2 ^h≥n!

我知道我们可以将2^h ≥ n!重写为h ≥ log2(n!),但我们怎样才能最终得到:

  

h≥log2(n!)=Ω(n * lg(n))?

2 个答案:

答案 0 :(得分:4)

Stirling's approximation应用于日志 2 (n!)一词给出:

n log 2 (n) - log 2 (e)* n + O(log 2 (n))

是Ω(n log 2 (n))

答案 1 :(得分:0)

N!是n个小于或等于n的数的乘积,所以:

log(n!) < log(n^n)
=> log(n!) < n*log(n)

和n!是n / 2个数至少为n / 2的乘积,以及一些其他数字&gt; 1,所以:

log(n!) > log((n/2)^(n/2))  
=> log(n!) > n*log(n/2)/2
=> log(n!) > n*(log(n)-log(2))/2
=> log(n!) > n*log(n)/4 when log(n) - log(2) > log(n)/2
=> log(n!) > n*log(n)/4 when log(n) > 2log(2)
=> log(n!) > n*log(n)/4 when n > 4