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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法作业和期末复习题.docx

1、算法作业和期末复习题1给出递推公式x(n)=x(n-1)+n,x(0)=0对应的通项公式计算过程?解: X(n)-X(n-1)=n X(n-1)-X(n-2)=n-1 X(1)-X(0)=1 X(n)-X(0)=(n+1)n2 X(n)= (n+1)n22、之间的区别与联系描述增长率的上限 上限值越低,结果越有价值。用来表示算法的精确阶描述增长率的下限 下限值越高越有价值。联系: 只要当考察问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶,通常使用3种等渐近符号。3什么是数据结构,什么是算法,两者有什么关系?数据结构:是指相互之间存在一定关系的数据元素的集合。算法:是对特定问题求解步

2、骤的一种描述是指令的有限序列。程序=算法+数据结构5举例说明分治法、动态规划法和贪心法适用范围,及三者之间的区别。 答:分治法:适用于原问题可划分为子问题时如汉诺塔问题(循环赛,最近对,棋盘覆盖等)动态规划:当原问题可分解为子问题并且问题重叠并且具有最优子结构时可用动态规划法,如TSP问题(多端最短路径问题,0/1背包问题等)贪心:当一个问题具有最优子结构性质且具有贪心选择性时可用贪心算法,如最小生成树问题(背包问题,活动安排问题等)在分治法的基础上,满足最优子结构性质才能用动态规划,在动态规划可行的基础上满足贪心选择性才能用贪心。6简述分治法、贪心法、蛮力法、回溯法、减治法的设计思想。分治:

3、建一个难以直接解决的大问题划分成一些规模较小的子问题,以便各个击破,分而治之。贪心把一个问题分解为一系列较简单的局部最优选择,每一步选择都是对当前解的一个扩展,直到获得问题的完整解。(指根据当前已有信息做出选择,不从整体最优考虑,只选择局部最优蛮力:采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。回溯:只构造可能解的一部分,然后评估这个部分解,如果这个部分解有可能导致一个完全解,则对其进一步构造,否则,就不必继续构造这个解了。减治:把一个大问题划分为若干子问题,但些子问题不需要分别求解,只需求解其中那个一个子问题。7举例说明分治法和减治法的在设计上区别与联系。分治法是将一个

4、大问题分解为若干子问题分别求解,而减治法是只求解部分子问题。在排序问题中,分治法用用快速排序,以轴值为基准划分序列,再求每个子集递归序列,最后合并并操作。减治法则用选择问题算法,先选定轴值并划分,比轴值小的在左侧,比轴值大的在右侧,选择问题的查找区间减少一半,划分后只需处理一个子序列。8简述什么是欧拉回路,TSP问题,哈密顿回路问题。欧拉回路:图G的一个回路,若它恰它通过G 中每条边一次,则称该回路为欧拉回路。TSP:从图的一个顶点出发,各个定点只能经历并访问一次,最后回到原点且使路径最短。哈密顿回路:从一个城市出发,经过每一个城市恰好一次,然后回到出发城市。1给出应用动态规划法设计算法的一般

5、步骤,并用动态规划法求下面多段图中从顶点0到顶点15的最短路径,写出求解过程。解:d(0,9)=minc01 +d(1,9) , c02+d(2,9) , c03 +d(3,9) d(1,9)=minc14 +d(4,9) , c15+d(5,9) d(2,9)=minc24 +d(4,9) , c25+d(5,9) , c26 +d(6,9) d(3,9)=minc35 +d(5,9) , c36+d(6,9) d(4,9)=minc47 +d(7,9) , c48+d(8,9) d(5,9)=minc57 +d(7,9) , c58+d(8,9) d(0,9)=minc67 +d(7,9)

6、 , c68+d(8,9) d(7,9)= c79 =7 (79)d(8,9)= c89 =3(89)d(6,9)=min6+7,5+3=8(68)d(5,9)= min8+7,6+3=9(58)d(4,9)= min5+7,6+3=9(48)d(3,9)=min4+9,7+8=13(35)d(2,9)=min6+9,7+9,8+8=15(24)d(1,9)=min9+9,8+9=17(15)d(0,9)=min4+17,2+15,3+13=16(03)最后得最短路径为03589 长度为16。 2有4个物品,其重量分别为(4, 7, 5, 3),物品的价值分别为(40, 42, 25, 12)

7、,背包容量为10。试设计3种贪心策略,并给出在每种贪心策略下背包问题的解。 重量最轻:装入143.总价值:40+12+25*3/5=67价值最大:装入1,2。总价值:40*3/4+42=72性价比最小:装入1,2.总价值:40+6/7*42=763给出23 13 49 6 31 19 28采用快速排序思想进行排序时一次划分的过程示意图。19 13 49 6 31 23 2819 13 23 6 31 49 2819 13 6 23 31 49 281给定数组An,存储n个实数,试设计一个算法,在最坏情况下用最少比较次数找出该数组中元素的最大值和最小值,并说明采用了何种算法设计思想,其最坏比较多

8、少次。求数组的最大值和最小值a)问题求给定数组a0:n-1的最大值和最小值。要求:最坏情况下用3n/2-2次比较b)分析分治法,把数组分成n/2组,每组2个数。然后每组的两个数进行一次比较,确定出每组的最大数和最小数保存在数组MAXi和MINi中,这样总共进行了n/2次比较。最后从MAXi中找出最大的数MAX,从MINi中找出最小的数MIN,需要2*(n/2-1)次比较。MAX和MIN就是原来问题的解。总比较次数为3n/2 2次该算法在任何情况下进行的比较次数都是3n/2 2,固最差情况也是3n/2 2.c)编程实现Quoted from 求数组的最大值和最小值:/two15.java/该算法

