个人思路,仅供参考

1.时间复杂度的渐近分析

以下每个小题中两个函数分别为$ f(n) $和$ g(n) $。 在渐近分析中, 可以写成$ f(n) = \ldots(g(n)) $的形式。请计算并选择相应的$ \mathcal{O} $、$ \Theta $、$ \Omega $符号。

(1) $ f(n) = n^{\frac{1}{2}} $ $ g(n) = (\log 2 n)^5 $

上式中,等号上的△表示此等号右方使用了一次洛必达法则(L’Hospital Rule)。

即:

(2) $ f(n) = (\log n)^{2 \log n} $ $ g(n) = n^3 $

首先利用换元法,令$ \log n = t $ , 则$ n = 2^t $ , $ f(n) = t^{2t} $ , $ g(n) = 2^{3t} $

则:

即:

(3) $ f(n) = n^2 $ $ g(n) = 3^{2 \log n} $

此题类似于(2),利用换元法,令$ \log n = t $ , 则$ n = 2^t $ , $ f(n) = 2^{2t} $ , $ g(n) = 3^{2t} $

则:

即:

(4) $ f(n) = n!! $ $ g(n) = 2^n $

  • n为偶数时

    观察上式,由于$ n \rightarrow +\infty $ , $ \frac{4}{n} \rightarrow +\infty $且除最后两项外其他所有项均小于1

    由此可得:

  • n为奇数时

    用相同方法

    观察上式,由于$ n \rightarrow +\infty $ , $ \frac{4}{n} \rightarrow +\infty $且除最后两项外其他所有项均小于1

    由此可得:

    综上:

    即:

2.递归算法的时间复杂度

参考第1.3小节里的推导过程和结果,完成以下小题:

(1) 如果$ f(n)=n^{\log _b a+\epsilon} $ ,且$ 0<\epsilon \ll 1 $。请推导$T(n)$。

根据第1.3小节推导内容,把规模大小为的问题平均分成b(≥2)份,然后在这些子问题上迭代地使用分治算法。在构造问题的解时,我们选择$a \in{1, \cdots, b}$个子问题的解进行合并。此时子问题解的合并过程耗时为$ \mathcal{O}(f(n)) $。则递归算法的时间复杂度函数$ T(n) $可以写成

递推公式以得到更小的n,直到到达递归基,也就是对应着n=1的情形。

上式中,$t \in{0, 1, 2, \cdots }$为递推步骤的序号。

对于足够大的t,我们有n/b=1,即$ t = \log _{b} n $。此时对应着算法操作到了单个元素的层次。同时我们假定递推基$ T(1) = \Theta(1) $,即为常数操作时间。则:

利用等式

得到

代入$ f(n) = n^{\log _b a+\epsilon} $得

上式中的级数求和为

因为$ -\epsilon < 0 $ , 当n很大时, $ \lim _{n \rightarrow +\infty} (1 - n^{-\epsilon}) = 1 $ , 则:

(2) 在二分查找算法里,如果$ T(n)=T(\frac{n}{2}) + c $ ,其中c为某一常整数。请推导$T(n)$

上式中,$t \in{0, 1, 2, \cdots }$为递推步骤的序号。

对于足够大的t,我们有$ \frac{n}{2^t}=1 $ ,即$ t = \log n $。此时对应着算法操作到了单个元素的层次。同时我们假定递推基$ T(1) = \Theta(1) $,即为常数操作时间。则:

对于上式中的级数求和

由于1的任意次方都是1,上式中的$ \sum_{i=0}^{\log n-1} 1^i $ 可视作0到$ \log _2 n-1 $ ,一共$ \log n $个$ \mathcal{O}(1) $相加。

二分查找算法的递归树一共有$ \log n $层,每一层时间复杂度为c,时间复杂度即为$ \mathcal{O}\left(\log n\right) $

(3) 在归并排序算法里,如果$ T(n) = 2 T(\frac{n}{2}) + cn + d $ ,其中c和d均为常整数。请推导$T(n)$

上式中,$t \in{0, 1, 2, \cdots }$为递推步骤的序号。

对于足够大的t,我们有$ \frac{n}{2^t}=1 $ ,即$ t = \log n $。此时对应着算法操作到了单个元素的层次。同时我们假定递推基$ T(1) = \Theta(1) $,即为常数操作时间。则:

利用等式

得到

对于上式中的级数求和

由于1的任意次方都是1,上式中的$ \sum_{i=0}^{\log n-1} 1^i $ 可视作0到$ \log _2 n-1 $ ,一共$ \log n $个$ \mathcal{O}(1) $相加。

归并排序算法的递归树一共有$ \log n $层,每一层时间复杂度为n,时间复杂度即为$ \mathcal{O}(n\log n) $