利用分治算法求数列的最大子段和C语言,最大子段和(分治法)
将长度为n的序列L划分成两个子序列,即 L(1,n/2) 和 L(n/2 + 1 , n)
会出现3种情况:
① max{ L(1,n) } = max{ L(1,n/2)}
② max{ L(1,n) } = max{ L(n/2 + 1 , n) }
③ max{ L(1,n) } = 且
求解子问题:对于划分阶段的情况①和②可以递归求解,情况③需要分别计算 s1 = max{ } s2同理
则 s1+s2为情况三的最大子段和
合并:比较三种情况下的最大子段和,取三者最大的那个
#include
using namespace std;
int max(int x,int y){
return x>y?x:y;
}
int maxSum(int *nums,int left,int right){
if(left==right)return nums[left];
int mid=(left+right)/2;
int lsum,rsum;
lsum = maxSum(nums,left,mid); // 左边最大子段
rsum = maxSum(nums,mid+1,right); // 右边最大子段
//求中间最大子段
int s1=0,s2=0;
int temp=0;
for(int i=mid;i>=left;i++){ // 注意:这里是从中间向左遍历,目的是为了让划分的左右两边序列能连接起来
temp+=nums[i];
if(s1
}
temp=0;
for(int i=mid+1;i<=right;i++){
temp+=nums[i];
if(s2
}
int msum = s1+s2;
return max(max(lsum,rsum),msum);
}
int main(){
int nums[] = {1,-5,2,3};
cout<
return 0;
}
利用分治算法求数列的最大子段和C语言,最大子段和(分治法)相关推荐
- 分治算法 求第k小元素 O(n) O(nlog2^n)
BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排) 各位小伙伴,由于本篇文章代码太过杂乱.我于 2018年12月25日 对文中介绍的算法进行了重写.点击上面的蓝色字体,可以阅读重写后的 ...
- 有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径...
有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误. 把字符串看成 ...
- 利用Kuhn-Munkras算法求最小权值匹配
本文参考博客: http://blog.csdn.net/zhangpinghao/article/details/12242823(代码参考该博客) http://philoscience.itey ...
- 分治算法求n个元素的最大值和最小值
分治算法求n个元素的最大值和最小值 算法思想: 1.将n个数均分为s1和s2 2.分别求解s1和s2的最大值和最小值 s1最大值为max1,s1最 ...
- [计算机数值分析]利用秦九韶算法求多项式的值
Spring-_-Bear 的 CSDN 博客导航 例:利用秦九韶算法求 p ( x ) = x 5 − 3 x 4 + 4 x 2 − x + 1 p(x)=x^{5}-3x^{4}+4x^{2}- ...
- C语言分治算法求中位数,【算法复习】分治算法
Outline 分治思想和递归表达式 大整数乘法 矩阵乘法的Strassen算法 快速傅里叶变化 基于分治的排序 merge-sort排序 快速排序 排序的下界问题 中位数和顺序统计量 最邻近点对 凸 ...
- 分治算法求乘方a^b 取余p(divide and conquer)
传统的计算方法为循环n个a相乘.时间复杂度为O(n). 如用分治算法,效率可提升至O(lgn). 结合recursive有 double pow(int a, int n){if(n==0)retur ...
- 利用matlab软件求数列的中值,matlab求两个数列的方差
matlab怎么求矩阵所有元素的期望和方差? 标准差s=std(X(1:end),flag)flag=0,采用1/(N-1)的系数,flag=1,采用1/(N)的系数 matlab用var函数算出的方 ...
- c语言叠罗汉问题解决思路,如何利用分治算法解决 ‘叠罗汉’ 问题,也叫作汉诺塔问题...
问题: 将A塔的所有盘子移动到C塔,期间可借助B塔,但一直要保证大盘下,小盘上 使用java写了分治算法,化大为小,分而治之,加上递归,便可轻松解决这个问题! static int step = 0; ...
最新文章
- 实验室蒋田仔研究员:脑网络组图谱近10年研究详解【附PPT】
- python【蓝桥杯vip练习题库】ADV-304矩阵转置
- web工程自动部署(tomcat服务器)
- Android仿IOS的AssistiveTouch的控件EasyTouch实现
- android 多个类的对象,android – 为多个对象使用泛型类(actionBar选项卡)
- 寻找不合群的数据(异常值)
- bzoj 4552: [Tjoi2016Heoi2016]排序
- erp故障处理流程图_PLC故障常见原因及处理方法!
- hibernate简单应用
- Java入门学习思维导图
- 丢失所有凭据后如何重新连接到SQL Server实例
- 爱荷华大选 App 投票酿闹剧的反思:为什么我们在软件工程方面如此糟糕?
- 关于 redis crackit 安全事件分析
- 《solidity学习笔记》chapter 2-solidity基础知识
- matlab整数规划分支计算,分支定界法求线性整数规划
- MAC m1 PRO 安装安卓手机模拟器
- php生成随机姓名,PHP随机生成中国人姓名的类
- 点击按钮变灰并开始倒计时60秒
- BZOJ4379: [POI2015]Modernizacja autostrady
- js中字符串截取函数及其方法
热门文章
- plc里的二进制 用计算机,如何理解二进制和十六进制(电工入门PLC知识普及)...
- 深度神经网络预测模型,神经网络预测未来数据
- SQL Server2008r2审计配置
- linux用5块磁盘组rid5,raid10 五块硬盘/raid5(三块使用,两块备份)
- HighTec软件如何申请License
- 莫烦Python_优化器
- winpe查看不到linux硬盘分区,Linux系统入门学习:硬盘分区的陷阱及应对
- 搭建FTP服务器备份vCenter
- MOS管的GS波形分析,教你如何消除MOS管的GS波形振荡~
- 找回XLS工作表保护密码