最大子段和c(c语言实现)

1,题目

2,各种算法

  • 暴力解决,就是所有的情况都遍历一遍,然后说,我找到最牛逼的啦
int MaxSubseqSum1(int A[], int N, int* pidxStart, int* pidxEnd)
{ int sum = A[0], tempSum = 0;int i, j, k;*pidxStart = 0, *pidxEnd = 0;for (i = 0; i < N; i++) {for (j = i+1; j < N; j++) {tempSum = 0;for(k = i; k <= j; k++) {tempSum += A[k];}if (tempSum > sum) {sum = tempSum;*pidxStart = i;*pidxEnd = j;}}}return sum;
}

粗略的看三重循环,算法复杂度是O(n^3),空间上没有大空间的开辟。

  • 好一点的暴力解决

int MaxSubseqSum2(int A[], int N, int* idxStart, int* idxEnd)
{int ThisSum, MaxSum = 0;int i, j;for (i = 0; i < N; i++) { //遍历所有的起点,以i为i起点ThisSum = 0;for (j = i; j < N; j++) { //j为终点ThisSum += A[j];if (ThisSum > MaxSum) {MaxSum = ThisSum;*idxStart = i;*idxEnd = j;}}}return MaxSum;
}

算法复杂度O(n^2),和第一个算法相比到底是哪个地方优化了呢?原因在于很多子段和有重叠的地方,第一个算的法重复计算重复计算特别多,第二个相对少多了,但还是有很多子段和是重叠计算的,这说明这个算法还有很大的提高的空间。

  • 分治算法

int max(int a, int b, int c) 
{int temp = a >= b ? a : b;return temp >= c ? temp : c;
}int MaxSubseqSum3(int A[], int beg, int end)
{if (beg == end) {return A[beg];}int mid = (beg + end) / 2;int left, right, lSum = A[mid], thislSum = 0, rSum = A[mid+1], thisrSum = 0;int i;left = MaxSubseqSum3(A, beg, mid);right = MaxSubseqSum3(A, mid+1, end);for (i = mid; i >= 0; i--) {thislSum += A[i];if (thislSum > lSum) {lSum = thislSum;}}for (i = mid+1; i <= end; i++) {thisrSum += A[i];if (thisrSum > rSum) {rSum = thisrSum;}}return max(left, lSum+rSum, right);
}

分治算法因为使用到递归,所以一般实际中也不会用,因为在实际中数据偏大,递归过程中会开辟很多的空间,造成空间超出内存。其优美之处在于其算法复杂度的数学分析上,其算法复杂度是O(n * ln(n)),具体参看《算法导论》。

  • 在线算法,先看其算法

//在线算法
int MaxSubseqSum4(int A[], int N)
{int i = 0;int thisSum = 0, sum = 0;for (i = 0; i < N; i++) {thisSum += A[i];if (thisSum > sum) {sum = thisSum;} else if (thisSum <= 0) {thisSum = 0;}}return sum;
}


很多数学概念学起来是枯燥无味的,因为它们是现实世界的抽象,完全扭曲了我们观察事物的直观感觉,另一方面,数学是真正的抓住了核心和本质,所以很多繁杂的现象,可能用一个方程式子就完全描述了,譬如说爱因斯坦的质量方程,麦克斯韦的电磁方程组。

看上面的图,我们用数学语言描述一个过程:我们要寻找物质A,寻找的范围是T,可是T的范围太大了,可能花费多少力气都完不成;由于物质A具有性质B,那么B性质就是物质A的必要条件(也就是必须满足的条件),在T中发现满足B性质的是范围C,那么我们直接在C范围中寻找物质A就行了,而且范围C非常小,使得我们很快的找到了物质A。


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

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

相关文章

sql语法,未完待续

MS SQLSEVER 是结构化查询语言&#xff0c;标准化查询语言&#xff0c;面向自然语言&#xff0c;编程语言。 做为编程语言&#xff0c;对编程却没卵用&#xff0c;是辅助查询用的。它没类库。 做为编程语言肯定有语法。 变量 declare i int set i 1 print i–消息 select i --…

2021-07-14

pat甲级1097 我还用数组下标从1到n的方式遍历链表&#xff0c;真菜。 csdn上有的博客的题解对输入排序了&#xff0c;有的没排序。我还是通过参考别人的代码过了。 下面代码的思路是一个数组&#xff0c;通过节点的标记值来分离留下的和删除的&#xff0c;我的想法是两个数组分…

1007. Maximum Subsequence Sum (25)

Sample Input: 10 -10 1 2 3 4 -5 -23 3 7 -21 Sample Output: 10 1 4 错误代码如下&#xff1a; #include <stdio.h>int MaxSubseqSum4(int A[], int N, int* pstart, int* pend) {int i 0;int tempStart; //记录最大子段和位置int thisSum 0, sum 0;tempStart …

关于 ASP.NET MVC 中的视图生成

在 ASP.NET MVC 中&#xff0c;我们将前端的呈现划分为三个独立的部分来实现&#xff0c;Controller 用来控制用户的操作&#xff0c;View 用来控制呈现的内容&#xff0c;Model 用来表示处理的数据。 从控制器到视图 通常&#xff0c;在 Controller 中&#xff0c;我们定义多个…

2021-07-21

leetcode113 看了很多别人的题解&#xff0c;还是感觉没太懂&#xff0c;主要是因为dfs和bfs没彻底会用&#xff0c;还是得找专门的题练练。 得早睡早起呀&#xff0c;假期学习真就靠自律呀。 *** Definition for a binary tree node.* struct TreeNode {* int val;* …

实验项目 3-4:一元多项式的乘法与加法运算

代码如下&#xff1a; /*************************************************************************> File Name: AddPoly.c> Author: YueBo> Mail: yuebowhu163.com> Created Time: 2016年12月17日 星期六 13时00分35秒***************************************…

SQL自定义完整性

自定义完整性。&#xff08;事务&#xff09; 事务的四个特性&#xff1a; 原子性 : 事务中SQL语句是一个整体, 不可分离,要么都执行、要么都不执行 一致性 : 事务前后数据保持一致 隔离性 : 事务中不允许其他事务介入 永久性 : 事务执行之后对数据表的修改是永久的 Expectatio…

伪类和伪元素

选择第一个子元素&#xff1a;first-child li:first-child{text-decoration: underline;}li:last-child{color: red;}p:first-child{font-style: italic;} <p>xiaoren</p><ul><li>Insert Key</li><li>Turn Key<strong>clockwise<…

T-SQL存储过程

存储过程。即T-SQL里的方法。类似封装的思想。 基本语法如下&#xff1a; create proc 方法名 name 默认值可不写&#xff0c;传入的参数 数据类型 , p变量名 数据类型 output (返回值) asSql代码 go--调用上面方法 declare variable 和p一样的类型 exec 方法名 传值 , var…

Extjs4开发中的一些问题

1. 子frame刷新的问题 一般在jsp里面&#xff0c;要实现界面跳转&#xff0c;有很多方法&#xff0c;最典型的就是window.location.href"href",但是在嵌套有iframe框架的页面布局&#xff0c;使用上述语句&#xff0c;只会使iframe本身实现跳转&#xff0c;如果遇到…

TSQL索引与视图

创建视图 简化sql 代码&#xff0c;还有&#xff0c;给予权限&#xff08;只能查指定的列&#xff09; create view 视图名 as sql代码&#xff0c;不要有同名列&#xff08;只能一句sql代码&#xff09; go select * from 视图名 &#xff08;最好不要用视图做更改操作&#…

jacob 实现Office Word文件格式转换

关于jacob用法&#xff0c;百度一下就会发现几乎都是复制2004年一个代码&#xff0c;那段代码实现的是从一个目录读取所有doc文件&#xff0c;然后把它转html格式。 为了便习学习和使用&#xff0c;我把代码看懂后精简了一下&#xff0c;得出不少新结论&#xff0c;拿出来和大家…

2021-07-22

leetcode547 第一次做这种题&#xff0c;有点生&#xff0c;借鉴 class Solution { public:void dfs(vector<vector<int>>& isConnected,vector<int>&isvisited,int i){for(int j0;j!isConnected.size();j){if(isConnected[i][j]1&&isvisit…

树的同构

输入样例1&#xff08;对应图1&#xff09;&#xff1a;8A 1 2B 3 4C 5 -D - -E 6 -G 7 -F - -H - -8G - 4B 7 6F - -A 5 1H - -C 0 -D - -E 2 -输出样例1:Yes输入样例2&#xff08;对应图2&#xff09;&#xff1a;8B 5 7F - -A 0 3C 6 -H - -D - -G 4 -E 1 -8D 6 -B 5 -E - -…

.Net 中的封装知识点

c # 中的封装 1&#xff0c;类与对象 生活中现有对象&#xff0c;然后人们先对其归类。 而程序中&#xff0c;先有类&#xff0c;再有对象。有了这些类&#xff0c;才能生成实际的对象&#xff0c;即类的实例化。&#xff08;类名new 一个对象&#xff09; 对象是从类里那东西的…

[家里蹲大学数学杂志]第236期钟玉泉复变函数论前六章第二组习题参考解答

第一章 复数与复变函数 1将复数 $$\bex \frac{(\cos5\varphii\sin 5\varphi)^2}{(\cos3\varphi-i\sin 3\varphi)^3} \eex$$ 化为指数形式. 解答: 由 Euler 公式, $$\bex \mbox{原式}\frac{(e^{i5\varphi})^2}{(e^{-i3\varphi})^3} e^{i[10\varphi-(-9\varphi)]}e^{19\varphi…

思想

思想是自由的&#xff0c;鞭策和束缚下的思想不会深刻&#xff0c;所以不要强迫自己去思考和学习&#xff0c;除非你在那里找到了乐趣&#xff1b; 思想是懒惰的&#xff0c;稍不留神就可能走入邪道&#xff0c;或者呼呼的在那里享受睡觉&#xff1b; 所以最好的办法是&#…