问题描述
使用决策树和您对 (a) 部分的答案,证明任何正确合并两个排序列表的算法都必须执行至少 2n − o(n) 次比较。
来自 (a) 部分的答案:将 2n 个数字划分为两个排序列表的 2n 种方法,每个列表有 n 个数字 (2n 超过 n)
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