算法设计与分析C++语言描述(陈慧南版)课后答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章
15P
1-3. 最大公约数为1。快1414倍。
主要考虑循环次数,程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环)
若考虑其他语句,则没有这么多,可能就601倍。 第二章
32P
2-8.(1)画线语句的执行次数为log n ⎡⎤⎢
⎥。(log )n O 。划线语句的执行次数应该理解为一格整体。 (2)画线语句的执行次数为
111
(1)(2)16
j
n
i
i j k n n n ===++=
∑∑∑。3
()n O 。
(3)画线语句的执行次数为
。O 。
(4)当n 为奇数时画线语句的执行次数为
(1)(3)
4
n n ++, 当n 为偶数时画线语句的执行次数为 2(2)4
n +。2
()n O 。
2-10.(1) 当 1n ≥ 时,225825n n n -+≤,所以,可选 5c =,01n =。对于0n n ≥,
22()5825f n n n n =-+≤,所以,22582()n n n -+=O 。
(2) 当 8n ≥ 时,2222582524n n n n n -+≥-+≥,所以,可选 4c =,08n =。对于0n n ≥,
22()5824f n n n n =-+≥,所以,22582()n n n -+=Ω。
(3) 由(1)、(2)可知,取14c =,25c =,08n =,当0n n ≥时,有222
12582c n n n c n ≤-+≤,所以
22582()n n n -+=Θ。
2-11. (1) 当3n ≥时,3
log log n n n <<,所以()20log 21f n n n n =+<,3
()log 2g n n n n =+>。可
选 21
2
c =
,03n =。对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。注意:是f (n )和g (n )的关系。
(2) 当 4n ≥ 时,2
log log n n n <<,所以 2
2
()/log f n n n n =<,2
2
()log g n n n n =≥。可选 1c =,
04n =。对于 0n n ≥,2()()f n n cg n <≤,即 ()(())f n g n =O 。
(3)因为 log log(log )()(log )
n
n f n n n ==,()/log log 2n g n n n n ==。当 4n ≥ 时,log(log )
()n f n n
n =≥,()log 2n g n n n =<。所以,可选 1c =,04n =,对于0n n ≥,()()f n cg n ≥,即 ()(())f n g n =Ω。
第二章 2-17. 证明:设
2i n =,则 log i n =。
()22log 2n T n T n n ⎛⎫⎢⎥=+ ⎪⎢⎥⎣⎦⎝⎭2222log 2log 222n n n T n n ⎡⎤
⎛⎫⎢⎥⎛⎫=+⨯⨯+⎢⎥ ⎪ ⎪⎢⎥⎣⎦⎝⎭⎝⎭
⎣⎦
()2222log log22log 2n T n n n n ⎛⎫
⎢⎥=+-+ ⎪
⎢
⎥⎣⎦⎝⎭
22222log 22n T n n n ⎛⎫
⎢⎥=+⨯- ⎪⎢
⎥⎣⎦⎝⎭
2
322222log 22log 2222n n n T n n n ⎡⎤⎛⎫⎢⎥=+⨯⨯+⨯-⎢⎥ ⎪⎢
⎥⎣⎦⎝⎭
⎣⎦ ()3322log log422log 22n T n n n n n ⎛⎫
⎢⎥=+-+⨯- ⎪⎢
⎥⎣⎦⎝⎭
33232log 242n T n n n n ⎛⎫
⎢⎥=+⨯-- ⎪
⎢⎥⎣⎦⎝⎭
=
()22log 24212k k n T kn n n n n k ⎛⎫
⎢⎥=+----- ⎪⎢
⎥⎣⎦⎝⎭
()()()1
2221log 2422i T i n n n n n i -=+----
--
()()()1
242log log 121i n n n i i n -=⨯+---- ()
2222log 2log log 3log 2n n n n n n n n =+---+ 2
log log n n n n =+ 当
2n ≥ 时,()22log T n n n ≤。所以,()()2log T n n n =O 。
第五章
5-4. SolutionType DandC1(int left,int right) {
while(!Small(left,right)&&left { int m=Divide(left,right); if(x else if(x>P[m]) left=m+1; else return S(P) } } 5-7. template int SortableList if (left<=right) { int m=(right+left)/3; if (x } return -1; } 第五章 9. 4 2 6 3517 01234567 -10 证明:因为该算法在成功搜索的情况下,关键字之间的比较次数至少为log n ⎢⎥⎣⎦,至多为log 1n +⎢⎥⎣⎦。在