最大子序列求和_算法——求最大子段和
一、问题描述
给定由n个整数组成的序列(a_1,a_2,…,a_n),最大子段和问题要求该序列形如
例如,序列(-20, 11, -4, 13, -5, -2)的最大子段和为:
注意:必须是连续整数的和。
二、分治策略
(1)划分
–按照平衡子问题的原则,将序列(
①
②
③
(2)求解子问题
对于划分阶段的情况①和②可递归求解
对情况③,分别计算
则
(3)合并
–比较在划分阶段的三种情况下的最大子段和,取三者之中的较大者为原问题的解。
三、算法实现
int MaxSum(int a[ ], int left, int right){sum=0;if (left= =right) { //如果序列长度为1,直接求解if (a[left]>0) sum=a[left];else sum=0;}else {center=(left+right)/2; //划分leftsum=MaxSum(a, left, center); //对应情况①,递归求解rightsum=MaxSum(a, center+1, right); //对应情况②,递归求解s1=0; lefts=0; //以下对应情况③,先求解s1for (i=center; i>=left; i--) {lefts+=a[i];if (lefts>s1) s1=lefts;}s2=0; rights=0; //再求解s2for (j=center+1; j<=right; j++) { rights+=a[j];if (rights>s2) s2=rights;}sum=s1+s2; //计算情况③的最大子段和 if (sum<leftsum) sum=leftsum; //合并,在sum、leftsum和rightsum中取较大者if (sum<rightsum) sum=rightsum;}return sum;
}
思考:采用分治法求解(-20,11,-4,13,-5,-2)的最大子段和, 写出求解过程。
四、时间复杂度分析
对应划分得到的情况①和②,需要分别递归求解;
对应情况③,两个并列for循环的时间复杂性是O(n),所以,存在如下递推式:
综上,时间复杂性为O(nlog2n)。
内容有待完善,请客官等待更新!
最大子序列求和_算法——求最大子段和相关推荐
- 最大子序列求和_最大子序列和问题 一步一步到最优
在<数据结构和算法分析 C++描述>上看到了一个例子.看过之后,我就在想,这是怎么一步一步的递推出来的,想了好长时间,才整理成这篇博文. 问题描述: 给定一个整数序列,a0, a1, a2 ...
- 最大子序列求和_最大子序列和问题
问题描述: 给定一个整数序列,a0, a1, a2, -- , an(项可以为负数),求其中最大的子序列和.如果所有整数都是负数,那么最大子序列和为0: 例如:对于序列-2, 11, -4, 13, ...
- 最大子序列求和_连续子序列最大和与乘积问题的分析
问题描述 给定(可能是负的)整数序列A1, A2,...,AN, 寻找(并标识)使Sum(Ak)(k >=i, k <= j)的值最大的序列.如果所有的整数都是负的,那么连续子序列的最大和 ...
- 求最大和 java_三种算法求最大子段和问题——Java实现
给定由n个整数组成的序列(a1, a2, -, an),求该序列的子段和的最大值,当所有整数均为负整数时,其最大子段和为0. LargestSubsegmentSum1.java //蛮力算法 imp ...
- 最大子序列求和_最大连续子序列和
题外话:本文原文是之前在知乎专栏写的一篇文章,现在读来发现好多地方没有写清楚,所以现在做了些修改,希望把分析过程说的更明白一些.为什么要发布到慕课网来呢,主要是因为个人认为这里的IT氛围更好更专业. ...
- 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列
(为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...
- c 最大子序列和_算法总结:左神class8—跳台阶+最长递增公共子序列
[跳台阶]有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法? public int s1(int n){ if (n< 1){ return 0; if(n == 1 || n ...
- 算法:最大子序列求和问题
最大子序列求和是指给定一组序列,求所有连续子序列的和中的最大值,例如给定数列: [5,-2,-5,6]最大子序列和是6:[1, 2, -3, 4, -5, 6, 7, 8, -9, 10]最大子序列和 ...
- JAVA编写一个函数计算1到n之和_编写一个求和函数,用以求1到n的和 ,并返回和值。_学小易找答案...
[简答题]民宿 怎样做好个性化服务? (10.0分) [多选题]采取产品-市场集中化时,企业的目标市场( ) [单选题]So many mistakes in your homework! You m ...
最新文章
- C++11中std::future的使用
- 高防服务器租用:DDoS保护关键主题与防御保护性质
- Hadoop详解(六):MapReduce计算框架详解
- TF之DD:利用Inception模型+GD算法生成带背景的大尺寸、高质量的Deep Dream图片——五个架构设计思维导图
- 调用手机相机相册_如果你用华为手机拍照!记得开启专业模式,照片好看十倍不止...
- linux php7 安装redis扩展(php7可以使用自测)
- [导入]C++ GUi 选择
- 中文(英译) 爱情一句话哲理
- OpenJudge 8782 乘积最大——S.B.S
- 26章 OOP:宏伟蓝图
- ajaxsubmit php上传文件,使用ajaxSubmit方法实现多文件上传(异步)
- spss中有关独立样本T检验的详细介绍(包含操作过程和结果分析)
- 砥砺前行,匠心致远|袋鼠云联合创始人、易知微CEO宁海元荣获“数字工匠 ”
- 软件发布各版本代号含义
- 火影忍者的最爱:三勾玉
- ubuntu中如何修改计算机名字
- Linux内核设计与实现 第19章 可移植性
- 我的世界天空之城服务器位置,我的世界1.7.2服务器天空之城
- python生成迁移文件
- WxConn:统计微信好友数与加入群聊的人数
热门文章
- php 递归函数自调用函数,PHP闭包实现函数的自调用实现递归
- idea工作台输出的日志详解_详解linux下nohup日志输出过大问题解决方案--分批切割...
- mysql数据库 sid_jdbc连接数据库使用sid和service_name的区别
- Books Queries(codeforces 1066)
- linux 没有权限登录,CentOS中让一个用户没有登录权限
- PAT_B_1013_Java(20分)
- python chrome headless_[技巧] chrome headless 爬虫抓取websoket 数据
- win7局域网共享设置_Win7系统打印机共享不了的设置方法思路!
- 成为解决计算机问题的利器,高中数学教学借助计算机的“翅膀”腾飞
- html中flash的使用,[转载]flash中可以使用的HTML标签[有用]