题目:
在合并排序中,对小数组采用插入排序
解答:
a)证明在最坏情况下,
n/k
个子列表(每个子列表长度为
k
)可以用插入排序在
长度为k的表插入排序是 Θ(n2) 那么 n/k 个就是 Θ(n2)∗n/k=Θ(nk)
b)证明这些子列表可以在 Θ(nlg(n/k)) 最坏时间内完成合并:
n/k
个表,每层还是
n
个元素,所以就是
c)如果已知修改后的合并排序算法的最坏运行时间为 Θ(nk+nlg(n/k)) ,要使修改后的算法具有与标准合并排序算法一样的渐进运行时间, k 的最大渐进值是什么:
这里比如我们取
当
f(n)=lgn
时
T(n)=Θ(nlgn+nlg(n/lgn))=Θ(nlgn)
所以 最大就是
lgn
d) 在实践中,
k
<script type="math/tex" id="MathJax-Element-3628">k</script>的值要怎么选取?
没有给具体条件,怎么选取?我还有点困惑,后来看了教师手册发现。。。歪果仁的答案好完美:In practice, k should be the largest list length on which insertion sort is faster than merge sort.
2333333333