算法设计技巧与分析实验一.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息技术系 算法设计技巧与分析实验一 课后习题答案 1.1 (a)6 (b)5 (c)6 (d)6 1.4 算法执行了7+6+5+4+3+2+1=28次比较 1.5 (a)算法MODSELECTIONSORT执行的元素赋值的最少次数是0,按非降序排列时候达到最小值 (b) 算法MODSELECTIONSORT执行的元素赋值的最多次数是 ,按非升序排列时候达到最大值 1.7 INSERTIONSORT 由上图可以看到算法INSERTIONSORT执行的比较次数为1+1+2+2+2+6+2=16 1.11 由上图可以得出比较次数为5+6+6+9=26次 19 2 4 7 5 19 17 13 12 11 8 15 4 5 8 11 13 17 2 19 13 4 8 11 15 12 7 15 7 12 17 5 2 11 19 5 17 2 4 8 13 7 15 12 2 17 19 5 13 11 4 8 15 12 7 比较均为1共5次 比较为3次, 2次,1次 比较为6次 比较9次 1.13 FTF,TTT,FTF,TFF,FTF 1.16 (a) 执行该算法,元素比较的最少次数是n-1。按非降序排列时候达到最小值。 (b) 执行该算法,元素比较的最多次数是 。按非升序排列时候达到最大值。 (c) 执行该算法,元素赋值的最少次数是0。按非降序排列时候达到最小值。 (d) 执行该算法,元素赋值的最多次数是 。按降序排列时候达到最大值。 (e) 用O符号和 符号表示算法BUBBLESORT的运行时间: , (f)不可以用 符号来表示算法的运行时间: 是用来表示算法的精确阶的,而本算法运行时间由线性到平方排列(与数组的初始排列有关),因此不能用这一符号表示 1.32 (a)当n为2的幂时,第六步执行的最大次数是: (b)由(a)可以得到每一次循环j都为2的幂时,第步执行的次数最大 (c)用 符号表示的算法的时间复杂性是 当 (其中 取整)时, (d)用 符号表示的算法的时间复杂性是 while循环里的cout的数值最小为1次即跳出循环,只要当n满足 取整为奇数时,for循环执行n次,算法执行的最大次数是n次 (e)O和 这俩个符号O更适合表示算法的时间复杂性。因为本算法时间复杂性从 到 ,而 是表示精确阶的。 实验1 实验2 实验3 * 这道题大部分同学都做对了,可见对基本的算法流程都了解了。我简单的说一下。选择排序是找出首先找出最小的元素放到A[1]位置,再在剩下的元素里找到最小的元素放到A[2]位置上,依次找下去,,, 选择排序:找出最小的元素放在A[1],然后找剩下的n-1个元素的最小元素放在A[2],重复此过程直到找到第二大的元素,将其放在A[n-1] * 首先分析一下程序,外层for是i从1到n取值,内层for是j从i+1到n取值,也就是从2开始取值,条件判断为如果A[j]A[i],则交换两者,即如果后面的数小于i所指向的数(第一次循环为A[1]),则将A[j]放到A[i]的位置上。将最小的值放到A[1]位置,再在剩余元素中找最小的值放到A[2]位置上,,,, 交换次数为(n-1)+(n-2)+…1= 赋值次数为交换次数的3倍。 * 插入排序:首先A[1]开始,将A[2]插入到其前面或后面,继续这一过程,将A[i]插入到A[1…i-1]中的合适位置。 过程如下:依次扫描序号从i-1到1的元素,每次都讲A[i]和当前位置的元素比较,在扫描的每一步,元素都被移到序号更高的一个位置,知道找到一个小于或等于A[i]的元素,或者前面已排序数组的元素都已扫描过,此时A[i]插入到合适的位置。 * * * * 下面看一下实验一,首先回顾一下算法过程,首先程序有两个while循环,双层,外面的while为tn,t的含义是,MERGE函数可以看出来,是将要合并的序列的长度,长度要小于n,若等于n的话,进入程序之后t接着扩大2倍了,远远超过程序的长度。几下来,t值立即增大为原来的两倍,这时候第二个while循环,合并两个序列,接下俩增加i,再合并接下来的两个序列,直到不满足条件。 看if i+sn这句,是为何并那些剩余元素准备的,可以看出刚才的程序是合并2的倍数的序列的,这个条件的意思是剩余元素《2的j次方,》2的j-1次方,只要不满足上面while循环的条件说明《2的j次方了,i+sn的话又满足》2的j-1次。 其中输入的是n个元素,要建立一个数组或申请一个空间存放元素,要输入待排序的元素个数,输出排好序的元素。其中在主程序中要调用bottomupsort函数,在这个函数中药调用merge。 变量

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档