ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:743.49KB ,
资源ID:1392407      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1392407.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法设计与分析习题.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法设计与分析习题.docx

1、算法设计与分析习题算法设计与分析习题第一章算法引论1、 算法的定义?答:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。通俗讲,算法:就是解决问题的方法或过程。2、 算法的特征?答:1)算法有零个或多个输入; )算法有一个或多个输出; 3)确定性 ; )有穷性3、 算法的描述方法有几种?答:自然语言、图形、伪代码、计算机程序设计语言4、 衡量算法的优劣从哪几个方面?答:(1) 算法实现所耗费的时间(时间复杂度); (2) 算法实现所所耗费的存储空间(空间复杂度); (3) 算法应易于理解,易于编码,易于调试等等。5、 时间复杂度、空间复杂度定义?答:指的是算法在运行过程中

2、所需要的资源(时间、空间)多少。6、时间复杂度计算: i=1; while(i=n) i=i*2; 答:语句执行次数1次, 语句执行次数f(n), 2f(n)=n,则f(n) 0) hanoi(n-1, a, c, b); move(a,b); hanoi(n-1, c, b, a); 兔子序列(fibonaci数列 ) 递归实现:Int F(int n) if(n=2) return 1; else return F(n-1)+ F(n-2); 上楼梯问题Int F(int n) if(n=1) return 1 if(n=2) return 2; else return F(n-1)+ F

3、(n-2); 整数划分问题问题描述:将正整数n表示成一系列正整数之和,n=n1+n1+n3+将最大加数不大于m的划分个数,记作q(n,m)。正整数n的划分数p(n)=q(n,n)。 可以建立q(n,m)的如下递归关系:递归算法:Int q( int n, int m)if(n1|m1) return 0;If(n=1)|(m=1) return 1;If (nm) return q(n,n);If(n=m) return q(n,m-1)+1;else return q(n,m-1)+q(n-m,m);(2) 蛮力法:百鸡百钱问题算法设计1:设x,y,z分别为公鸡、母鸡、小鸡的数量。 约束条件

4、: x+y+z=100 且 5*x+3*y+z/3=100main( ) int x,y,z;for(x=1;x=20;x=x+1) for(y=1;y=34;y=y+1) for(z=1;z=100;z=z+1) if(100=x+y+z and 100=5*x+3*y+z/3) print(the cock number is,x); print(the hen number is, y);print(the chick number is z);算法分析:以上算法需要枚举尝试20*34*100=68000次。算法的效率显然太低 算法设计2: 在公鸡(x)、母鸡(y)的数量确定后,小鸡的数

5、量 z就固定为100-x-y,无需再进行枚举了 。 此时约束条件只有一个: 5*x+3*y+z/3=100 main( ) int x,y,z;for(x=1;x=20;x=x+1) for(y=1;y=33;y=y+1) z=100-x-y; if(z mod 3=0 and 5*x+3*y+z/3=100)print(the cock number is,x); print(the hen number is, y);print(the chick number is z); 算法分析:以上算法只需要枚举尝试20*33=660次。实现时约束条件又限定Z能被3整除时,才会判断“5*x+3*y

6、+z/3=100”。这样省去了z不整除3时的算术计算和条件判断,进一步提高了算法的效率。(3) 倒推法:穿越沙漠问题desert( ) int dis,k,oil,k; / dis表示距终点的距离,k表示贮油点从后到前的序号 dis=500;k=1;oil=500; /初始化 while ( dis1000) print(“storepoint”,k,”distance”, 1000-dis,”oilquantity”,oil) /1000- dis则表示距起点的距离, k=k+1; /k表示储油点从后到前的序号 dis=dis+500/(2*k-1); oil= 500*k; print(“

7、storepoint”,k,”distance”,dis,”oilquantity”,oil); 第二章 分治算法1、分治算法基本思想是什么? 适合用分治算法解决的问题,一般具有几个特征? 分治算法基本步骤是什么?答:1) 基本思想: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。2) 特征: 该问题的规模缩小到一定的程度就可以容易解决; 该问题可以分解为若干个规模较小的相同子问题,即该问题具有最优子结构性质; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 4)利用该问题分解出子问题解可以合并为该问题解; 3)基本步骤: 分解、求

8、小问题解、合并2、改写二分查找算法:设a1n是一个已经排好序的数组,改写二分查找算法: 当搜索元素x不在数组中时,返回小于x的最大元素位置i,和大于x的最小元素位置j; (即返回x的左、右2个元素) 当搜索元素x在数组中时,i和j相同,均为x在数组中的位置。并计算其时间复杂度?答:、设计一个合并排序的算法?(分治法解) 并计算其时间复杂度?(要求写出递推公式,及其求解过程)答:void MergeSort (int A,int low,int high) int middle; if (lowhigh) middle=(low+high)/2; /取中点 MergeSort(A,low,mid

9、dle); MergeSort(A,middle+1,high); Merge(A,low,middle,high); /合并算法 void Merge(int A,int low,int middle,int high) /合并过程描述:int i,j,k; int *B=new inthigh-low+1;i=low; j=middle+1; k=low; while(i=middle&j=high) /两个子序列非空 if(Ai=Aj) Bk+=Ai+; else Bk+=Aj+; while (i=middle) Bk+=Ai+;/子序列Alow,middle非空,将A复制到Bwhil

10、e (j=high) Bk+=Aj+; /子序列Amiddle+1, high非空,将A复制到Bfor(i=low;i时,T(n)=2 T(n/2) + O(n) =2 (2T(n/22)+O(n/2) ) + O(n) =22T(n/22) + 2 O(n) =23T(n/23) + 3O(n) = =2x T(n/2x) + x*O(n)分解到最后只有2个元素可以求解,n/2x1, x=logn; 故 T(n)=n*T(1)+n*logn ,故时间复杂度记为:O(n * logn)、金块问题(求最大最小元问题)老板有一袋金块(共n块),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻

11、的一块。假设有一台比较重量的仪器,我们希望用最少的比较次数找出最重的金块。要求:)设计一算法求解该问题? (分治法解) )计算其时间复杂度?(要求写出递推公式,及其求解过程)答:递归求取最大和最小元素 maxmin (int i, int j ,float &fmax, float &fmin) int mid; float lmax, lmin, rmax, rmin;if (i=j) fmax= ai; fmin=ai; /只有1个元素 else if (i=j-1) /只有2个元素 if(airmax) fmax=lmax; /合并取大 else fmax=rmax; if(lminrmin) fmin=rmin; /合并取小 else fmin=lmin; 分析该算法时间复杂度:令T(n)为元素个数为n时所需比较次数(时间):当n=2时,查找查找最大最小元只需要1次比较,T(2)=1; 时间复杂度记为O(1)。当n2时, T(n)=2T(n/2) + 2 T(2) =4T(n/4) + 4 T(2) + 2 T(2) =8T(n/8) + 8 4 2 = =2x T(n/2x) + 2x +2x-1+8+4+2分解到最后只有2个元素可以求解,n/2x2, T(n)= 2x *1 + 2x +2x-1 + 22

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1