任意一个比较排序算法在最坏情况下,都需要做Ω(nlogn)次的比较。
堆排序和合并排序都是渐进最优的比较排序算法,运行上界O(nlogn)与最坏情况下界Ω(nlogn)是一致的。
8.1-1 在于某种比较排序算法对应的决策树中,一个叶结点最小可能的深度是多少?
8.1-2 不用斯特林近似公式,给出log(n!)渐进紧缺界。
8.1-3 证明:对于长度为n的n!种输入中的至少一半而言,不存在具有线性运行时间的比较排序算法。对n!中的1/n部分而言又怎样呢?1/2^n部分呢?
假设有m个结点存在线性运行时间的比较排序算法,由高度为h的二叉树至多有2^h个子结点,则2^h>=m。
两边取对数则,h>=log(m),即树的高度至少大于等于log(m)。
由任何一个比较排序算法在最坏情况下,都需要做Ω(nlogn)次比较,则h>=O(nlogn)。
若logm<=O(nlogn) 则,存在一种使m种输入的线性时间运行的比较排序算法。
令m= n!/2,log(n!/2)=logn!-1>=nlogn-nloge-1
8.1-4 现有n个元素要排序。该输入序列包含n/k个子序列,每一个包含k个元素。每个子序列中的元素都小于后继子序列中的元素,大于前驱子序列中的元素。这样,只要对各n/k子序列中的k元素排序,就可以得到对整个输入序列长度为n的排序结果。证明:这个排序问题中所需的比较次数有一个下界Ω(nlogk)。