9、在任何情况下的比较次数都是3N/2 -2。所以在最差情况下也是3N/2 -2import javax.swing.JOptionPane;public class two15public static void main(String args)int a=new int50;/int min=new int25;/int max=new int25;/int n=0,i=0,k=1;String num;String aa=new String50;num=JOptionPane.showInputDialog(enter the total num of the array);n=Inte

10、ger.parseInt(num);/单个数不进行比较if(n!=1)for(i=0;in;i+)aai=JOptionPane.showInputDialog(请输入数组的每个元素);ai=Integer.parseInt(aai); /用分治法把N个数分成2/N组 每组两个进行比较,把小的放在MIN,大的放在MAX /最差情况下比较N/2次for(i=1;i(n/2)*2;i=i+2)if(ai-1=ai)mink-1=ai-1;maxk-1=ai;k+;elsemink-1=ai;maxk-1=ai-1;k+;/*在MAX中找出最大的,在MIN中找出最小的 *最差情况下比较2*(N/2-

11、1)次*/int maxm=max0, minm=min0;for(k=1;kmaxm) maxm=maxk;if(minkmaxm) maxm=an-1;if(an-1minm) minm=an-1;JOptionPane.showMessageDialog(null,最大的数是+maxm+最小的数是+minm,result,JOptionPane.INFORMATION_MESSAGE);else JOptionPane.showMessageDialog(null,一个数无须查找,警告!,JOptionPane.INFORMATION_MESSAGE);2描述贪心法的求解过程,给出基于最

12、近邻点策略采用贪心法求解TSP问题伪代码,并分析该算法的时间性能。伪代码:1.P=; 2.V=V-u0;u=u0;/从顶点u0出发; 3循环直到集合P中包含n-1条边 3.1查找与顶点u邻接的最小代价边(u,v)并且v 属于集合V ;3.2 P=P+(u, v);3.3 V=Vv; 3.4 u=v; /从顶点v出发继续求解3设计算法实现求数组中相差最小的两个元素(称为最接近数)的差。算法 MinDistance(A0.n-1)/输入:数组A0.n-1/输出:the smallest distance d between two of its elements算法4.10最近对问题int Clo

13、sestPoints(S) /S为平面上n个点的坐标组成的集合 1if (n2) return ; 2m=S中各点x坐标的中位数; 3构造S1和S2,使得S1中点的x坐标小于m,S2中点的x坐标大于m; 4d1=ClosestPoints(S1); d2=ClosestPoints(S2); 5d=min(d1, d2); 6构造P1和P2,使得P1是S1中点的x坐标与m的距离小于d的点集,P2是S2中点的x坐标与m的距离小于d的点集; 7将P1和P2中的点按y坐标升序排列;8对P1中的每一个点p,在P2中查找与点p的y坐标小于d的点,并求出其中的最小距离d; 9return min(d, d

14、 );4有n枚硬币,其中有一枚硬币是假币,且假币的重量较轻,通过一架天平找出假币,。比较次数最少。答:减治算法。 先把n枚硬币分成两组,每组有2/n枚硬币,如果n为奇数就留下一枚硬币,然后把两组硬币分别放到天平的两端。如果两组硬币重量相同,那么留下的硬币就是假币;否则,用同样的方法对较轻的那组硬币进行同样处理,应为假币一定在较轻的那组里.#include #include using namespace std;int Check_out(int B,int n);int main() int n,n1; cout注意:n真硬币用1表示,假硬币用0或2表示.n; cout 0表示假硬币比真硬币

