《算法设计与分析-屈婉玲教授》第1章的课后习题18、19题详细解题步骤

本文详细解析了复杂函数的阶次排列及多种递推关系式的求解过程,包括迭代法、递归树和主定理的应用,适用于算法分析与设计的学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1.18 对题目中的函数进行从高到低阶的排列:

∑ k = 1 n 1 k 为 调 和 计 数 , 刚 好 跟 题 目 中 的 l o g n 同 阶 l o g ( n ! ) 跟 题 目 中 的 n l o g n 为 同 阶 , 具 体 的 证 明 方 法 在 第 19 题 的 第 ( 8 ) 题 我 们 约 定 l o g 为 l o g 2 , 代 入 其 实 l o g 10 也 没 有 太 大 的 区 别 , 所 以 n = l o g 10 1 0 n , 在 这 题 中 n = Θ ( l o g 1 0 n ) 接 着 当 n → ∞ , l n ( l n n ) > 2 , 那 么 n l n l n n > n 2 , 而 我 们 使 用 的 不 过 是 约 定 的 l o g 函 数 , 所 以 n l o g l o g n > n 3 设 k = l n n , n l n l n n = n l n k , 取 对 数 , l n ( k ) k , 最 终 结 果 为 k k = n l n ( k ) , 根 据 这 个 道 理 , 可 以 发 现 n l o g l o g n = l o g n l o g n 结 合 以 下 的 典 型 的 时 间 复 杂 度 , 从 低 往 高 排 序 为 : o ( 1 ) 、 o ( l o g ∗ n ) 、 o ( l o g l o g n ) 、 o ( l o g n ) 、 o ( n ) 、 o ( n ) 、 o ( n l o g ∗ n ) 、 o ( n l o g l o g n ) 、 o ( n l o g n ) 、 o ( n 2 ) 、 o ( n 3 ) 、 o ( n c ) 、 o ( 2 n ) 因 此 本 题 的 答 案 为 : n ! , 2 2 n , n 2 n , ( l o g n ) l o g n = n l o g l o g n , n 3 , n l o g n = Θ ( l o g ( n ! ) ) , n = Θ ( l o g 1 0 n ) , 2 l o g n , 2 2 l o g n , ∑ k = 1 n 1 k = Θ ( l o g n ) , l o g l o g n \begin{aligned} &\sum_{k=1}^n\frac{1}{k}为调和计数,刚好跟题目中的logn同阶\\ &log(n!)跟题目中的nlogn为同阶,具体的证明方法在第19题的第(8)题\\ &我们约定log为log_2,代入其实log_{10}也没有太大的区别,\\ &所以n=log_{10}10^n,在这题中n=\Theta(log10^n)\\ &接着当n \rarr \infin, ln(lnn)>2,那么n^{lnlnn}>n^2,而我们使用的不过是约定的log函数,所以n^{loglogn}>n^3\\ &设k=lnn,n^{lnlnn}=n^{lnk},取对数,ln(k)k,最终结果为k^k=n^{ln(k)},根据这个道理,\\ &可以发现n^{loglogn}=logn^{logn}\\ &结合以下的典型的时间复杂度,从低往高排序为:\\ &o(1)、o(log* n) 、o(loglogn)、o(logn)、o(\sqrt n)、o(n)、o(nlog*n)、o(nloglogn)、o(nlogn)、o(n^2)、o(n^3)、o(n^c)、o(2^n)\\ &因此本题的答案为:\\ &n!,2^{2n},n2^n,(logn)^{logn}=n^{loglogn},n^3,nlogn=\Theta(log(n!)),n=\Theta(log10^n),2^{log\sqrt n},2^{\sqrt{2logn}},\sum_{k=1}^n\frac{1}{k}=\Theta(logn),loglogn\\ \end{aligned} k=1nk1,lognlog(n!)nlogn19(8)loglog2,log10,n=log1010nn=Θ(log10n)n,ln(lnn)>2,nlnlnn>n2,使lognloglogn>n3k=lnnnlnlnn=nlnk,ln(k)kkk=nln(k),nloglogn=lognlogn:o(1)o(logn)o(loglogn)o(logn)o(n )o(n)o(nlogn)o(nloglogn)o(nlogn)o(n2)o(n3)o(nc)o(2n):n!,22n,n2n(logn)logn=nloglogn,n3,nlogn=Θ(log(n!)),n=Θ(log10n),2logn ,22logn ,k=1nk1=Θ(logn),loglogn

