对“最大子序列和问题”的一点思考

简介:
 穷举法是最容易想出的解法,反正就是把所有能举出的子序列都算一遍和,找出最大的一个就是,复杂度O(N*N)。
      对于分治法来说,“分“是比较简单的,对半分成求解左右两个序列的最大子序列,不过终止条件应该是什么呢?我的想法是到只剩一个元素的序列的话,直接返回这个元素就是了,可书上都是如果大于0,返回此元素,若小于0,则返回0,这里想不明白。最难的部分应该是“治”,要考虑跨左右两个子序列的情况。
int MaxSubSeqSum(int a[],int left,int right)
{
    if(left==right)
    {
        return a[left];
    }
    int mid = (left+right)/2;
    int i,lSum=0,rSum=0,tmpLMax=0,tmpRMax=0;
    for(i=mid;i>=left;--i)
    {
        lSum+=a[i];
        if(lSum>tmpLMax)
        {
            tmpLMax = lSum;
        }
    }
    for(i=mid+1;i<=right;++i)
    {
        rSum+=a[i];
        if(rSum>tmpRMax)
        {
            tmpRMax = rSum;
        }
    }
    int overMax = tmpLMax+tmpRMax;
    int lMax = MaxSubSeqSum(a,left,mid);
    int rMax = MaxSubSeqSum(a,mid+1,right);
    return  max(max(overMax,lMax),rMax);
}

      动态规划的方法就太巧妙了,巧就巧在它扫描时会跟踪序列上升还是下降的趋势,从而把前面不适合的部分都给抛弃了,就一路走一路抛,并且同时把合适的记忆住了。
int MaxSubSeqSum2(int a[],int len)
{
    int tmpSum=0,maxSum = 0;
    for(int i=0;i<len;++i)
    {
        tmpSum+=a[i];
        if(tmpSum>maxSum)
        {
           maxSum = tmpSum;
        }
        else if(tmpSum<0)
        {
             tmpSum=0;
        }
    }
    return maxSum;
    
}



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2008/04/03/1136224.html,如需转载请自行联系原作者
目录
相关文章
|
JavaScript
Vue基础学习——Vue3的Options-API
Vue基础学习——Vue3的Options-API
267 0
|
9月前
|
机器学习/深度学习 人工智能 编解码
Inf-DiT:清华联合智谱AI推出超高分辨率图像生成模型,生成的空间复杂度从 O(N^2) 降低到 O(N)
Inf-DiT 是清华大学与智谱AI联合推出的基于扩散模型的图像上采样方法,能够生成超高分辨率图像,突破传统扩散模型的内存限制,适用于多种实际应用场景。
248 21
Inf-DiT:清华联合智谱AI推出超高分辨率图像生成模型,生成的空间复杂度从 O(N^2) 降低到 O(N)
|
8月前
|
存储 人工智能 并行计算
KTransformers:告别天价显卡!国产框架让单卡24G显存跑DeepSeek-R1 671B大模型:推理速度飙升28倍
KTransformers 是由清华大学和趋境科技联合推出的开源项目,能够优化大语言模型的推理性能,降低硬件门槛。支持在仅24GB显存的单张显卡上运行671B参数的满血版大模型。
2077 8
KTransformers:告别天价显卡!国产框架让单卡24G显存跑DeepSeek-R1 671B大模型:推理速度飙升28倍
|
数据安全/隐私保护 虚拟化 Windows
可能是最全的:虚拟机使用失败解决方案汇总
可能是最全的:虚拟机使用失败解决方案汇总
988 0
|
存储 人工智能
西门子S7-200 SMART Modbus RTU通信,如何编写从站程序
上篇文章中我们通过一个例子学习了西门子S7-200 SMART中断程序的编写,本篇我们开始学习S7-200 SMART的Modbus RTU通信。通过集成RS485端口或可选通信板SM CM01的RS485/RS232端口,S7-200 SMART可以作为Modbus RTU主站或者从站同多个设备进行通信。
西门子S7-200 SMART Modbus RTU通信,如何编写从站程序
|
算法 Java 索引
JVM垃圾回收
如题分享一些关于JVM相关的概念理论
269 0
JVM垃圾回收
|
算法 测试技术
LeetCode每日一题(7)——旋转函数
旋转函数 1.题目 2.示例 3.思路 4.代码 5.复杂度分析
180 0
LeetCode每日一题(7)——旋转函数
|
.NET 中间件 网络架构
ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Configure() 方法用于定义请求管道中的中间件 ASP.NET Core 中的中间件控制我们的应用程序如何响应 HTTP 请求,它还可以控制我们的应用程序在发生错误时的显示的内容,它是我们认证和授权用户执行特定操作的关键部分 中间件 那么,什么是中间件呢? 中间件是一种装配到应用程序管道以处理请求和响应的组件。
1555 57
|
消息中间件 Linux 数据安全/隐私保护
【RabbitMQ】2、RabbitMQ安装(Centos版)(下)
五、Web访问 六、用户管理 七、延时插件
142 0
【RabbitMQ】2、RabbitMQ安装(Centos版)(下)
剑指offer(19-24)题解
剑指offer(19-24)题解
剑指offer(19-24)题解