中国科学院大学历年计算机算法作业和历年习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 最好,最坏,平均比较次数都是 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; i 最坏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 得 特征方程为