算法导论8-1

读书笔记

本小节通过决策树模型,说明了一个比较排序算法的下界为\(\Omega(n\lg{n})\)

比较排序的下界

课后习题

8.1-1

在一棵比较排序算法的决策树中,一个叶节点可能的最小深度是多少?

最好情况就是当前数组是已经排好序的,需要比较\(n-1\)次;深度为\(n\)

8.1-2

不用斯特林公式,给出\(\lg{(n!)}\)的渐近确界。利用\(A.2\)节中介绍的技术来求累加和\(\sum^n_{k=1}\lg{k}\)

上界:

\[\begin{aligned} \lg{n!} &= \sum_{k=1}^n \lg{k} \\[2ex] &= \sum_{k=1}^{\frac{n}{2}}\lg{k} + \sum_{k=\frac{n}{2}+1}^{n} \lg{k}\\[2ex] &\le \sum_{k=1}^{\frac{n}{2}} \lg{\frac{n}{2}} + \sum_{k=\frac{n}{2}+1}^{n}\lg{n}\\[2ex] &= \frac{n}{2}\lg{\frac{n}{2}} + n\lg{n}\\[2ex] &= O(n\lg{n}) \end{aligned} \]

下界:

\[\begin{aligned} \lg{n!} &= \sum_{k=1}^n \lg{k} \\[2ex] &= \sum_{k=1}^{\frac{n}{2}}\lg{k} + \sum_{k=\frac{n}{2}+1}^{n} \lg{k}\\[2ex] &\ge \frac{n}{2}\lg{2} + \frac{n}{2}\lg{\frac{n}{2}}\\[2ex] &= \Omega(n\lg{n}) \end{aligned} \]

证毕

8.1-3

证明:对\(n!\)种长度为\(n\)的输入中的至少一半,不存在能达到线性运行时间的比较排序算法。如果只要求对\(\frac{1}{n}\)的输入达到线性时间呢?\(\frac{1}{2^n}\)呢?

比较算法的时间复杂度无论如何都不是线性相关的;

8.1-4

假设现有一个包含\(n\)个元素的待排序序列。该序列由\(\frac{n}{k}\)个子序列组成,每个子序列包含\(k\)个元素。一个给定子序列中的每个元素都小于其后继子序列中的所有元素,且大于其前驱子序列中的每个元素。因此,对于这个长度为\(n\)的序列的排序转化为\(\frac{n}{k}\)个子序列中的\(k\)个元素的排序。试证明:这个排序问题中所需比较次数的下界是\(n\lg{k}\)。(提示:简单地将每个子序列的下界进行合并是不严谨的。)

一共有\(\frac{n}{k}\)个子序列,单个子序列的比较次数为\(\Omega(k\lg{k})\),所以总的比较次数为\(\Omega(n\lg{k})\)

posted @ 2021-01-15 10:49  ijkzen  阅读(245)  评论(0编辑  收藏  举报