1习题一复杂性分析初步1.试确定下述程序的执行步数,该函数实现一个m×n矩阵与一个n×p矩阵之间的乘法:矩阵乘法运算templateclassTvoidMult(T**a,T**b,intm,intn,intp){//m×n矩阵a与n×p矩阵b相成得到m×p矩阵cfor(inti=0;im;i++)for(intj=0;jp;j++){Tsum=0;for(intk=0;kn;k++)Sum+=a[i][k]*b[k][j];C[i][j]=sum;}}其中s/e表示每次执行该语句所要执行的程序步数。频率是指该语句总的执行次数。2.函数MinMax用来查找数组a[0:n-1]中的最大元素和最小元素,以下给出两个程序。令n为实例特征。试问:在各个程序中,a中元素之间的比较次数在最坏情况下各是多少?语句s/e频率总步数templateclassTvoidMult(T**a,T**b,intm,intn,intp)000{for(inti=0;im;i++)1m+1m+1for(intj=0;jp;j++){1m*(p+1)m*p+mTsum=0;1m*pm*pfor(intk=0;kn;k++)1m*p*(n+1)m*p*n+m*pSum+=a[i][k]*b[k][j];1m*p*nm*p*nC[i][j]=sum;1m*pm*p}}总计2*m*p*n+4*m*p+2*m+12找最大最小元素方法一templateclassTboolMinMax(Ta[],intn,int&Min,int&Max){//寻找a[0:n-1]中的最小元素与最大元素//如果数组中的元素数目小于1,则还回falseif(n1)returnfalse;Min=Max=0;//初始化for(inti=1;in;i++){if(a[Min]a[i])Min=i;if(a[Max]a[i])Max=i;}returntrue;}最好,最坏,平均比较次数都是2*(n-1)找最大最小元素方法二templateclassTboolMinMax(Ta[],intn,int&Min,int&Max){//寻找a[0:n-1]中的最小元素与最大元素//如果数组中的元素数目小于1,则还回falseif(n1)returnfalse;Min=Max=0;//初始化for(inti=1;in;i++){if(a[Min]a[i])Min=i;elseif(a[Max]a[i])Max=i;}returntrue;}最坏2*(n-1),最好n-1,平均2)1(3n3.证明以下不等式不成立:1).);(9102nOn2).)(log22nnn;4.证明:当且仅当0)(/)(limngnfn时,))(()(ngonf。35.下面那些规则是正确的?为什么?1).))(/)(()(/)())(()()),(()(nGnFOngnfnGOngnFOnf;错2).))(/)(()(/)())(()()),(()(nGnFngnfnGOngnFOnf;错3).))(/)(()(/)())(()()),(()(nGnFngnfnGOngnFOnf;错4).))(/)(()(/)())(()()),(()(nGnFngnfnGngnFnf;错5).))(/)(()(/)())(()()),(()(nGnFngnfnGngnFnf。错6).))(/)(()(/)())(()()),(()(nGnFngnfnGngnFnf对6.按照渐进阶从低到高的顺序排列以下表达式:!,,20,3,log,43/22nnnnnn顺序:!3420log23/2nnnnnn7.1)假设某算法在输入规模是n时为nnT2*3)(.在某台计算机上实现并完成该算法的时间是t秒.现有另一台计算机,其运行速度为第一台的64倍,那么,在这台计算机上用同一算法在t秒内能解决规模为多大的问题?关系式为时间复杂度(计算步数)*运行速度(时间/每步)=运行所需时间,即ttnT0*)(解:设在新机器上t秒内能解决规模为m的问题,时间复杂度变为mmT2*3)(,由于新机器运行速度提高64倍,则运行速度变为640tt新,由关系式,*)(0ttnTttmT新*)(,得ttn0*2*3,ttm64*2*30解得6nm规模时间复杂度(步数)原运行速度(时间/每步)总时间nnnT2*3)(0tt42)若上述算法改进后,新算法的计算复杂度为2)(nnT,则在新机器上用t秒时间能解决输入规模为多大的问题?设在新机器上用t秒时间能解决输入规模为N的问题,则由于新复杂度2)(NNT新,新机器的运行速度为640tt新,代入关系式ttNT新新*)(,得002*2*364*tttNn,解得nN2383)若进一步改进算法,最新的算法的时间复杂度为8)(nT,其余条件不变,在新机器上运行,在t秒内能够解决输入规模为多大的问题?设可解决的最大时间复杂度为maxT,则00max*2*364*tttTn可解决的最大时间复杂度为nT2*192max,(n为原始的输入规模)。因为max8)(TnT,且)(nT为常数不随输入规模n变化,所以任意规模的n都可在t秒内解决。8.Fibonacci数有递推关系:1),2()1(1,10,1)(nnFnFnnnF试求出)(nF的表达式。解:方法一:当1n时,由递推公式)2()1()(nFnFnF得特征方程为12xx5解得2511x,2512x则可设nnxcxcnF2211)(由2)2(F,3)3(F,解得52511c,52512c故])251()251[(51)(11nnnF,当1,0n时,带入验证亦成立。故])251()251[(51)(11nnnF方法二:也可直接推导)2()1()(nFnFnF可得)][211nnnnaaaa可得251,,设1nnnaab,则nb为等比数列,先求出nb,然后代入即可求得na。