中国科学院大学历年计算机算法作业和历年习题

  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; 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) return 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*)(

解:设在新机器上t 秒内能解决规模为m 的问题,时间复杂度变为m m T 2*3)(=,

由于新机器运行速度提高64倍,则运行速度变为64

t t =新, 由关系式,*)(0t t n T =t t m T =新*)(,得

t t n =0*2*3,

t t m =64

*

2*30

解得

6+=n m

2) 若上述算法改进后,新算法的计算复杂度为2)(n n T =, 则在新机器上用

t 秒时间能解决输入规模为多大的问题?

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

由于新复杂度 2)(N N T =新,新机器的运行速度为640t

t =新,

代入关系式t t N T =新新*)(,得

00

2*2*364

*

t t t N n ==, 解得

n

N 238⋅=

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

设可解决的最大时间复杂度为m ax T ,则

00

max *2*364

*t t t T n ==

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

=,(n 为原始的输入规模)。

因为max 8)(T n T <=,且)(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 得 特征方程为

相关文档
最新文档