合并两个排序列表,下限

merging two sorted lists, lower bound

使用决策树和你对 (a) 部分的回答,证明任何正确合并两个排序列表的算法必须至少执行 2n − o(n) 次比较。

(a) 部分的答案:2n 过 n 种方法将 2n 个数字分成两个排序列表,每个列表有 n 个数字 (2n 超过 n) <= 2^h

h >= lg(2n)! / (n!)^2

= lg(2n!) - 2lg(n!)

= Θ(2nlg(2n)) - 2Θ(nlg(n)) <----

= Θ(2n) <----

我不明白最后一步。怎么可能是Θ(2n)?

您可以将乘积的对数表示为单独对数 (the first property here) 的总和:

2*n*lg(2*n) = 2*n*(lg(2) + lg(n)) = 2*n*(1 + lg(n))

所以

2*n*(1 + lg(n)) - 2*n*lg(n) = 
2*n+ 2*n*lg(n)) - 2*n*lg(n) = 2*n