中南大学算法实验报告.docx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中南大学算法实验报告

算法分析与设计实验报告学院: 信息科学与工程学院专业班级:  i got7指导老师:   学号:   i got7 姓名:    鸟宝宝合并排序合并排序是分治法的应用,把需要排序的数组A[1 - n],一分为二A[1 -n/2]和A[n/2+1 - n],然后在对每一个子数组递归排序,接着再把这两个子数组合并成一个有序的数组。算法描述:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾关键代码:privatestaticvoid Sort(int[] a, intleft, intright) {if(left=right)return;intmid = (left + right) / 2;Sort(a, left, mid);Sort(a, mid + 1, right);merge(a, left, mid, right); }privatestaticvoid merge(int[] a, intleft, intmid, intright) {int[] tmp = newint[a.length];intr1 = mid + 1;inttIndex = left;intcIndex=left;// 逐个归并while(left =mid r1 = right) {if (a[left] = a[r1]) tmp[tIndex++] = a[left++];elsetmp[tIndex++] = a[r1++]; }// 将左边剩余的归并while (left =mid) {tmp[tIndex++] = a[left++]; }// 将右边剩余的归并while ( r1 = right ) {tmp[tIndex++] = a[r1++]; } System.out.print( 第+(++number)+次排序: );//从临时数组拷贝到原数组while(cIndex=right){a[cIndex]=tmp[cIndex];//输出中间归并排序结果 System.out.print(a[cIndex]+ );cIndex++; } System.out.println(); }运行结果截屏:算法分析:合并排序满足分治法的基本公式T(n)=2T(n/2)+f(n)其中2T(n/2)是2个子问题求解,即对两个子数组排序;而f(n)是将子问题合起来求原始问题的解的代价,即将两个有序的子数组合并为一个有序的数组。在最终的合并阶段,键值的比较的代价,在最坏的情况下是n-1 ,(比如每个数组的第i号轮流被放入数组),根据主定理,T(n)=O(nlogn)。0-1背包问题问题描述:在0 / 1背包问题中,需对容量为W的背包进行装载。从n 个物品中选取装入背包的物品,每件物品j的重量为wj,价值为vi 。对于可行的背包装载,背包中物品的总重量不能超过背包的容量,最佳装载是指所装入的物品价值最高。有3中方法可解:动态规划法:递推式: K(w,j)=max{K(w-wj, j-1)+vj, K(w,j-1)} w ≥ wj K(w,j)=K(w,j-1) w wj 初始条件: K(0,j)=0, K(w, 0)=0. 初始化条件表示把前面i个物品装入容量为0的背包和把0个物品装入容量为j的背包,得到的价值均为0。 第二个式子说明:如果第i个物品的重量大于背包的容量,则装入第i个物品得到的最大价值和装入第i-1个物品得到的最大价值是相同的,即物品i不能装入背包中。 第一个式子说明:如果第i个物品的重量小于背包的容量,则会有两种情况:(1)如果把第i个物品装入背包,则背包中物品的价值就等于把前i-1个物品装入容量为iwj?的背包中的价值加上第i个物品的价值iv; (2)如果第i个物品没有装入背包,则背包中物品的价值就是等于把前i-1个物品装入容量为j的背包中所取得的价值。 显然,取二者中价值较大者作为把前i个物品装入容量为j的背包中的最优解。w-wj…?w?Wj-1?K[w-wj,?j-1]K[w,j-1]jK[w,?j]n目标 构建的表格:时间复杂度为:O(nw)分支限界法:1.按单位价值对待处理的物品进行排序2.计算可行结点可获得的最大价值的上界

文档评论(0)

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

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

1亿VIP精品文档

相关文档