算法分析与设计之作业习题答案

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

算法分析与设计作业答案

第一章绪论

一填空

算法就是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算

2..算法具备五个重要特性:确定性、可实现性、数据输入、数据输出、有穷性

3. 要制定一个算法,一般要经过设计、确认、分析、编码、调试等阶段。

4. 算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。

5.一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上。时间和空间资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。

7.算法的时间复杂性函数用T(n)表示,它是问题的大小n 的函数。

8. n在不同的问题中有不同的表现形式。指出下列问题中n的计量。

1) 在数组中找值为c的分量,n表示数组中分量的个数

2) 两个矩阵相乘, n表示矩阵的阶

3) 一个数表的排序,n表示数组中元数的个数

4) 遍历一棵二叉树,n表示树中的结点数

9.最坏情况下的时间复杂性定义:W(n) = max{ T(n,I) } , I∈Dn

10. 平均情况下的时间复杂性定义:A(n)=∑P( I )T(n,I) I∈Dn

11.最具有可操作性和实际价值的是最坏情况下的时间复杂性定义复杂性。教材中没有特殊说明时,T(n)一般指的就是最坏情况下的时间复杂性定义。

12.f(n)=O(g(n))表示

当且仅当存在正的常数C和N0,使得对于所有的n >=N0,有f(n) <=cg(n) 。

13. 写出下列f(n)的渐进性态:

1) f(n)=C0,为常数:f(n)= O( 1 )。

2) f(n)= 3n+2:f(n)= O( n )。

3) f(n)= 6×2n +n :f(n)= O( 2n )。 4) f(n)= nlog n :f(n)= O( nlog n )。

二 分析算法复杂性

1. 已知不重复且已经按从小到大排好的m 个整数的数组A[L .m](为简单起见,设m =2k ,k 是一个确定的非负整数)。对于给定的整数c ,要求寻找一个下标i ,使得A[i]=c,若找不到,则返回一个0。算法如下:

procedure search( c) /*c 是整型数 */ { i ←0; j ←l;

while A[j]

return i; }

分析最坏的情况下即在A 中找不到等于c 的分量情况下的时间复杂性函数。

答:如果C 不在A 中需要比较n 次,时间复杂性函数为 T(n)=n

2.冒泡排序算法的基本运算如下: for i ←1 to n-1 do

for j ←1 to n-i do

if a[j]

解:排序算法的基本运算步为元素比较,冒泡排序算法的时间复杂性就是求比较次数与n 的关系。

1)设比较一次花时间1

2)内循环次数为:n-i 次,(i=1,…n ),花时间为:∑-=-=

i

n j i n 1

)

(1

3)外循环次数为:n-1,花时间为:)

1(2

)()

(1

-=

-=

=n n i n n T n

i

第二章 分 治 法

一. 回答问题

1.分治法的基本思想是什么?

答:将n 个输入分成k 个不同子集合,得到k 个不同的可独立求解的子问

题,其中1

2. 写出分治法一般方法的递归过程。 DanC (p,q)

global n ,A[1:n]; integer m,p,q; // 1≤p ≤q ≤n if Small(p,q) then return G(p,q); else m=Divide(p,q); // p ≤m

return Combine(DanC(p,m),DanC(m+1,q)); endif end DanC

2.假定在A(1:9)中顺序存放着以下九个元素:-15,-6,0,7,9,23,54,82,101,用二分检索算法检索x=101是否在A 中,需要比较几次? 解:

第一次执行循环体:mid=5,A[mid] < x 需要在A[5]~A[9]中检索; 第二次执行循环体:mid=7,A[mid] < x 需要在A[8]~A[9]中检索; 第三次执行循环体:mid=8,A[mid] < x 需要在A[9]~A[9]中检索; 第四次执行循环体:mid=9,A[mid] = x 返回 9; 需要比较4次。

二.分析时间复杂性

1. 递归求取最大和最小元素算法 MAXMIN 的时间复杂性。 解:

设算法的元素比较次数为T(n),mid 将数组分成大小为⎣⎦⎣⎦2/2/n n 和的两部分,

递归调用原过程分别在两部分找max1、min1和max2、min2,分别花时间为

⎣⎦⎣⎦)2/()2/(n T n T 和,比较max1、max2和min1、min2找出max 、min 所花时间为2。因

此递归方程为:

⎣⎦⎡⎤⎪⎩

⎨⎧++=2

)2/()2/(1

)(n T n T n T 。

当n 是2的幂时,即对于某个正整数k ,n :2k ,有⎣⎦⎣⎦2/2/n n 和 T(n):2T(n/2)+2

=2(2T(n/4)+2)+2 =4T(n/4)+4+2 ……

2T(2)2

1

11

k ∑

-≤≤++

=k i i

=2k-1+2k -2 =3n/2-2

相关文档
最新文档