最大子数组问题的分治算法
来源:互联网 发布:网络教育学籍保留几年 编辑:程序博客网 时间:2024/05/29 16:49
#include <iostream>#include <algorithm>#include <vector>using namespace std;/*最大子数组问题的分治算法*/#define INT32_MIN (1<<29)/** find a subarray crossing the mid with the biggist sum*/int find_max_crossing_subarray(vector<int> array, int low, int mid, int high){int left_maxsum = -50; //for sumint right_maxsum = -50; //for sumint sum = 0;for (int i = mid; i >= low; --i){sum += array[i];if (sum > left_maxsum){left_maxsum = sum;}}sum = 0;for (int i = mid + 1; i <= high; ++i){sum += array[i];if (sum > right_maxsum){right_maxsum = sum;}}return(left_maxsum + right_maxsum);//cout<<"maxsum_crossing_mid"<<left_maxsum+right_maxsum<<endl;}int max(int a, int b, int c){if (a >= b && a >= c)return a;else if (b >= a && b >= c)return b;elsereturn c;}/** find a subarray on the left or right side of mid*/int find_max_subarray(vector<int> array, int low, int high){if (low == high){return array[low];}int mid = int((low + high) / 2);int low_maxsum = find_max_subarray(array, low, mid);int high_maxsum = find_max_subarray(array, mid + 1, high);int crossing_mid_maxsum = find_max_crossing_subarray(array, low, mid, high);return max(low_maxsum, high_maxsum, crossing_mid_maxsum);}int main(){vector<int> array;for (int i = 0; i<10; i++){int j = 50 - rand() % 100; //-49~50array.push_back(j);}for (vector<int>::iterator it = array.begin(); it != array.end(); ++it){cout << *it << " ";}cout << endl;int maxsum = find_max_subarray(array, 0, array.size() - 1);cout << "the maxsum=" << maxsum << endl;return 0;}
阅读全文
0 0
- 最大子数组问题的分治算法
- 【算法设计-分治】最大子数组问题
- 分治算法-最大子数组问题
- 【算法学习】最大子数组问题的分治法求解
- 最大子数组问题的分治求解算法
- 最大子数组的分治算法
- 分治策略 & 最大子数组的问题
- 最大子数组-分治算法
- 分治算法--最大子数组
- 分治算法---最大子数组
- 算法导论_最大子数组问题(分治策略)
- 最大子数组问题(分治法)--【算法导论】
- 算法导论_最大子数组问题(分治策略)
- 算法导论:分治策略__最大子数组问题
- 算法导论之分治策略:最大子数组问题
- 算法导论学习:分治策略之最大子数组问题
- 算法导论 最大子数组问题(分治策略)
- 算法导论--分治策略求解最大子数组问题
- 专业词汇
- [bzoj-2463][中山市选2009]谁能赢呢? 题解
- 职责链设计模式
- 对DFS序的理解
- 华为笔试题(2)
- 最大子数组问题的分治算法
- 设计模式之适配器模式
- 引导页,第二次登陆消失
- JS两集合做差
- 计蒜客 加减乘除
- linux 上传文件 rz命令 提示command not found 解决方法
- 手机号查询信息
- 窑砖焙烧监控
- LintCode: 最长上升连续子序列