算法设计与分析-课后习题集答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章

3. 最大公约数为1。快1414倍。

程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环)

8.(1)画线语句的执行次数为

log n ⎡⎤⎢⎥。(log )n O 。

(2)画线语句的执行次数为

111

(1)(21)16

j

n

i

i j k n n n ===++=

∑∑∑。3

()n O 。

(3)画线语句的执行次数为

。O 。

(4)当n 为奇数时画线语句的执行次数为

(1)(1)

4n n +-, 当n 为偶数时画线语句的执行次数为 (2)4

n n +。2

()n O 。

10.(1) 当 1n ≥ 时,22

5825n n n -+≤,所以,可选 5c =,01n =。对于0n n ≥,

22()5825f n n n n =-+≤,所以,22582()-+=O n n n 。

(2) 当 8n ≥ 时,2222

582524n 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 ≤-+≤,所

以22

582()-+=Θn n n 。

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 。 (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 2

n 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)&&leftP[m]) left=m+1; else return S(P) } }

5-7. template

int SortableList::BSearch(const T&x,int left,int right) const { if (left<=right) { int m=left+(right-left+1)/3; if (xl[m]) return BSearch(x,m+1,right); else return m; } return -1; }

7.m=left+(right-left+1)/3

不能用:m=(left+right)/3 ,两者不同。

受对半搜索的影响:m=(left+right)/2和m=left+(right-left+1)/2是一样的 9.

证明:因为该算法在成功搜索的情况下,关键字之间的比较次数至少为log n ⎢⎥⎣⎦,至多为log 1n +⎢⎥⎣⎦。在不成功搜索的情况下,关键字之间的比较次数至少为log 1n +⎢⎥⎣⎦,至多为log 2n +⎢⎥⎣⎦。所以,算法的最

相关文档
最新文档