算法设计与分析黄宇第二章习题2-18 T(n) = sqrt(n)T(sqrt(n)) + O(n)

给定递归关系:\[ T(n) = \sqrt{n} \cdot T(\sqrt{n}) + O(n) \]
我们的目标是求解 \( T(n) \) 的时间复杂度。

首先从递归树的角度分析问题。

从上到下,问题的规模逐渐下降,自然地我们得到过程如下:
\[ T(n) \rightarrow T(\sqrt{n}) \rightarrow \ldots \rightarrow T(1) \]
然而考虑到实际上除了 \( n=1 \) 时递归开根号,否则最后的问题规模不可能为1。因此我们对于任意给定的 \( n \),最终递归树的子问题的规模可以放缩到 \( (1,2] \)。我们不妨假设最终缩放的子问题规模为2,小于2按照2来看。(这样最终子问题的复杂度最多只是从 \( O(1) \) 到 \( O(2) \),仍然是同一个量级)。

我们不妨假设存在 \( k \) 使得:
\[ 1 < n^{\frac{1}{2^{k+1}}} < n^{\frac{1}{2^{k}}} < 2 \leq n^{\frac{1}{2^{k-1}}} \]
推出:
\[ \log_{n} 1 < \frac{1}{2^{k+1}} < \frac{1}{2^{k}} < \log_{n} 2 \leq \frac{1}{2^{k-1}} \]
\[ 2^{k-1} \leq \log_{2} n < 2^{k} < 2^{k+1} < \infty \]
\[ k-1 \leq \log_{2} (\log_{2} n) < k < k+1 < \log_{2} \infty \]
\[ k+1 = k-1 + 2 < \log_{2} (\log_{2} n) + 2 \]
\[ k = O(\log_{2} (\log_{2} n)) \]

接下来我们来求递归相邻两层的比例关系:
\begin{align*}
\frac{T(n)}{\sqrt{n} \cdot T(\sqrt{n})} &= 1 + \frac{O(n)}{\sqrt{n} \cdot T(\sqrt{n})} \\
&= 1 + \frac{O(n)}{n^{\frac{3}{4}} \cdot T(n^{\frac{1}{4}}) + \sqrt{n} \cdot O(\sqrt{n})} \\
&= 1 + \frac{O(n)}{n^{\frac{7}{8}} \cdot T(n^{\frac{1}{8}}) + n^{\frac{3}{4}} \cdot O(n^{\frac{1}{4}})} \\
&= \ldots \\
&= 1 + \frac{O(n)}{ n \cdot O(2) + \log_{2} n  \cdot O(n) } \\
&= 1
\end{align*}

之后我们根据 Master Theorem 计算最终的复杂度:

计算顶层复杂度: 
\[ T(n) = \text{层数} \times \text{底层总复杂度} = \Theta(n \log \log n) \]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值