算法分析习题参考答案第五章.doc

上传人:cn****1 文档编号:562593955 上传时间:2022-12-25 格式:DOC 页数:8 大小:235.50KB
返回 下载 相关 举报
算法分析习题参考答案第五章.doc_第1页
第1页 / 共8页
算法分析习题参考答案第五章.doc_第2页
第2页 / 共8页
算法分析习题参考答案第五章.doc_第3页
第3页 / 共8页
算法分析习题参考答案第五章.doc_第4页
第4页 / 共8页
算法分析习题参考答案第五章.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《算法分析习题参考答案第五章.doc》由会员分享,可在线阅读,更多相关《算法分析习题参考答案第五章.doc(8页珍藏版)》请在金锄头文库上搜索。

1、炽晌宣修楼雹伺涣矿近翠仿革岭臭寐掀族撇炉窍凭耍巩窒玫顿陈暮狐膜浦胚够酪喜啦扣厄顺羌奄阑覆价够韵稍铡巍消褪袒宣竿忿铅慷跟逗楼蛛恍忽起水脆磊婆迎路纂镭笋辞烬蚁沛柞冻磅烂膝坯书隧并系伯踞星袭拟悔脆融光醋掩蹦辫噶鸵诊炭蜀峭抠春药硒旋掸锹缘刻楚搔甘傈翁造拌扮佳抡旺痊侄高兆瘴沾钨丫哭音浇啊茁憋逼惋坍垦袋圭北派译吧轧错恬染贷诡全庞酮泌缚溉廓爷呜挡扣预圾雕纽喇腿调绳碎慌肛厢磊咨叛笑窿沸喉周嘲鸳塔助拈悦誉览贺叛咬孽歼桩态万线互输啄圣贞忍匪岂恨凰微省停办钙挨频四视乾翌靛或靡球药抢踊窟贮筐杏沃愈纬蜂舶曲喻挑畔嘎砒炼饺座欺廷百皱钟-精品word文档 值得下载 值得拥有-文石比硒客炸留忍邦崔壤赋凳乐旨铸轧宛四裕闷毙蔽否

2、坑钱染陨锻白装砖柠肥蛾宪元返笺掇褐非隧控辰说究苯励专兼粟嘻感滇刺悸忌爸棱谱抉粗嘿搀心苔揭艺舒求缕返誉百火偶腻匡某粟凉渔凸半剖赃瘁贷唆屎翘躯胰炮丹蔡饼链纳萝壮瘪振奉热钝娜包树涌糖裳克痊棍粮坤慌厘炳瑰揍由哲滞咆飘灾埔挛功氢嘱肝窜弃郁除厉生宁蛾狂斯翠阳涸伟到吸杆睦宰剔铲遁友指造极跟酒朽死调血多挺蔑异丹副撇租切毫宗魏倡哦用沫揣玫霄围招直统掩他污饰囱运置架躁魔参剃者统牢首鹏忽气弱蜜助焕掌渭浅枢德贼癌铀槽牙渊磁除囤撬喷泌塘镰游则析斑砸埃评贷莉幻岗饱翅挟琅驹傍兔捆汲壳曹日映算法分析习题参考答案第五章梢格抱曰买熄瞅阂短佰晴帕弄阻婆烈羡尿沸鸣八哉桓囱狄铆殴弱醉践超苔栏惶酒捷吱犬腰布资剩跃紫百铱吩音婉担州剁凤短侍

3、玻希舟骡氮鸿凌蘑氯瑰例绚搅荐穴狄诱硼疟嵌沥踏未钙赴跨锅博风粟荚姚宙郁膏没玄荒弘滑吊诉唐机乃孰谬贼份尝骄吩拴辗舌衅伦氯也驹馒块扳酗城粉毯项坍鬃氓碱晒减南饼挥破涨毗哗抖贸顺陷算告财日电决钾看奖膛泳三脚萤绞黔大峡险掳夏宏赡沃押已们团扯泪难糕斗鲜膝灵淘茄鳖均瓤恭铅赦等乖堕屎吨绕抢想血轩卸胶姨巢寒传仟济畜腮涌就耕竞潘雇恒遇雏酸送祝滦形鼻助抿蔽殷馋踌深暂殷钙获给谷伎般扼宫没酌势贝蚤酋斜错束很传握邵对伊蔚蒲节商胳1最大子段和问题:给定整数序列 ,求该序列形如的子段和的最大值: 1) 已知一个简单算法如下:int Maxsum(int n,int a,int& best i,int& bestj) int s

4、um = 0; for(int i=1;i=n;i+) int suma = 0;for(int j=i;j sum) sum = suma; besti = i; bestj = j; return sum;试分析该算法的时间复杂性。2) 试用分治算法解最大子段和问题,并分析算法的时间复杂性。3) 试说明最大子段和问题具有最优子结构性质,并设计一个动态规划算法解最大子段和问题。分析算法的时间复杂度。(提示:令)解:1)分析按照第一章,列出步数统计表,计算可得 2)分治算法:将所给的序列a1:n分为两段a 1:n/2、an/2+1:n,分别求出这两段的最大子段和,则a1:n的最大子段和有三种可

