最大子序列求和_算法——求最大子段和

7e2a77911b36cb8f685fee2bad478c8f.png

一、问题描述

给定由n个整数组成的序列(a_1,a_2,…,a_n),最大子段和问题要求该序列形如

的最大值(1≤i≤j≤n),当序列中所有整数均为负整数时,其最大子段和为0。

例如,序列(-20, 11, -4, 13, -5, -2)的最大子段和为:

注意:必须是连续整数的和。

二、分治策略

(1)划分

–按照平衡子问题的原则,将序列(

,
,…,
) 划分成长度相同的两个子序列(
,…,
)和(
,…,
),则会出现以下三种情况:

,
,…,
的最大子段和 =
,…,
的最大子段和;

,
,…,
的最大子段和 =
,…,
的最大子段和;

,
,…,
的最大子段和 =
, 且1≤i≤⌊
⌋ , ⌊
⌋+1≤j≤n

(2)求解子问题

对于划分阶段的情况①和②可递归求解

对情况③,分别计算

b109530cf690814c73393988d138b0ae.png

为情况③的最大子段和。

(3)合并

–比较在划分阶段的三种情况下的最大子段和,取三者之中的较大者为原问题的解。

ec75a973a055a1a867b61c46511d9741.png
步骤示意图

三、算法实现

  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),所以,存在如下递推式:

207df6c5f6cb0f4db7fecfa08fe0b0bf.png

综上,时间复杂性为O(nlog2n)。

内容有待完善,请客官等待更新!

562849aa2b5c067935a69f007bad1ee4.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

seo黑帽劫持用的php,黑帽seo 论坛:黑帽seo防止网站被k的js劫持跳转代码

由于目前百度搜索百度搜索引擎对于js代码还没有办法完全辨别&#xff0c;因此也就出现了运用js代码跳转的黑帽优化提升手法。现如今在网络上有关js跳转代码不计其数&#xff0c;但是作为黑帽优化提升的seo手法之一&#xff0c;如何确保有效降低跳转的网址被k危害性&#xff0c;…

oracle 同义词_【干货7】Oracle知识关键代码摘要

&#xff08;如果我分享的干货内容对你有帮助&#xff0c;可以通过赞或者评论的方式告诉我&#xff0c;我会持续分享&#xff1b;或者留言你想要的IT方面的支持&#xff0c;我将分享大家感兴趣的IT类技术干货&#xff1b;如果没有收到大家的反馈&#xff0c;10天后我将停止技术…

qt做的接收串口数据并显示曲线_QT无人机地面站设计与制作

近年来&#xff0c;无人机可谓是大火。无论是军事&#xff0c;还是民用&#xff0c;它的地位更是不用说。但&#xff0c;如何利用利用现有技术对无人机的信息进行操作&#xff0c;实现人、机合一呢&#xff1f;“无人机地面站”应运而生&#xff0c;结合仿真系统为地面工作人员…

php直接读取csv文件,php实现的读取CSV文件函数示例

本文实例讲述了php实现的读取CSV文件函数。分享给大家供大家参考&#xff0c;具体如下&#xff1a;function read_csv($cvs) {$shuang false;$str file_get_contents($cvs);for ($i0;$iif($str{$i}") {if($shuang) {if($str{$i1}") {$str{$i} *;$str{$i1} *;} el…

系统背景描述_【计算机论文】管件加工管理系统和数据库的结构探析

摘 要:结合"中国制造2025"及德国"工业4.0"的发展趋势,概述目前国内管件生产加工流程的现状和不足,基于对管件加工过程中管件之间的差别、管件加工批次的混合等特点导致的管理难点分析,介绍管件生产加工管理系统的设计思路和工作流程,并对该系统未来可进一步…

shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)

前言&#xff1a;在shell脚本编程中&#xff0c;我们经常会用到切割字符串&#xff0c;类似于python中的split。但shell中的命令比较五花八门&#xff0c;小编也是苦扰了很久&#xff0c;终于下定决心对它做一个总结。方法一&#xff1a;字符串替换法#/bin/bashstring"Hel…

本机用域名不能访问_域名注册申请网站域名注意事项

互联网用户越来越多&#xff0c;也有越来越多人搭建网站&#xff0c;做个人博客也好、搭建企业官网也好&#xff0c;数量都在逐步上升。做网站的数量在上升&#xff0c;域名注册量肯定也在上升。有的朋友头一次注册域名&#xff0c;对域名不了解也不知道申请网站域名该注意哪些…

电脑微信不用手机确认_不用安装第三方软件,手机投屏到电脑就这么简单

在头条上收到网友的提问&#xff0c;如果想把手机的内容投影到电脑上&#xff0c;该怎么做&#xff1f;为此我做一个简单的教程&#xff0c;不用安装第三方软件&#xff0c;就用Windows 10自带的无线显示功能和安卓手机的自带无线显示功能来实现。前提条件&#xff1a;1. 电脑是…