1.19 求解以下的递推方程:

( 1 ) { T ( n ) = T ( n − 1 ) + n 2 T ( 1 ) = 1 (1) \begin{cases} T(n)=T(n-1)+n^2 \\ T(1)=1 \end{cases} (1){T(n)=T(n1)+n2T(1)=1

这题使用迭代法就可以了。
T ( n ) = T ( n − 1 ) + n 2 = [ T ( n − 2 ) + ( n − 1 ) 2 ] + n 2 = [ T ( n − 3 ) + ( n − 2 ) 2 ] + ( n − 1 ) 2 + n 2 = … = T ( 1 ) + 2 2 + 3 2 + ⋯ + ( n − 1 ) 2 + n 2 = 1 + 2 2 + 3 2 + ⋯ + ( n − 1 ) 2 + n 2 设 S = 1 2 + 2 2 + 3 2 + ⋯ + ( n − 1 ) 2 + n 2 ∵ ( n + 1 ) 3 − n 3 = 3 n 2 + 3 n + 1 ∴ n 3 − ( n − 1 ) 3 = 3 ( n − 1 ) 2 + 3 ( n − 1 ) + 1 ∴ ( n − 1 ) 3 − ( n − 2 ) 3 = 3 ( n − 2 ) 2 + 3 ( n − 2 ) + 1 … ∴ 3 3 − 2 3 = 3 × 2 2 + 3 × 2 + 1 ∴ 2 3 − 1 3 = 3 × 1 2 + 3 × 1 + 1 把 上 面 n 个 式 子 相 加 可 得 , ( n + 1 ) 3 − 1 = 3 ( 1 2 + 2 2 + ⋯ + n 2 ) + 3 ( 1 + 2 + ⋯ + n ) + n ∴ ( n + 1 ) 3 − 1 = 3 S + 3 n ( n + 1 ) 2 + n ∴ S = n ( n + 1 ) ( 2 n + 1 ) 6 综 上 所 述 , 这 题 的 结 果 为 n ( n + 1 ) ( 2 n + 1 ) 6 = Θ ( n 3 ) \begin{aligned} T(n)&=T(n-1)+n^2 \\ &=[T(n-2)+(n-1)^2]+n^2 \\ &=[T(n-3)+(n-2)^2]+(n-1)^2+n^2 \\ &=\dots \\ &=T(1)+2^2+3^2+\dots+(n-1)^2+n^2 \\ &=1+2^2+3^2+\dots+(n-1)^2+n^2 \\ &设S=1^2+2^2+3^2+\dots+(n-1)^2+n^2\\ &\because (n+1)^3-n^3=3n^2+3n+1\\ &\therefore n^3-(n-1)^3=3(n-1)^2+3(n-1)+1\\ &\therefore (n-1)^3-(n-2)^3=3(n-2)^2+3(n-2)+1\\ & \dots \\ &\therefore 3^3-2^3=3\times 2^2 +3\times 2 +1\\ &\therefore 2^3-1^3=3\times 1^2 +3\times 1 +1\\ &把上面n个式子相加可得,\\ &(n+1)^3-1=3(1^2+2^2+\dots+n^2)+3(1+2+\dots+n)+n\\ &\therefore (n+1)^3-1=3S+\frac{3n(n+1)}{2}+n\\ &\therefore S=\frac{n(n+1)(2n+1)}{6}\\ &综上所述,这题的结果为\frac{n(n+1)(2n+1)}{6}=\Theta(n^3)\\ \end{aligned} T(n)=T(n1)+n2=[T(n2)+(n1)2]+n2=[T(n3)+(n2)2]+(n1)2+n2==T(1)+22+32++(n1)2+n2=1+22+32++(n1)2+n2S=12+22+32++(n1)2+n2(n+1)3n3=3n2+3n+1n3(n1)3=3(n1)2+3(n1)+1(n1)3(n2)3=3(n2)2+3(n2)+13323=3×22+3×2+12313=3×12+3×1+1n,(n+1)31=3(12+22++n2)+3(1+2++n)+n(n+1)31=3S+23n(n+1)+nS=6n(n+1)(2n+1)6n(n+1)(2n+1)=Θ(n3)

( 2 ) { T ( n ) = 9 T ( n 3 ) + n T ( 1 ) = 1 (2) \begin{cases} T(n)=9T(\frac{n}{3})+n \\ T(1)=1 \end{cases} (2){T(n)=9T(3n)+nT(1)=1

凭感觉,这题很明显用迭代法并不好看,可以选择递归树或主定理,这里我选用主定理,另外使用主定理需要验证。

a = 9 , b = 3 , f ( n ) = n n l o g 3 9 = n 2 , f ( n ) = O ( n l o g 3 9 − 1 ) 而 我 们 可 以 知 道 n 2 = n 1 + 1 > n 1 这 种 情 况 符 合 主 定 理 的 内 容 的 第 一 种 情 况 , 如 下 : 设 a ≥ 1 , b > 1 为 常 数 , f ( n ) 为 函 数 , T ( n ) 为 非 负 整 数 , 且 T ( n ) = a T ( n b ) + f ( n ) , 则 1. 若 f ( n ) = O ( n l o g b a − ϵ ) , ϵ > 0 , 那 么 T ( n ) = Θ ( n l o g b a ) 其 中 ϵ = 1 , 结 果 T ( n ) = Θ ( n 2 ) \begin{aligned} &a=9,b=3,f(n)=n\\ &n^{log_39}=n^2,f(n)=O(n^{log_39-1})\\ &而我们可以知道n^2=n^{1+1}>n^1这种情况\\ &符合主定理的内容的第一种情况,如下:\\ &设a\geq 1,b>1为常数,f(n)为函数,T(n)为非负整数,且T(n)=aT(\frac{n}{b})+f(n),则\\ &1. 若f(n)=O(n^{log_ba-\epsilon}),\epsilon>0,那么T(n)=\Theta(n^{log_ba})\\ \\ &其中\epsilon =1,结果T(n)=\Theta(n^2)\\ \end{aligned} a=9,b=3,f(n)=nnlog39=n2,f(n)=O(nlog391)n2=n1+1>n1:a1,b>1f(n),T(n)T(n)=aT(bn)+f(n),1.f(n)=O(nlogbaϵ),ϵ>0,T(n)=Θ(nlogba)ϵ=1T(n)=Θ(n2)

( 3 ) { T ( n ) = T ( n 2 ) + T ( n 4 ) + c n , c为常数 T ( 1 ) = 1 (3) \begin{cases} T(n)=T(\frac{n}{2})+T(\frac{n}{4})+cn \text{, c为常数}\\ T(1)=1 \end{cases} (3){T(n)=T(2n)+T(4n)+cn, c为常数T(1)=1

这题根据我丰富的课堂看题经验,使用主定理验证的话,容易翻车,所以我选递归树。

请添加图片描述
T ( n ) = c n + 3 c n 4 + ( 3 4 ) 2 c n + ⋯ = Θ ( n ) \begin{aligned} &T(n)=cn+\frac{3cn}{4}+(\frac{3}{4})^2cn+\dots=\Theta(n)\\ \end{aligned} T(n)=cn+43cn+(43)2cn+=Θ(n)

( 4 ) { T ( n ) = T ( n − 1 ) + l o g 3 n T ( 1 ) = 1 (4) \begin{cases} T(n)=T(n-1)+log3^n \\ T(1)=1 \end{cases} (4){T(n)=T(n1)+log3nT(1)=1

这题直接使用迭代法求就行了。
首 先 把 l o g 3 n 变 成 n l o g 3 T ( n ) = n l o g 3 + ( n − 1 ) l o g 3 + ⋯ + 2 l o g 3 + T ( 1 ) = [ n + ( n − 1 ) + ⋯ + 2 ] l o g 3 + 1 = [ ( n − 1 ) ( n + 2 ) 2 ] l o g 3 + 1 = Θ ( n 2 ) \begin{aligned} 首先把&log3^n变成nlog3\\ T(n) &= nlog3+(n-1)log3+ \dots +2log3+T(1) \\ &=[n+(n-1)+\dots+2]log3+1\\ &=[\frac{(n-1)(n+2)}{2}]log3+1\\ &=\Theta(n^2)\\ \end{aligned} T(n)log3nnlog3=nlog3+(n1)log3++2log3+T(1)=[n+(n1)++2]log3+1=[2(n1)(n+2)]log3+1=Θ(n2)

( 5 ) { T ( n ) = 5 T ( n 2 ) + ( n l o g n ) 2 T ( 1 ) = 1 (5) \begin{cases} T(n)=5T(\frac{n}{2})+(nlogn)^2 \\ T(1)=1 \end{cases} (5){T(n)=5T(2n)+(nlogn)2T(1)=1
使用主定理会好点。
a = 5 , b = 2 , f ( n ) = ( n l o g n ) 2 = O ( n l o g 2 5 − ϵ ) ∵ n l o g 2 5 > f ( n ) 相 当 于 主 定 理 的 情 况 一 T ( n ) = Θ ( n l o g 2 5 ) \begin{aligned} &a=5,b=2,f(n)=(nlogn)^2=O(n^{log_25-\epsilon})\\ &\because n^{log_25}>f(n)\\ &相当于主定理的情况一\\ &T(n)=\Theta(n^{log_25})\\ \end{aligned} a=5,b=2,f(n)=(nlogn)2=O(nlog25ϵ)nlog25>f(n)T(n)=Θ(nlog25)

( 6 ) { T ( n ) = 2 T ( n 2 ) + n 2 l o g n T ( 1 ) = 1 (6) \begin{cases} T(n)=2T(\frac{n}{2})+n^2logn \\ T(1)=1 \end{cases} (6){T(n)=2T(2n)+n2lognT(1)=1

这题使用主定理。
a = 2 , b = 2 , f ( n ) = n 2 l o g n n 2 l o g n = Ω ( n l o g 2 2 + ϵ ) 要 使 a f ( n b ) ≤ c f ( n ) 成 立 , 代 入 f ( n ) = n l o g n , 可 得 2 ( n 2 ) 2 l o g ( n 2 ) = n 2 2 ( l o g n − 1 ) ≤ n 2 2 l o g n ≤ c n 2 l o g n 只 要 c ≥ 3 4 , 上 式 不 等 式 对 所 有 充 分 大 的 n 成 立 , 因 此 有 T ( n ) = Θ ( f ( n ) ) = Θ ( n 2 l o g n ) \begin{aligned} &a=2,b=2,f(n)=n^2logn\\ &n^2logn=\Omega(n^{log_22+\epsilon})\\ &要使af(\frac{n}{b})\leq cf(n)成立,代入f(n)=nlogn,可得\\ &2(\frac{n}{2})^2log(\frac{n}{2})=\frac{n^2}{2}(logn-1)\\ &\leq\frac{n^2}{2}logn\\ &\leq cn^2logn\\ &只要c\geq\frac{3}{4},上式不等式对所有充分大的n成立,\\ &因此有T(n)=\Theta(f(n))=\Theta(n^2logn)\\ \end{aligned} a=2,b=2,f(n)=n2lognn2logn=Ω(nlog22+ϵ)使af(bn)cf(n)f(n)=nlogn2(2n)2log(2n)=2n2(logn1)2n2logncn2lognc43,n,T(n)=Θ(f(n))=Θ(n2logn)

( 7 ) { T ( n ) = T ( n − 1 ) + 1 n T ( 1 ) = 1 (7) \begin{cases} T(n)=T(n-1)+\frac{1}{n} \\ T(1)=1 \end{cases} (7){T(n)=T(n1)+n1T(1)=1

这题是应用迭代法就可以了,跟第一题很像。
T ( n ) = T ( n − 1 ) + 1 n = … = 1 n + 1 n − 1 + ⋯ + 1 2 + T ( 1 ) = 1 1 + 1 2 + ⋯ + 1 n 很 明 显 这 是 调 和 级 数 ∑ k = 1 n 1 k = l n ( n ) + O ( 1 ) = Θ ( l o g n ) \begin{aligned} T(n)&=T(n-1)+\frac{1}{n}\\ &=\dots\\ &=\frac{1}{n}+\frac{1}{n-1}+\dots+\frac{1}{2}+T(1)\\ &=\frac{1}{1}+\frac{1}{2}+\dots+\frac{1}{n}\\ 很明显&这是调和级数\\ &\sum_{k=1}^n\frac{1}{k}=ln(n)+O(1)=\Theta(logn)\\ \end{aligned} T(n)=T(n1)+n1==n1+n11++21+T(1)=11+21++n1k=1nk1=ln(n)+O(1)=Θ(logn)

( 8 ) T ( n ) = T ( n − 1 ) + l o g n ,估计T(n)的阶 (8) \begin{aligned} T(n)=T(n-1)+logn \text{,估计T(n)的阶} \\ \end{aligned} (8)T(n)=T(n1)+logn,估计T(n)的阶
这题使用迭代法去求。
T ( n ) = l o g n + l o g ( n − 1 ) + ⋯ + l o g 2 + T ( 1 ) = l o g ( n ! ) + T ( 1 ) 题 目 的 问 题 变 成 了 l o g ( n ! ) 到 底 跟 什 么 同 阶 或 有 什 么 低 阶 或 高 阶 的 函 数 。 使 用 放 大 法 : l o g ( n ! ) = ∑ k = 1 n l o g ( k ) ≤ ∑ k = 1 n l o g ( n ) = l o g ( n ) + l o g ( n ) + ⋯ + l o g ( n ) = n l o g ( n ) = O ( n l o g n ) ∵ n ! ≥ ( n 2 ) n 2 ∴ l o g ( n ! ) ≥ l o g ( n 2 ) n 2 = n 2 l o g ( n 2 ) = n 2 l o g n − n 2 l o g 2 当 n ≥ 4 时 : n 2 l o g 2 = 1 4 l o g 4 ≤ 1 4 n l o g n 有 : l o g ( n ! ) ≥ n 2 l o g n − n 2 l o g 2 ≥ n 2 − 1 4 n l o g n = 1 4 n l o g n = Ω ( n l o g n ) ∴ l o g ( n ! ) = Θ ( n l o g n ) \begin{aligned} T(n)&=logn+log(n-1)+\dots+log2+T(1)\\ &=log(n!)+T(1)\\ &题目的问题变成了log(n!)到底跟什么同阶或有什么低阶或高阶的函数。\\ &使用放大法:\\ log(n!)&=\sum_{k=1}^nlog(k)\\ &\leq\sum_{k=1}^nlog(n)\\ &=log(n)+log(n)+\dots+log(n)\\ &=nlog(n)\\ &=O(nlogn)\\ \because n!\geq&(\frac{n}{2})^{\frac{n}{2}}\\ \therefore log(n!)&\geq log(\frac{n}{2})^{\frac{n}{2}}\\ &=\frac{n}{2}log(\frac{n}{2})\\ &=\frac{n}{2}logn-\frac{n}{2}log2\\ 当n\geq&4时:\\ &\frac{n}{2}log2=\frac{1}{4}log4\leq \frac{1}{4}nlogn\\ 有:&\\ log(n!)\geq&\frac{n}{2}logn-\frac{n}{2}log2\\ &\geq \frac{n}{2}-\frac{1}{4}nlogn\\ &=\frac{1}{4}nlogn\\ &=\Omega(nlogn)\\ &\therefore log(n!)=\Theta(nlogn)\\ \end{aligned} T(n)log(n!)n!log(n!)n:log(n!)=logn+log(n1)++log2+T(1)=log(n!)+T(1)log(n!)使:=k=1nlog(k)k=1nlog(n)=log(n)+log(n)++log(n)=nlog(n)=O(nlogn)(2n)2nlog(2n)2n=2nlog(2n)=2nlogn2nlog24:2nlog2=41log441nlogn2nlogn2nlog22n41nlogn=41nlogn=Ω(nlogn)log(n!)=Θ(nlogn)

参考链接:

https://zhuanlan.zhihu.com/p/415253994

### 关于算法设计分析课程中屈婉玲相关课后习题解答资源 对于寻求《算法设计分析》由屈婉玲编著教材中的课后习题解答资源,网络上存在多种途径可以获取帮助和支持。部分高校网站会提供该书对应节的练习题目解析文档供学生下载学习[^1]。 另外,在线教育平台如慕课网、中国大学MOOC等也可能有基于此教材开设的相关课程页面内附带作业讲解视频或PDF文件链接[^2]。这些资料通常经过授权发布,质量较高且具有权威性。 此外,学术社交平台上也有不少教师和学者分享自己整理的教学笔记以及针对特定难撰写的论文片段,其中可能涵盖了对某些经典习题的独特见解[^3]。值得注意的是,在利用上述渠道时应确保遵循版权规定合理使用相关内容。 最后提醒读者注意甄别信息来源的真实性可靠性,优先选择官方出版物推荐的学习辅助材料作为主要参考资料。 ```python # 示例:如何在网络环境中查找指定书籍的配套教学资源 import requests from bs4 import BeautifulSoup def search_resource(book_name): url = f"https://www.example.com/search?q={book_name}" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') resources = [] for item in soup.find_all('a', href=True): # 假设超链接中含有资源位置 title = item.string.strip() link = item['href'] if "课后习题" in title or "答案" in title: resources.append({"title": title, "link": link}) return resources ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值