算法最大字段和
2014-10-02 13:22
375 查看
实现最大字段和算法,分治法 C++实现.。
#include <iostream> using namespace std; int Max(int array[], int left, int right); int main(int argc, const char * argv[]) { int array[] = {-20, 11, -4, 13, -5, -2}; // 最大子段和为20 int sum = Max(array, 0, 5); cout<<sum<<endl; return 0; } int Max(int array[], int left, int right) { int sum; int center; int leftSum; // 分治的左边值的和 int rightSum; // 分治的右边边值的和 int middeLeftSum = 0; // 中点左边和 int middeRightSum = 0; // 中点右边和 int tempmiddeLeftSum = 0; // 辅助求中点左边最大值,下同。 int tempmiddeRightSum = 0; // 求出中点索引 center = (left + right) / 2; if (left == right) { return array[left]; } leftSum = Max(array, left, center); rightSum = Max(array, center + 1, right); for (int i = center; i >= left; i--) { tempmiddeLeftSum += array[i]; if (middeLeftSum <= tempmiddeLeftSum) { middeLeftSum = tempmiddeLeftSum; } } for (int i = center + 1; i <= right; i++) { tempmiddeRightSum += array[i]; if (middeRightSum <= tempmiddeRightSum) { middeRightSum = tempmiddeRightSum; } } int middleSum = middeLeftSum + middeRightSum; sum = leftSum >= rightSum? leftSum : rightSum; sum = middleSum > sum? middleSum : sum; return sum; }
相关文章推荐
- 最大字段和各种不同算法实现(参考编程珠玑)
- DP最大字段和算法
- hdu 1024Max Sum Plus Plus 最大M段字段和 单调优化DP 从一类单调性问题看算法的优化
- dp之二维的最大字段和算法
- 最大字段和算法
- 求数列的最大字段和 算法
- dp之一维的最大字段和算法
- 【算法设计与分析】6、最大字段和
- 【计算机算法分析】动态规划法——最大字段和问题
- 求数组最大字段和最简洁有效的算法
- 基础算法--B最大字段和
- o(n)算法求大连续字段和,并返回最大子段和中的元素
- DP算法之最大字段和 最长单调子序列相似借鉴之处
- 数据结构之---求最大字段和, 时间复杂度o(n)算法
- 求表中某一字段中最大连续数
- 算法.数学.初级.求最小公倍数--(利用最大公约数的辗转相除法),powerbuilder powerscript实现
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 欧几里得求两个整数最大公约数算法的汇编递归实现代码
- 最大公约数(Gcd)两种算法(Euclid && Stein) [整理]
- 翻出一段自己以前写的求最大子串和的算法