算法分析习题参考标准答案
- 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 频率总步数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; i 最好,最坏,平均比较次数都是 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 最坏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)(+=