最大子段和算法 - 范文中心

最大子段和算法

07/10

最大子段和n 3算法

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14. int MaxSubseqSum1( int A[], int N ) { int ThisSum, MaxSum = 0; int i, j, k; for( i = 0; i MaxSum ) /* 如果刚得到的这个子列和更大 */ MaxSum = ThisSum; /* 则更新结果 */ } /* j循环结束 */ } /* i循环结束 */ return MaxSum; }

最大子段和n 2算法

int MaxSubseqSum2( int A[], int N )

{ int ThisSum, MaxSum = 0;

int i, j;

for( i = 0; i

ThisSum = 0; /* ThisSum是从A[i]到A[j]的子列和 */

for( j = i; j

ThisSum += A[j]; /*对于相同的i ,不同的j ,只要在j-1次循环的基础上累加1项即可*/ if( ThisSum > MaxSum ) /* 如果刚得到的这个子列和更大 */

MaxSum = ThisSum; /* 则更新结果 */

} /* j循环结束 */

} /* i循环结束 */

return MaxSum;

}

最大子段和nlongn 算法(分治)

int maxSum(int a[],int left, int right)

{

int sum = 0;

if(left == right) //如果序列长度为1,直接求解

{

if(a[left] > 0) sum = a[left];

else sum = 0;

}

else

{

int center = (left + right) / 2; //划分

} int leftsum = maxSum(a,left,center); //对应情况1,递归求解 int rightsum = maxSum(a, center + 1, right);//对应情况2, 递归求解 int s1 = 0; int lefts = 0; for(int i = center; i >= left; i--) //求解s1 { lefts += a[i]; if(lefts > s1) s1 = lefts; //左边最大值放在s1 } int s2 = 0; int rights = 0; for(int j = center + 1; j s2) s2 =rights; } sum = s1 + s2; //计算第3钟情况的最大子段和 if(sum

最大子段和动态规划算法

int DY_Sum(int a[],int n)

{

int sum = 0;

int *b = (int *) malloc(n * sizeof(int)); //动态为数组分配空间

b[0] = a[0];

for(int i = 1; i

{

if(b[i-1] > 0)

b[i] = b[i - 1] + a[i];

else

b[i] = a[i];

}

for(int j = 0; j

{

if(b[j] > sum)

sum = b[j];

}

delete []b; //释放内存

return sum;

}

#include

#include

#include

using namespace std;

#define MAX 10000

int BF_Sum(int a[],int n)

{

int max=0;

int sum=0;

int i,j;

for (i=0;i

{

sum=a[i];

for(j=i+1;j

{

if(sum>=max)

{

max=sum;

}

sum+=a[j];

}

}

return max;

}

int maxSum1(int a[],int left, int right)

{

int sum = 0;

if(left == right) //如果序列长度为1,直接求解

{

if(a[left] > 0) sum = a[left];

else sum = 0;

}

else

{

int center = (left + right) / 2; //划分

int leftsum = maxSum1(a,left,center); //对应情况1,递归求解

int rightsum = maxSum1(a, center + 1, right);//对应情况2, 递归求解

int s1 = 0;

int lefts = 0;

for(int i = center; i >= left; i--) //求解s1

{

lefts += a[i];

if(lefts > s1) s1 = lefts; //左边最大值放在s1

}

int s2 = 0;

int rights = 0;

for(int j = center + 1; j

{

rights += a[j];

if(rights > s2) s2 =rights;

}

sum = s1 + s2; //计算第3钟情况的最大子段和

if(sum

}

return sum;

}

int DY_Sum(int a[],int n)

{

int sum = 0;

int *b = (int *) malloc(n * sizeof(int)); //动态为数组分配空间

b[0] = a[0];

for(int i = 1; i

{

if(b[i-1] > 0)

b[i] = b[i - 1] + a[i];

else

b[i] = a[i];

}

for(int j = 0; j

{

if(b[j] > sum)

sum = b[j];

}

delete []b; //释放内存

return sum;

}

int main()

{

int num[MAX];

int i;

const int n = 40;

LARGE_INTEGER begin,end,frequency;

QueryPerformanceFrequency(&frequency);

//生成随机序列

} cout


相关内容

  • 银行家算法课程设计
    操作系统课程设计报告 题目:银行家算法 安全性算法 院 (系):计算机科学与工程 专 业:软件工程 班 级:130608班 学 生:姚骏川 学 号:130608118 指导教师:姜虹 2015年12月28 目录 摘 要 .......... ...
  • 第8课时-§1.3算法案例--辗转相除法与更相减损术
    课题:§1.3算法案例--辗转相除法与更相减损术 教学目标: 知识与能力:理解辗转相除法与更相减损术中蕴含的数学原理,并能根据这些原理进行算法分析:基本能根据算法语句与程序框图的知识设计完整的程序框图并写出算法程序. 过程与方法:在辗转相除 ...
  • 图像最大内切圆求解算法的研究
    2006年 工 程 图 学 学 报 2006第2期 JOURNAL OF ENGINEERING GRAPHICS No.2 图像最大内切圆求解算法的研究 李 伟, 周朝晖, 严承华 (海军工程大学机械系,湖北 武汉 430033) 摘 要 ...
  • 遗传算法概述
    遗传算法概述 摘要:遗传算法(genetic algorithms, GA)是人工智能的重要新分支,是基于达尔文进化论,在微型计算机上,模拟生命进化机制而发展起来的一门学科.它根据适者生存.优胜劣汰等自然进化规则来进行搜索计算机和问题求解. ...
  • 贪婪算法与压缩感知理论
    第37卷第12期2011年12月 自动化学报 ACTA AUTOMATICA SINICA Vol. 37, No. 12December, 2011 贪婪算法与压缩感知理论 方红1 杨海蓉2 摘要贪婪算法以其重建速度快.重建方法实现简便的 ...
  • 粒子群优化算法及其应用
    2006年第1期信息技术 InformationTechnology 中图分类号:TP391.9 文献标识码:A 文章编号:1009-2552(2006)01-0053-04 粒子群优化算法及其应用 范 娜,云庆夏 (西安建筑科技大学管理科 ...
  • 多目标优化算法综述
    多目标优化算法综述 高鹏 (华北电力大学,电气与电子工程学院,北京,102206) Overview Of Multi-objective Optimization Algorithms Gao peng (College of Elect ...
  • 外文翻译-最小化对称矩阵的最大特征值
    中文:2782字 英文:6007字符 最小化对称矩阵的最大特征值 ON MINIMIZING THE MAXIMUM EIGENVALUE OF A SYMMETRIC MATRIX 摘要:一个重要的优化问题是使一个函数φ(x)最小化,其中 ...
  • 东南大学数据结构 93-20**年
    东南大学93考研题 注意事项 : (1) 答卷上需写清题号,不必抄题 (2) 描述可用你熟悉的一种类高级语言,如类Pascal ,所用主要数据结构及变量的意义须加以注释.必要时算法中应加注释 . 一.回答下列问题 : (共 35分) l 与 ...
  • 简单快速的平面散乱点集凸包算法_金文华
    1999年2月 第25卷第1期北京航空航天大学学报 Journal of Beijing University of Aeronautics and Astronautics February 1999Vol . 25 No . 11) 简 ...