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

  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 表示每次执行该语句所要执行的程序步数。

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

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; i

if(a[Min]>a[i]) Min=i;

if(a[Max]

}

return true;

}

最好,最坏,平均比较次数都是 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; i

if(a[Min]>a[i]) Min=i;

else if(a[Max]

}

return true;

}

最坏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

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

00*2*364*2*3t t t n m

== 解得

6+=n m

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

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

002*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

512-=x 则可设

n n x c x c n F 2

211)(+=

相关文档
最新文档