算法设计与分析计算题(共20页).doc
《算法设计与分析计算题(共20页).doc》由会员分享,可在线阅读,更多相关《算法设计与分析计算题(共20页).doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上算法设计与分析一、 排序和查找是经常遇到的问题。按照要求完成以下各题:(1)对数组A=15,29,135,18,32,1,27,25,5,用快速排序方法将其排成递减序。解:(1)第一步:15 29 135 18 32 1 27 25 5 第二步:29 135 18 32 27 25 15 1 5 第三步:135 32 29 18 27 25 15 5 1 第四步:135 32 29 27 25 18 15 5 1 (2)请描述递减数组进行二分搜索的基本思想,并给出非递归算法。解:基本思想:首先将待搜索元素v与数组的中间元素进行比较,如果,则在前半部分元素中搜索v;若,
2、则搜索成功;否则在后半部分数组中搜索v。非递归算法:输入:递减数组Aleft:right,待搜索元素v。输出:v在A中的位置pos,或者不在A中的消息(-1)。步骤:int BinarySearch(int A,int left,int right,int v)int mid;while (leftAmid) right=mid-1;else left=mid+1;return -1;(3)给出上述算法的递归算法。解:输入:递减数组Aleft:right,待搜索元素v。输出:v在A中的位置pos,或者不在A中的消息(-1)。步骤:【3分】int BinarySearch(int A,int l
3、eft,int right,int v)int mid;if (leftAmid) return BinarySearch(A,left,mid-1,v);else return BinarySearch(A,mid+1,right,v);elsereturn -1;(4)使用上述算法对(1)所得到的结果搜索如下元素,并给出搜索过程:18,31,135。解:搜索18:首先与27比较,1827,在前半部分搜索;再次32比较,3129,此时只有一个元素,未找到,返回-1。 搜索135:首先与27比较,13527,在前半部分搜索;再次32比较,13532,在前半部分搜索;与135比较,相同,返回0。
4、二、排序和查找是常用的计算机算法。按照要求完成以下各题:(1)对数组A=15,9,115,118,3,90,27,25,5,使用合并排序方法将其排成递减序。(2)若改变二分搜索法为三分搜索法,即从一个递减序列A中寻找元素Z,先与元素比较,若,则在前面个元素中寻找Z;否则与比较,总之使余下的序列为个元素。给出该方法的伪代码描述。(3)使用上述算法对(1)所得到的结果搜索如下元素,并给出搜索过程:118,31,25。解:(1)第一步:15 9 115 118 3 90 27 25 5 第二步:15 9 118 115 90 3 27 25 5第三步:118 115 15 9 90 27 25 3
5、5第四步:118 115 90 27 25 15 9 3 5第五步:118 115 90 27 25 15 9 5 3(2)输入:递减数组Aleft:right,待搜索元素v。输出:v在A中的位置pos,或者不在A中的消息(-1)。步骤:int BinarySearch(int A,int left,int right,int v)int mid;while (leftAfirst) right=first-1;else if (v=Asecond) return second;else if (vAsecond) left=first+1;right=second-1;else left=s
6、econd+1;return -1;(3) 搜索118:11827,所以right3;118115,所以right1;118118,找到。搜索31:3127,所以right3;3190,所以left=4,结束,未找到。搜索25:925du+w(u,v)then dv=du+wu,v;pv=udijkstra(G,w,s)Init-single-source(G,s) S= Q=VGwhile Q do u=min(Q) S=Sufor each vertex vadju do Relax(u,v,w) 四、对于下图使用Dijkstra算法求由顶点a到其他各个顶点的最短路径。并给出求各个顶点对之
7、间的最短路径的算法思想。步骤 V1 V2 E1 E21. a b ab2. a,b d ab bd3. a,b,d c,f ab,bd dc,df4. a,b,d,c f ab,bd df5. a,b,c,d,f e ab,bd,dc,df fe6. a,b,c,d,e,f g ab,bd,dc,df,fe eg7. a,b,c,d,e,f,g h ab,bd,dc,df,fe,eggh8. a,b,c,d,e,f,g,h ab,bd,de,df,fe,eg,gh 结果:从a到h的最短路径为,权值为18。五、问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使
8、选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。#includevoid main()int m,n,i,j,w50,p50,pl50,b50,s=0,max;printf(输入背包容量m,物品种类n :);scanf(%d %d,&m,&n);for(i=1;i=n;i=i+1)printf(输入物品的重量W和价值P :);scanf(%d %d,&wi,&pi);pli=pi;s=s+wi;if(s=m)printf(whole choosen);/return;for(i=1;i=n;i=i+1)max=1;for(j=2;jplmax/wmax)max=j;plmax=
9、0;bi=max;for(i=1,s=0;sm & i=n;i=i+1)s=s+wbi;if(s!=m)wbi-1=m-wbi-1;for(j=1;j=i-1;j=j+1)printf(choose weight %dn,wbj);六、假设有7个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量M150,使用回溯方法求解此背包问题。请写出状态空间搜索树(20分)。物品ABCDEFG重量35306050401025价值10403050354030 解:贪心算法:(1)标准:重量、价值和单位价值。(2)使用重量从小到大:FGBAEDC。得到贪心解为:FGBAE全部放入,而D放入2
10、0%,得到价值为165。使用价值从大到小:DFBEGCA,得到贪心解为:DFBE全部放入,而G放入80%,得到价值为:189。使用单位价值从大到小:FBGDECA,得到贪心解为:FBGD全部放入,而E放入87.5%,得到价值为190.625。(3)显然使用单位价值作为标准得到的是最优解。回溯法:按照单位效益从大到小依次排列这7个物品为:FBGDECA。将它们的序号分别记为17。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:a b. c d. e. f. g. h. i.j. 在Q1处获得该问题的最优解为,背包效益为170。即在背包中装入物品F、B、G、D、A时达到最
11、大效益,为170,重量为150。七、分别用贪心算法、动态规划法、回溯法设计0-1背包问题。要求:说明所使用的算法策略;写出算法实现的主要步骤;分析算法的时间(1)贪心算法 O(nlog(n)首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包。依此策略一直地进行下去,直到背包装满为止。具体算法可描述如下:void Knapsack(int n,float M,float v,float w,float x)Sort(n,v,w);int
12、 i;for (i=1;i=n;i+) xi=0;float c=M;for (i=1;ic) break;xi=1;c-=wi;if (i=n) xi=c/wi;(2)动态规划法 O(nc)m(i,j)是背包容量为j,可选择物品为i,i+1,n时0-1背包问题的最优值。由0-1背包问题的最优子结构性质,可以建立计算m(i,j)的递归式如下。void KnapSack(int v,int w,int c,int n,int m11)int jMax=min(wn-1,c);for (j=0;j=jMax;j+) /*m(n,j)=0 0=jwn*/mnj=0;for (j=wn;j=wn*/m
13、nj=vn;for (i=n-1;i1;i-) int jMax=min(wi-1,c);for (j=0;j=jMax;j+) /*m(i,j)=m(i+1,j) 0=jwi*/ mij=mi+1j;for (j=wi;j=wn*/ mij=max(mi+1j,mi+1j-wi+vi);m1c=m2c;if(c=w1)m1c=max(m1c,m2c-w1+v1);(3)回溯法 O(2n)cw:当前重量 cp:当前价值 bestp:当前最优值voidbacktrack(inti) /回溯法 i初值1if(in) /到达叶结点 bestp=cp; return; if(cw+wibestp) /
14、搜索右子树 backtrack(i+1); 八、已知,k=1,2,3,4,5,6,r1=5,r2=10,r3=3,r4=12,r5=5,r6=50,r7=6,求矩阵链积A1A2A3A4A5A6的最佳求积顺序。(要求:给出计算步骤)解:求解矩阵为:12345610150330405165520102036033024301950301809301770403000186050150060123456101224220222230344404450560因此,最佳乘积序列为(A1A2)(A3A4)(A5A6),共执行乘法2010次。九、回答如下问题:(1) 什么是算法?算法的特征有哪些?答:算法是
15、解决某类问题的一系列运算的集合。特征:具有有穷行、可行性、确定性、0个或者多个输入、1个或者多个输出。(2) 什么是P类问题?什么是NP类问题?请描述集合覆盖问题的近似算法的基本思想。解:用确定的图灵机可以在多项式实践内可解的判定问题称为P类问题。用不确定的图灵机在多项式实践内可解的判定问题称为P类问题。集合覆盖问题的近似算法采用贪心思想:对于问题,每次选择F中覆盖了尽可能多的未被覆盖元素的子集S,然后将U中被S覆盖的元素删除,并将S加入C中,最后得到的C就是近似最优解。十、多段图问题:设G(V,E)是一个赋权有向图,其顶点集V被划分成k2个不相交的子集Vi:,其中,V1和Vk分别只有一个顶点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 算题 20
限制150内