将长度为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语言,最大子段和(分治法)相关推荐

  1. 分治算法 求第k小元素 O(n) O(nlog2^n)

    BFPRT算法:时间复杂度O(n)求第k小的数字(分治算法+快排) 各位小伙伴,由于本篇文章代码太过杂乱.我于 2018年12月25日 对文中介绍的算法进行了重写.点击上面的蓝色字体,可以阅读重写后的 ...

  2. 有n 个长为m+1 的字符串,求前后m个字符匹配所能形成的最长字符串链:利用弗洛伊德算法求最长路径...

    有n 个长为m+1 的字符串,如果某个字符串的最后m 个字符与某个字符串的前m 个字符匹配,则两个字符串可以联接,问这n 个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误. 把字符串看成 ...

  3. 利用Kuhn-Munkras算法求最小权值匹配

    本文参考博客: http://blog.csdn.net/zhangpinghao/article/details/12242823(代码参考该博客) http://philoscience.itey ...

  4. 分治算法求n个元素的最大值和最小值

    分治算法求n个元素的最大值和最小值 算法思想:         1.将n个数均分为s1和s2         2.分别求解s1和s2的最大值和最小值            s1最大值为max1,s1最 ...

  5. [计算机数值分析]利用秦九韶算法求多项式的值

    Spring-_-Bear 的 CSDN 博客导航 例:利用秦九韶算法求 p ( x ) = x 5 − 3 x 4 + 4 x 2 − x + 1 p(x)=x^{5}-3x^{4}+4x^{2}- ...

  6. C语言分治算法求中位数,【算法复习】分治算法

    Outline 分治思想和递归表达式 大整数乘法 矩阵乘法的Strassen算法 快速傅里叶变化 基于分治的排序 merge-sort排序 快速排序 排序的下界问题 中位数和顺序统计量 最邻近点对 凸 ...

  7. 分治算法求乘方a^b 取余p(divide and conquer)

    传统的计算方法为循环n个a相乘.时间复杂度为O(n). 如用分治算法,效率可提升至O(lgn). 结合recursive有 double pow(int a, int n){if(n==0)retur ...

  8. 利用matlab软件求数列的中值,matlab求两个数列的方差

    matlab怎么求矩阵所有元素的期望和方差? 标准差s=std(X(1:end),flag)flag=0,采用1/(N-1)的系数,flag=1,采用1/(N)的系数 matlab用var函数算出的方 ...

  9. c语言叠罗汉问题解决思路,如何利用分治算法解决 ‘叠罗汉’ 问题,也叫作汉诺塔问题...

    问题: 将A塔的所有盘子移动到C塔,期间可借助B塔,但一直要保证大盘下,小盘上 使用java写了分治算法,化大为小,分而治之,加上递归,便可轻松解决这个问题! static int step = 0; ...

最新文章

  1. 实验室蒋田仔研究员:脑网络组图谱近10年研究详解【附PPT】
  2. python【蓝桥杯vip练习题库】ADV-304矩阵转置
  3. web工程自动部署(tomcat服务器)
  4. Android仿IOS的AssistiveTouch的控件EasyTouch实现
  5. android 多个类的对象,android – 为多个对象使用泛型类(actionBar选项卡)
  6. 寻找不合群的数据(异常值)
  7. bzoj 4552: [Tjoi2016Heoi2016]排序
  8. erp故障处理流程图_PLC故障常见原因及处理方法!
  9. hibernate简单应用
  10. Java入门学习思维导图
  11. 丢失所有凭据后如何重新连接到SQL Server实例
  12. 爱荷华大选 App 投票酿闹剧的反思:为什么我们在软件工程方面如此糟糕?
  13. 关于 redis crackit 安全事件分析
  14. 《solidity学习笔记》chapter 2-solidity基础知识
  15. matlab整数规划分支计算,分支定界法求线性整数规划
  16. MAC m1 PRO 安装安卓手机模拟器
  17. php生成随机姓名,PHP随机生成中国人姓名的类
  18. 点击按钮变灰并开始倒计时60秒
  19. BZOJ4379: [POI2015]Modernizacja autostrady
  20. js中字符串截取函数及其方法

热门文章

  1. plc里的二进制 用计算机,如何理解二进制和十六进制(电工入门PLC知识普及)...
  2. 深度神经网络预测模型,神经网络预测未来数据
  3. SQL Server2008r2审计配置
  4. linux用5块磁盘组rid5,raid10 五块硬盘/raid5(三块使用,两块备份)
  5. HighTec软件如何申请License
  6. 莫烦Python_优化器
  7. winpe查看不到linux硬盘分区,Linux系统入门学习:硬盘分区的陷阱及应对
  8. 搭建FTP服务器备份vCenter
  9. MOS管的GS波形分析,教你如何消除MOS管的GS波形振荡~
  10. 找回XLS工作表保护密码