tomcat7 https 拒绝连接_物与网怎么连接呢?物联网架构及五大通信协议

消息触达能力是物联网(internet ofthings, IOT)的重要支撑&#xff0c;而物联网很多技术都源于移动互联网。柳猫将阐述移动互联网消息推送技术在物联网中的应用和演进。一、物联网架构和关键技术从开发的角度&#xff0c;无线接入是物联网设备端的核心技术&#xff0c;身份设备…

安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...

5月已经过去&#xff0c;同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里&#xff0c;智能手机的性价比如何呢&#xff1f;考虑到现在已经开始步入5G时代&#xff0c;所以智能手机的价格也是普遍上涨&#xff0c;想要找到一款性价比不错的手机似乎有些难度。现…

tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

当两个线程相互等待对方释放资源时&#xff0c;就会发生死锁。Python 解释器没有监测&#xff0c;也不会主动采取措施来处理死锁情况&#xff0c;所以在进行多线程编程时应该采取措施避免出现死锁。一旦出现死锁&#xff0c;整个程序既不会发生任何异常&#xff0c;也不会给出任…

虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer

本文主要是关于使用ZeroTier创建虚拟局域网来实现免费远程桌面的方案的体验&#xff0c;包含了一些对不同方案的优缺点的描述。最近因为疫情在家不得不通过远程连接实验室电脑&#xff0c;有两种基本的解决方案&#xff1a;连接学校VPN&#xff0c;然后使用系统自带的远程桌面连…

java复制的函数会报错,2 面试题之面向对象

大纲&#xff1a;一、两个重要概念① 请说明类和对象的区别类是对某一类实物的描述&#xff0c;是抽象的&#xff1b;对象是一个实实在在的个体&#xff0c;是类的一个实例&#xff1b;② 解释一下什么是类加载机制、双亲委派模型&#xff0c;好处是什么&#xff1f;类加载机制…

sql 除以_不可思议的SQL排名函数,被您无视了么?

经常写SQL脚本的朋友&#xff0c;对查询的多样化要求可能会经常头疼。数据库SQL的语法是固定的、但应用要求却是千差万别的。依靠我们所掌握的知识&#xff0c;大部分的查询需求我们还是有办法的解决的&#xff0c;但总有那么一些要求&#xff0c;把我们搞的非常被动。今天我们…

自制hdmi线一头改vga图_VGA连接线接口定义及引线焊接教程,VGA线不够长时可用网线代替?...

最近做的多媒体功能插座&#xff0c;含有VGA、HDMI、网口、音频输入等接口&#xff0c;由于穿线时没有穿成品线缆&#xff0c;VGA和HDMI接头需要焊接&#xff0c;那么怎么焊接呢&#xff1f;VGA接口15根针&#xff0c;其对应接口定义如下&#xff0c;其下图&#xff1a;一般在V…

sql 分组求和_数据仓库工具–Hive(归纳笔记第六部分:SQL练习)

写在开头&#xff1a;本章是Hive教程第六部分&#xff0c;着重于归纳SQL编写。文章内容输出来源&#xff1a;拉勾教育大数据高薪训练营。本章将介绍Hive中常见的面试题和自己的解答思路&#xff0c;以供大家训练和记忆。SQL面试题1、求连续7天登录的用户— 数据。uid dt status…

Tableau上面地图与条形图结合_何为计算的详细级别,认识Tableau中的Level of Detail...

何为详细级别详细级别&#xff0c;英文Level of detail&#xff0c;Tableau用它来描述计算发生的级别&#xff0c;或者说计算在哪个层级发生。由于BI工具的相似性&#xff0c;在Power BI里也可以用类似的思想对计算进行描述&#xff0c;但Power BI并没有与之对应的专门的词汇。…

java 异步读表,Java实现异步回调-Go语言中文社区

回调(callback)在我们做工程过程中经常会使用到&#xff0c;今天想整理一下回调的原理和使用方法。回调的原理可以简单理解为&#xff1a;A发送消息给B&#xff0c;B处理完后告诉A处理结果。再简单点就是A调用B&#xff0c;B调用A。那么是如何实现的呢&#xff1f;一般而言&…

mysql 按时间累计计算_精通MySQL索引背后的数据结构及算法原理

本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;mysql支持诸多存储引擎&#xff0c;而各种存储引擎对索引的支持也各不相同&#xff0c;因此MySQL数据库支持多种索引类型&#xff0c;如BTree索引&#xff0c;哈希索引&a…

matlab数据游标属性设置,将节点属性添加到图论图数据提示

绘制具有数据提示的 GraphPlot 对象创建随机有向图的 GraphPlot 图对象。将额外的节点属性 wifi 添加到该图。rng defaultG digraph(sprandn(20, 20, 0.05));G.Nodes.wifi randi([0 1], 20, 1) 1;h plot(G);向图中添加数据提示。利用数据提示&#xff0c;您能够选择图论图中…