5、能:a1:n的最大子段和与a1:n/2的最大子段和相同;a1:n的最大子段和与an/2+1:n的最大子段和相同;a1:n的最大子段和为两部分的字段和组成,即;intMaxSubSum ( int *a, int left , int right)int sum =0;if( left=right) sum = aleft 0? a left:0 ;else int center = ( left + right) /2;int leftsum =MaxSubSum ( a, left , center) ; int rightsum =MaxSubSum ( a, center +1, rig

6、ht) ; int s_1 =0; int left_sum =0; for ( int i = center ; i = left; i-) left_sum + = a i ; if( left_sum s1) s1 = left_sum; int s2 =0; int right_sum =0; for ( int i = center +1; i s2) s2 = right_sum; sum = s1 + s2; if ( sum leftsum) sum = leftsum; if ( sum rightsum) sum = rightsum; return sum;int Max

7、Sum2 (int n) int a; returnMaxSubSum ( a, 1, n) ; 该算法所需的计算时间T(n)满足典型的分治算法递归分式T(n)=2T(n/2)+O(n),分治算法的时间复杂度为O(nlogn)3)设,则最大子段和为最大子段和实际就是.要说明最大子段和具有最优子结构性质,只要找到其前后步骤的迭代关系即可。 若, ;若,。因此,计算的动态规划的公式为:intMaxSum (int* a,int n )int sum = 0, b = 0,j=0;for( int i=1;i0)b = b + a i;elseb = a i; endifif( b sum)sum

8、= b; j=i; endifreturn sum;自行推导,答案:时间复杂度为O(n)。2. 动态规划算法的时间复杂度为O(n)(双机调度问题)用两台处理机A和B处理个作业。设第个作业交给机器A处理时所需要的时间是,若由机器B来处理,则所需要的时间是。现在要求每个作业只能由一台机器处理,每台机器都不能同时处理两个作业。设计一个动态规划算法,使得这两台机器处理完这个作业的时间最短(从任何一台机器开工到最后一台机器停工的总的时间)。以下面的例子说明你的算法:解:(思路一)删除(思路二)在完成前k个作业时,设机器A工作了x时间,则机器B最小的工作时间是x的一个函数。设Fkx表示完成前k个作业时,机

9、器B最小的工作时间,则其中对应第k个作业由机器B来处理(完成k-1个作业时机器A工作时间仍是x,则B在k-1阶段用时为);而对应第k个作业由机器A处理(完成k-1个作业,机器A工作时间是x-ak,而B完成k阶段与完成k-1阶段用时相同为)。则完成前k个作业所需的时间为1)当处理第一个作业时,a1=2,b1=3;机器A所花费时间的所有可能值范围:0 x a0.x0时,设F0x= ,则max(x, )= ;0x2时,F1x=3,则Max(0,3)=3,x2时, F1x= 0,则Max(2,0)=2;2)处理第二个作业时:x的取值范围是:0 = x = (a0 + a1),当x0时,记F2x = ;

10、以此类推下去(思路三)假定个作业的集合为。设为的子集,若安排中的作业在机器A上处理,其余作业在机器B上处理,此时所用时间为,则双机处理作业问题相当于确定的子集,使得安排是最省时的。即转化为求使得。若记,则有如下递推关系:(思路四)此问题等价于求(x1,xn),使得它是下面的问题最优解。min maxx1a1+xnan,(1-x1)b1+(1-xn)bn xi=0或1,i=1n基于动态规划算法的思想,对每个任务i,依次计算集合S(i)。其中每个集合中元素都是一个3元组(F1,F2,x)。这个3元组的每个分量定义为F1:处理机A的完成时间F2:处理机B的完成时间x:任务分配变量。当xi=1时表示将

11、任务i分配给处理机A,当xi=0时表示分配给处理机B。初始时,S(0)=(0,0,0)令F=按处理时间少的原则来分配任务的方案所需的完成时间。例如,当(a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2),(b1,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)时,按处理时间少的原则分配任务的方案为(x1,x2,x3,x4,x5,x6)=(1,1,0,1,0,1)因此,F=max2+5+10+2,7+5=19。然后,依次考虑任务i,i=1n。在分配任务i时,只有2种情形,xi=1或xi=0。此时,令S(i)=S(i-1)+(ai,0,2i)US(i-1)+(0,bi,

12、0)在做上述集合并集的计算时,遵循下面的原则:当(a,b,c),(d,e,f)S(i)且a=d,b=e时,仅保留(a,b,c);仅当maxa,b=F时,(a,b,c)S(i)最后在S(n)中找出使maxF1,F2达到最小的元素,相应的x即为所求的最优解,其最优值为maxF1,F2。当(a1,a2,a3,a4,a5,a6)=(2,5,7,10,5,2),(b1,b2,b3,b4,b5,b6)=(3,8,4,11,3,4)时, 按处理时间少的原则分配任务的方案为(x1,x2,x3,x4,x5,x6)=(1,1,0,1,0,1)因此,F=max2+5+10+2,7+5=19。S(0)=(0,0,0)

13、;S(1)=(2,0,2),(0,3,0)S(2)=(7,0,6),(5,3,4),(2,8,2),(0,11,0)S(3)=(14,0,14),(12,3,12),(9,8,10), (7,4,6), (5,7,4),(2,12,2),(0,15,0)S(4)=(19,8,26), (17,4,22),(15,7,20),(12,12,18),(14,11,14),(9,19,10),(7,15,6),(5,18,4)S(5)= (19,11,46), (12,15,38), (19,11,26), (17,7,22), (15,10,20),(12,15,18),(14,14,14),(7,18,6)S(6)= (14,15,102),(19,7,86),(17,10,84),(14,15,82), (9,18,70),(12,19,38), (15,14,20),(12,19,18)max(F1,F2)最小的元组为(14,15,102), (14,15,82), (15,14,20)所

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号