kadane算法_使用KADANE的算法求最大子阵列和
kadane算法
What is a sub-array?
什么是子阵列?
A sub-array is basically an array's contiguous part. For example, if we have an array of integers [1,2,3] so the sub-arrays that we can form from the given array are [1], [2] , [3] , [1,2] , [2,3] , [1,2,3].
子数组基本上是数组的连续部分。 例如,如果我们有一个整数数组[1,2,3],那么我们可以从给定数组形成的子数组为[1],[2],[3],[1,2],[ 2,3],[1,2,3] 。
So in the above example the sum of all the respective sub-arrays are 1,2,3,3,5,6. So here in this problem, we are required to find the maximum sub-array sum that could be obtained from a sequence of integers, which is 6 in the above case.
因此,在上面的示例中,所有各个子数组的总和为1,2,3,3,5,6 。 因此,在此问题中,我们需要找到可以从整数序列获得的最大子数组和,在上述情况下为6 。
So many algorithms could be opted to solve the above problem, for example, a simple brute-force algorithm can be → that we can simply compute the sum of all the sub-arrays then loop through all those sums to compute maximum of those, but this algorithm will take O(N*N*N) time or in the best case O(N*N) if we try to do some pre-computation by making a cumulative some array also called a prefix sum array.
可以选择很多算法来解决上述问题,例如,可以使用简单的蛮力算法→这样我们就可以简单地计算所有子数组的总和,然后循环遍历所有这些总和以计算出这些总和的最大值。如果我们尝试通过使累积的某个数组也称为前缀和数组来进行一些预计算,则此算法将花费O(N * N * N)时间,或者在最佳情况下为O(N * N) 。
So now why should we prefer KADANES's ALGORITHM?
那么,现在为什么我们应该选择KADANES的算法 ?
It is because this algorithm can solve our problem in O(N) time that is we can obtain the maximum sub-array sum in linear time complexity which is the most optimal solution for our task.
因为该算法可以解决O(N)时间的问题,所以我们可以获得线性时间复杂度的最大子数组和,这是我们任务的最佳解决方案。
So let us now quickly try to understand the Kadane's Algorithm in two simple steps.
因此,让我们现在通过两个简单的步骤快速尝试理解Kadane算法 。
KADANE算法 (KADANE's algorithm)
Initialize two variables named CS (current sum) and MS (max sum) with 0
用0初始化两个名为CS(当前和)和MS(最大和)的变量。
Loop for each element of the array and do these below tasks for each iteration,
循环访问数组的每个元素,并为每次迭代执行以下任务,
- CS = CS + ar[i]
- If(CS<0) then CS=0
- (C) If(MS<CS) then MS=CS
Description: So basically if we have to find the maximum sub-array sum of a given array then the most optimal solution is KADANE'S ALGORITHM, which can easily perform the desired task in linear time complexity that is it will take O(N) time.
描述:因此基本上,如果我们必须找到给定阵列的最大子阵列总和,则最佳解决方案是KADANE算法 ,该算法可以轻松地以线性时间复杂度执行所需任务,这将花费O(N)时间。
SO now let us quickly jump to the coding part!
现在让我们快速跳转到编码部分!
Code:
码:
#include <iostream>
using namespace std;
int main()
{cout<<"Enter the size of an array: ";
int n;
cin>>n;
int ar[100],cs,ms;
ms=0;cs=0;
cout<<"Enter the array elements:"<<endl;
for(int i=0;i<n;i++)
cin>>ar[i];
for(int i=0;i<n;i++)
{cs+=ar[i];
if(cs<0)
{cs=0;
}
ms=max(cs,ms);
}
cout<<"The maximum subarray sum is: "<<endl;
cout<<ms;
return 0;
}
Output
输出量
Enter the size of an array: 6
Enter the array elements:
1 2 3 -4 6 -1
The maximum subarray sum is:
8
翻译自: https://www.includehelp.com/algorithms/find-the-maximum-sub-array-sum-using-kadanes-algorithm.aspx
kadane算法
kadane算法_使用KADANE的算法求最大子阵列和相关推荐
- etc的常见算法_几个常用算法的适应场景及其优缺点(非常好)
本文主要回顾下几个常用算法的适应场景及其优缺点! 机器学习算法太多了,分类.回归.聚类.推荐.图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验. ...
- mysql区间算法_「五大常用算法」一文图解分治算法和思想
前言 分治算法(divide and conquer)是五大常用算法(分治算法.动态规划算法.贪心算法.回溯法.分治界限法)之一,很多人在平时学习中可能只是知道分治算法,但是可能并没有系统的学习分治算 ...
- 通达信 移动平均算法_单片机数字滤波的算法
单片机主要作用是控制外围的器件,并实现一定的通信和数据处理.但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算.下面主要是介绍如何用单片机实现数字滤波. 在单片机进 ...
- python分治算法_黄哥Python:分治算法(Divide-and-Conquer)
分治算法(Divide-and-Conquer) 在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例.分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这 ...
- dijkstra算法_最小树——Dijkstra算法及Python实现
#文章首发于公众号"如风起". 原文链接: 最小树--Dijkstra算法及Python实现mp.weixin.qq.com 最小树问题是一类非常简单的网络最优化问题,它在许多 ...
- 人工智能算法_人工智能的灵魂——算法
人工智能有三驾马车:数据.算法.算力.本文重点介绍算法相关的知识. 本文将介绍算法在人工智能里的概念,算法的4个特征.6个通用方法.以及在选择算法时需要注意的3个点. 什么是算法? 简单的说,算法就是 ...
- kmeans算法_实战 | KMeans 聚类算法
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...
- java 哈希一致算法_一致哈希算法Java实现
一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...
- 麻雀优化算法_多种智能优化算法应用案例分享-附代码
1.智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割 智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割-附代码_Jack旭的博客-CSDN博客blog.csdn.net 2.智能优化算法 ...
最新文章
- 读书印记 - 《清醒:如何用价值观创造价值》
- CTFshow 命令执行 web41
- PMCAFF | App竞品分析报告:美丽说VS蘑菇街
- python基础教程:global的用法
- Cocos Creator 3D 材质系统:曲面效果如何实现?
- php ismethod,结合php类三种属性说明is_callable和method_exists简单区别
- 从0到1使用Kubernetes系列(四):搭建第一个应用程序
- c++ 中文乱码_Visual Studio Code 中 CodeRunner 插件的输出窗口中文乱码
- 无法序列化会话状态。请注意,当会话状态模式为“StateServer”或“SQLServer”时,不允许使用无法序列化的对象或 MarshalByRef 对象。...
- 「AI 口罩检查官」上线,0.3 秒检查口罩佩戴情况
- SpringBoot入门 2
- ExtJS学习------Ext.define的继承extend,用javascript实现相似Ext的继承
- 数学建模 -- 层次分析法(AHP)
- Python植物大战僵尸源码分享
- 如何配置Gitlab的双因子验证(Two-Factor Authentication)
- 光功率 博科交换机_交换机是否支持查看光模块型号及收发光功率
- VUE报错rowserslist: caniuse-lite is outdated. Please run the following command: `npx browser
- linux如何把文件大小改为0,关于文件系统:Linux删除大小为0的文件
- 基于Python的图片批量转PDF实现
- JDK的下载与安装配置教程2022最新
热门文章
- 共享内存简介及docker容器的shm设置与修改
- hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix
- 人脸识别代码_10行代码实现人脸识别
- python求平行四边形面积_python 已知平行四边形三个点,求第四个点的案例
- unity 畸变_unity3d 几种镜头畸变
- mysql百万数据根据索引查询_mysql创建多列索引查询百万表数据的性能优化经验分享...
- phpexcel 获取工作簿名称_工作分享 | Excel快速汇总考勤
- 北方人思想为什么落后_广西人为什么很少到北方打工?
- Linux下的一些简单网络配置命令介绍
- 性能测试总结(一)---基础理论篇(转载)