今天一下午在看sharepoint了,又有活干,所以时间比较紧凑,于是想起了前些日子写的求最大子序列之和,作为每日一小题吧,暂做自我安慰吧。
求最大子序列之和,主要要注意他的效率,
1,算法复杂度是O( pow( n, 2 ) )
2,算法复杂度为o(n)
3,还从网上看了一种递归的“分而治之”( divide-and-conquer )的方法。(现在转一下)
比如 4 -3 5 -2 -1 2 6 -2
First Second
把序列分为两部分,那么最长子序列要么在First,要么在Second,要么就既在First又在Second。
第一中情况只要求First的最大子序列(递归调用),第二中情况只要求Second的最大子序列(还是递归调用)。对于第三种情况,只要找到包含First最后一个元素(在例子中是2)在First的最大子序列(例子中是 4,-3,5,-2)和包含Second起始元素(-1)在Second的最大子序列(-1,2,6)然后相加就行了。
这种算法的复杂度计算和计算斐波那契数列的复杂度相似,设 N 个数的执行次数是 T( N ) ,那么 T( N ) = 2*T( N/2 ) + O( N ) 其中T( 1 ) = 1
O( N ) 可以看成 N ,那么可以观察得到 T( N ) = N * logN
分享到:
相关推荐
C++求最大子序列的和 问题:求一个数组 / 序列的满足条件的子数组 / 子序列。 条件: 1. 子数组必须是连续的。 2. 求和即可,不需要返回子数组是哪段。 3. 数组元素为整数。
一个整数序列,求最大子序列的和,C++,The max sub sum of an array.
最大连续子序列
文件给出了四种方式求解子序列的最大和,并给出了具体的代码实现。对于深入探讨算法和程序性能非常有帮助。
求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列. http://blog.csdn.net/ssuchange/article/details/17341693
序列{B,C,B,A}也是X和Y的一个公共子序列,它的长度为4,而且它是X和Y的一个最长公共子序列,因为X和Y没有长度大于4的公共子序列。 最长公共子序列问题就是给定两个序列X={x1,x2,...xm}和Y={y1,y2,...yn},找出X和...
提供了求出最长上升子序列中各个元素的个数以及打印出各个元素的方法,希望能对大家有所帮助。
数组 求连续子序列最大和程序 时间复杂度O(n) 空间复杂度O(1)
解法1—O(N^2)解法 解法2—O(NlgN)解法 解法3—O(N)解法 可以直接在记事本运行
算法设计与分析 最大公共子序列问题 。
1. 将矩阵的某一行看成一个序列,设计算法求该序列的最大子序列。 2. 将矩阵相邻两行对应列的元素相加形成一个新的序列,试分析该子序列中每-一个元素的含义,其最大子序列的含义。 3. 设计算法求解该问题,分析样例...
给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20序列; (-6,2,4,-7,5,3,2,-1,6,-9,10,-2)的最大子序列和为16。 3.用...
实现算法书上的最大公共子序列的查找,利用二维数组,适合学习交流。
最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,...
91、1285:最大上升子序列和(2020.03.14 )
用动态规划求最长公共子序列: 问题:求给定两个序列的最长公共子序列,要求输入两个序列,输出它们的最长公共子序列及其长度值。
Description 对序列X=(x1, x2, .., xm),定义其子序列为(xi1, xi2, .., xik),i1。 请计算两个序列X=(x1, x2, .., ...对每一行中的两个字符串,计算并输出其最大公共子序列的长度。 每一行输入的计算结果输出一行。
带全过程输出的最大公共子序列算法,C++实现。
题目是标准的ACM竞赛题,word文档里包含求最大连续子序列的题目和完整的实验代码,并在VC6.0上运行通过!!!
动态规划的一个计算两个序列的最长... 此时,f[j]中最大的数便是 X 和 Y 的最长公共子序列的长度,依据该数组回溯,便可找出最长公共子序列。 该算法的空间、时间复杂度均为O(n^2),经过优化后,空间复杂度可为O(n)。