算法分析习题参考标准答案

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

算法分析习题参考标准答案

————————————————————————————————作者:————————————————————————————————日期:

习题一复杂性分析初步

1. 试确定下述程序的执行步数,该函数实现一个m×n矩阵与一个n×p矩

阵之间的乘法:

矩阵乘法运算

template

void Mult(T **a, T **b, int m, int n, int p)

{//m×n矩阵a与n×p矩阵b相成得到m×p矩阵c

for(int i=0; i

for(int j=0; j

T sum=0;

for(int k=0; k

Sum+=a[i][k]*b[k][j];

C[i][j]=sum;

}

}

语句 s/e 频率总步数template

void Mult(T **a, T **b, int m, int n, int p)

0 0 0

{

for(int i=0; i

1 m+1 m+1

for(int j=0; j

频率是指该语句总的执行次数。

2.函数MinMax用来查找数组a[0:n-1]中的最大元素和最小元素,以下给

出两个程序。令n为实例特征。试问:在各个程序中,a中元素之间的比较次数

在最坏情况下各是多少?

找最大最小元素 方法一 template

bool MinMax(T a[], int n, int& Min, int& Max) {//寻找a[0:n-1]中的最小元素与最大元素 //如果数组中的元素数目小于1,则还回false if(n<1) return false; Min=Max=0; //初始化 for(int i=1; ia[i]) Min=i; if(a[Max]

最好,最坏,平均比较次数都是 2*(n-1)

找最大最小元素 方法二 template

bool MinMax(T a[], int n, int& Min, int& Max) {//寻找a[0:n-1]中的最小元素与最大元素 //如果数组中的元素数目小于1,则还回false if(n<1) rreturn false; Min=Max=0; //初始化 for(int i=1; ia[i]) Min=i; else if(a[Max]

最坏2*(n-1), 最好 n-1, 平均

2

)

1(3-n 3.证明以下不等式不成立:

1).);(9102n O n =+ 2).)(log 22n n n Θ=;

4.证明:当且仅当0)(/)(lim =→∞

n g n f n 时,))(()(n g o n f =。

5.下面那些规则是正确的?为什么?

1).{}))(/)(()(/)())(()()),(()(n G n F O n g n f n G O n g n F O n f =⇒==;错 2).{}))(/)(()(/)())(()()),(()(n G n F n g n f n G O n g n F O n f Ω=⇒==;错 3).{}))(/)(()(/)())(()()),(()(n G n F n g n f n G O n g n F O n f Θ=⇒==;错 4).{}))(/)(()(/)())(()()),(()(n G n F n g n f n G n g n F n f Ω=⇒Ω=Ω=;错 5).{}))(/)(()(/)())(()()),(()(n G n F n g n f n G n g n F n f O =⇒Ω=Ω=。错 6). {}))(/)(()(/)())(()()),(()(n G n F n g n f n G n g n F n f Θ=⇒Θ=Θ= 对 6. 按照渐进阶从低到高的顺序排列以下表达式: !,,20,3,log ,43/22n n n n n n

顺序:

!3420log 23/2n n n n n n

<<<<<

7. 1) 假设某算法在输入规模是n 时为n n T 2*3)(=. 在某台计算机上实现并完成该算法的时间是t 秒.现有另一台计算机,其运行速度为第一台的64倍,

那么,在这台计算机上用同一算法在t 秒内能解决规模为多大的问题?

解:关系式为 总时间每步运行所需的时间

时间复杂度=*, t

t n T =0*)(

在新机器上由于运行速度提高为64

t ,

设在新机器上能解决的规模为m ,则

00*2*364

*2*3t t t n

m

==

解得

6+=n m

规模

时间复杂度

运行速度(时间/每步) 总时间

n

n n T 2*3)(=

t

t

2) 若上述算法改进后的新算法的计算为2)(n n T =, 则在新机器上用t 秒时间能解决输入规模为多大的问题?

设在新机器上用t 秒时间能解决的输入规模为m ,则

00

2*2*364

*

t t t m n ==, 解得

n

m 238⋅=

3)若进一步改进算法,最新的算法的时间复杂度为 8)(=n T ,其余条件不变,在新机器上运行,在t 秒内能够解决输入规模为多大的问题?

00*2*3*)(t t t n T n ==

可解决的最大时间复杂度为n n T 2*3)

(=

因为8)(=n T 为常数不随输入规模n 变化,所以任意规模的n 都可在t 秒内解决。

8. Fibonacci 数有递推关系:

⎪⎩

⎨⎧>-+-===1),2()1(1,

10,

1)(n n F n F n n n F 试求出)(n F 的表达式。

解:方法一:

当1>n 时,由递推公式)2()1()(-+-=n F n F n F 得 特征方程为

12+=x x

解得

2511+=

x ,2

5

12-=x 则可设

n n x c x c n F 2211)(+=

相关文档
最新文档