15、轻,2表示假硬币比真硬币重。n; coutn; int *B=new intn; cout请输入硬币:; for(int i=0;in1; while(n1!=0&n1!=2&n1!=1) coutn1; Bi=n1; if (B0 + B1 +B2) = (B3 +B4 + B5) if (B0 = B6) cout第8枚是假币;/鏁扮粍涓 槸con7 elsecout第7枚是假币; elseif (B0 + B1) = (B2 + B6) if (B3 + B4) = (B7 + B6) cout第6枚是假币; else if (B3 = B6) cout第5枚是假币; else cout

16、第4枚是假币; else if (B0 + B1) = (B7 + B6) cout第3枚是假币; else if (B0 = B6) cout第2枚是假币; else cout第1枚是假币; system(PAUSE); return EXIT_SUCCESS 5一个农夫带着一条狼、一只羊和一筐菜。并设计算法求解。解:带羊到对岸,空手回本岸,带狼到对岸, 带羊回本岸, 带菜到对岸, 空手回本岸 ,带羊到对岸 #include #include #include #define MAX_STEP 20 /index: 0 - 狼,1羊,2菜,3农夫,value:0本岸,1对岸 int aMAX

17、_STEP4; int bMAX_STEP; char *name = 空手, 狼, 带羊, 带菜 ; void search(int iStep) int i; if (aiStep0 + aiStep1 + aiStep2 + aiStep3 = 4) for (i = 0; i iStep; i+) if (ai3 = 0) printf(%s到对岸n, namebi + 1); else printf(%s回本岸n, namebi + 1); printf(n); return; for (i = 0; i iStep; i+) if (memcmp(ai, aiStep, sizeo

18、f(ai) = 0) return; if (aiStep1 != aiStep3 & (aiStep2 = aiStep1 | aiStep0 = aiStep1) return; for (i = -1; i = 2; i+) biStep = i; memcpy(aiStep + 1, aiStep, sizeof(aiStep + 1); aiStep + 13 = 1 - aiStep + 13; if (i = -1) search(iStep + 1); else if (aiStepi = aiStep3) aiStep + 1i = aiStep + 13; search(i

19、Step + 1); int main() search(0); return 0; 6已知某系统在通信联络中只可能出现八种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计其哈夫曼编码,并请画出其图形,说明其设计思想。#include #include #define N 50 /*叶子结点数*/#define M 2*N-1 /*树中结点总数*/typedef structchar data5; /*结点值*/ int weight; /*权重*/ int parent; /*双亲结点*/ int lchild; /*左孩子结点*/ i

20、nt rchild; /*右孩子结点*/ HTNode;typedef structchar cdN; /*存放哈夫曼码*/ int start; HCode;void CreateHT(HTNode ht,int n)int i,k,lnode,rnode; int min1,min2; for (i=0;i2*n-1;i+) /*所有结点的相关域置初值-1*/hti.parent=hti.lchild=hti.rchild=-1; for (i=n;i2*n-1;i+) /*构造哈夫曼树*/ min1=min2=32767; /*lnode和rnode为最小权重的两个结点位置*/ lnod

21、e=rnode=-1; for (k=0;k=i-1;k+) if (htk.parent=-1) /*只在尚未构造二叉树的结点中查找*/ if (htk.weightmin1) min2=min1;rnode=lnode; min1=htk.weight;lnode=k; else if (htk.weightmin2) min2=htk.weight;rnode=k;htlnode.parent=i;htrnode.parent=i; hti.weight=htlnode.weight+htrnode.weight; hti.lchild=lnode;hti.rchild=rnode; v

22、oid CreateHCode(HTNode ht,HCode hcd,int n)int i,f,c; HCode hc; for (i=0;in;i+) /*根据哈夫曼树求哈夫曼编码*/ hc.start=n;c=i; f=hti.parent; while (f!=-1) /*循序直到树根结点*/ if (htf.lchild=c) /处理左孩子结点 hc.cdhc.start-=0; else /*处理右孩子结点*/ hc.cdhc.start-=1; c=f;f=htf.parent; hc.start+; /*start指向哈夫曼编码最开始字符*/ hcdi=hc void Dis

23、pHCode(HTNode ht,HCode hcd,int n) int i,k; int sum=0,m=0,j; printf( 输出哈夫曼编码:n); /*输出哈夫曼编码*/ for (i=0;in;i+) j=0; printf( %s:t,hti.data); for (k=hcdi.start;k=n;k+) printf(%c,hcdi.cdk); j+; m+=hti.weight; sum+=hti.weight*j; printf(n); printf(n 平均长度=%gn,1.0*sum/m);void main()int n=15,i; char *str=The,of,a,to,and,in,that,he,is,at,on,for,His,are,be; int fnum=1192,677,541,518,462,450,242,195,190,181,174,157,138,124,123; HTNode htM; HCode hcdN; for (i=0;in;i+) strcpy(hti.data,stri); hti.weight=fnumi; printf(n); CreateHT(ht,n); CreateHCode(ht,hcd,n); DispHCode(ht,hcd,n); printf(n);

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

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