算法导论4-5

读书笔记

使用主方法,往往能够更加简便地求解递归式;

\[T(n) = aT(n/b) + f(n) \]

上述递归式表示,将原来规模为\(n\)的问题分解为\(a\)个子问题,每个子问题的规模为\(n/b\),其中\(a\)\(b\)都是正常数。\(a\)个子问题递归地进行求解,每个花费时间为\(T(n/b)\)。函数\(f(n)\)包含了问题分解和子问题解合并的代价。

主定理的具体内容如下:

\(a\ge{1}\)\(b>1\)是常数,\(f(n)\)是一个函数,\(T(n)\)是定义在非负整数上的递归式:

\[T(n) =aT(n/b) + f(n) \]

其中我们将\(n/b\)解释为\(\lfloor n/b \rfloor\)\(\lceil n/b \rceil\)。那么\(T(n)\)有如下渐近界:

  1. 若对某个常数 \(\varepsilon > 0\)\(f(n)=O(n^{\log_b^{a-\varepsilon}})\),则\(T(n)=\theta(n^{\log_b^a})\)
  2. \(f(n)=\theta(n^{\log_b^a})\),则\(T(n)=\theta(n^{\log_b^a}\lg^n)\)
  3. 若对某个常数\(\varepsilon>0\)\(f(n)=\Omega(n^{\log_b^{a+\varepsilon}})\),且对某个常数\(c<1\)和所有足够大的\(n\)\(af(n/b)\le{cf(n)}\),则\(T(n)=\theta(f(n))\)

课后习题

4.5-1

对下列递归式,使用主方法求出渐近紧确界。

a. \(T(n) = 2T(n/4) + 1\)

\[\begin{aligned} & a = 2, b = 4, f(n) = 1 \\[2ex] & \text{可知 } n^{\log^2_4}=n^{\frac{1}{2}} \\ & \because f(n) = O(n^{\frac{1}{2}})\\ & \therefore T(n) = \theta(n^{\frac{1}{2}}) \end{aligned} \]

b. \(T(n) = 2T(n/4) + \sqrt{n}\)

\[\begin{aligned} & a = 2, b = 4, f(n) = n^{\frac{1}{2}}\\[2ex] & \text{可知 } n^{\log^2_4} = n^{\frac{1}{2}} \\ & \because f(n) = \theta(n^{\frac{1}{2}}) \\ & \therefore T(n) = \theta(n^{\frac{1}{2}}\lg^n) \end{aligned} \]

c. \(T(n) = 2T(n/4) + n\)

\[\begin{aligned} & a=2, b= 4, f(n) = n \\[2ex] & \text{可知 } n^{\log^2_4} = n^{\frac{1}{2}} \\ & \because f(n) = \Omega(n^{\frac{1}{2}}) \\ & \therefore T(n) = \theta(n) \end{aligned} \]

d. \(T(n) = 2T(n/4) + n^2\)

\[\begin{aligned} & a = 2, b = 4, f(n) = n^2 \\[2ex] & \text{可知 } n^{\log^2_4} = n^{\frac{1}{2}} \\ & \because f(n) = \Omega(n^{\frac{1}{2}}) \\ & \therefore T(n) = \theta(n^2) \end{aligned} \]

4.5-2

Caesar教授想设计一个渐近快于Strassen算法的矩阵相乘算法。它的算法使用分治方法,将矩阵分解为\(n/4 * n /4\)的子矩阵,分解和合并步骤共花费\(\theta(n^2)\)时间。他需要确定,它的算法需要创建多少个子矩阵,才能击败Strassen算法。如果它的算法创建\(a\)个子问题,则描述运行时间\(T(n)\)的递归式为\(T(n)=aT(n/4) + \theta(n^2)\)。Caesar教授的算法如果要快于Strassen算法,\(a\)的最大整数值是多少?

由题意可得\(n^{\log^a_4} < n^{\log^7_2}\),计算结果为\(a < 49\),所以\(a\)的最大整数值为48。

4.5-3

使用主方法证明:二分查找递归式\(T(n) = T(n/2)+\theta(1)\)的解是\(T(n) = \theta(\lg^n)\)

\[\begin{aligned} & a =1, b = 2, f(n) = \theta(1)\\[2ex] & \text{可知 } n^{\log_2^1} = 1 \\ & \because f(n) = \theta(1)\\ & \therefore T(n) = \lg^n \end{aligned} \]

4.5-4

主方法能应用于递归式\(T(n)=4T(n/2) + n^2\lg^n\)吗?请说明可以或者为什么不可以。给出这个递归式的一个渐近上界。

//todo

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