递归与分治策略解决最大字段和问题_第1页
递归与分治策略解决最大字段和问题_第2页
递归与分治策略解决最大字段和问题_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、递归与分治策略最大子段和问题1、问题的描述给定由n个整数组成的序列(al,a2,an),求该序列形如g的子段和的最大值。分治算法就是将一个问题分解成若干个小问题,对若干个小问题分别求解,最后 在合并起来。最大子段问题可以分成三种情况1.数组al-n(bp数组前1至n个元素)的最大子段和aln/2的最大子段相同2数组al-n(w数组前1至n个元素)的最大子段和an/2+l-n的最大子段相同3.数组al-n的最大子段和是由al-n/2和an/2+ln结合而成,求解方法为 则分别求出n/2imaxsak和 max sak,然后将两个值相加即得到此种情况下的数组最大子段和0<二iv二n/2 k=

2、i n/2+l<=iv二n k二 n/2最后分别求出三种情况的最大子段和,再比较三个子段和,最大的那个即为数组 的最大字段和。2、代码及注释include <stdio. h>include <stdlib. h>#include <time h>#define max_n 20 int max3(int, int, int):int maxsubarrayar)s(int );int maxsubarrtiy (ini , int, int);int main()int numsmax_n ;/定义一个最大长度为20的数组 int i;stand (

3、time (0); /随机数产生器printf("array: n");/产生max n个随机数for( i = 0; i < max_n; i卄)随机数产工的规则 numsi = (int) (rand() % (max_n * 2) - max_n);printf(*%dt*, nums订);printf("n");/调用递归函数printf (z,the max subsequen sum is %d n,z, mcixsubarrayans (nums); return 0; /求三个数中的最大值int max3(int a, int b,

4、 int c) if(a > b)return a > c ? a : c; elsereturn b > c ? b : c;/采用分治策略int maxsubarray (int nums, int left, int right)int maxleftsum, maxrightsum;/左右边的最人和int maxleftbordersum, maxrightbordersum;/含中间边界的左右部分最大和int leftbordersum, rightbordersum;/含中间边界的左右部分当前和/递归到最后的基本悄况if(left = right)if(numsl

5、eft > 0)return nu:elsereturn 0;递归求左右部分最人值int mid = (left + right) / 2, i;maxleftsum 二 maxsubarray(nums, left, mid); maxrightsum 二 mcixsubarray (nums, mid + 1, right):求含中间边界的左部分的最大值maxleftbordersum = 0, leftbordersum = 0;for(i = mid; i >= left; i)leftbordersum +二 numsi;if(leftbordersum > mti

6、xleftbordersum)maxleftbordersum = leftbordersum;求含中间边界的右部分的最大值maxrightbordersum 二 0, rightbordersum 二 0;for(i = mid + 1; i <= right; i+) rightbordersum +二 numsi;i f(ri ghtbordersum > maxrightbordcrsum)maxrightbordersum = rightbordersum;/返回三者中的最大值return max3(maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum): int mcixsubarrayans (int nums)return maxsubarray(nums, 0, max_n 一 1);3、运行结果产生20个平均分布在0左右的随机故8418-1-10916-10-7-414-1?-418-7131325最大子段和为44.press any key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论