最大子数组的分治算法
来源:互联网 发布:淘宝店铺评分低怎么办 编辑:程序博客网 时间:2024/06/03 04:22
读算法导论当中的最大子数组当中的分治算法,涉及到的问题是怎么从FIND_MAX_SUBARRAY()函数当中返回三个参数,所以用了vector来返回,总感觉不是太好,太浪费空间了,但也没想到其他办法。
int max_left,max_right,sum;int FIND_MAX_CROSSING_SUBARRAY(int a[],int low,int mid,int high){int sum1=0;int left_sum=-1000;sum1=0;for(int i=mid;i>=low;i--){sum1=sum1+a[i]; if(sum1>left_sum){left_sum=sum1;max_left=i;}}int right_sum=-1000;sum1=0;for(int j=mid+1;j<=high;j++){ sum1=sum1+a[j]; if(sum1>right_sum) {right_sum=sum1; max_right=j;}}sum1=left_sum+right_sum;return sum1;}vector<int> FIND_MAX_SUBARRAY(int a[],int low,int high){int middle;int left_sum=0;int right_sum=0;int left_low,left_high;int right_low,right_high;int cross_low,cross_high;int cross_sum=0;//vector<int> vec;if(high==low){vector<int> t1;t1.push_back(low);t1.push_back(high);t1.push_back(a[low]);return t1;}else {middle=(low+high)/2; vector<int>left;left=FIND_MAX_SUBARRAY(a,low,middle); left_low=left[0];left_high=left[1];left_sum=left[2];vector<int> right; right=FIND_MAX_SUBARRAY(a,middle+1,high); right_low=right[0];right_high=right[1];right_sum=right[2]; cross_sum=FIND_MAX_CROSSING_SUBARRAY(a,low,middle,high);if((left_sum>=right_sum)&&(left_sum>=cross_sum)){vector<int> l;l.push_back(left_low);l.push_back(left_high);l.push_back(left_sum);return l; }if((right_sum>=left_sum)&&(right_sum>=cross_sum)){vector<int> r;r.push_back(right_low);r.push_back(right_high);r.push_back(right_sum);return r;}else {vector<int> cm;cm.push_back(max_left);cm.push_back(max_right);cm.push_back(cross_sum);return cm;} }}int _tmain(int argc, _TCHAR* argv[]){cout<<"2\t\115\n";int b[]={4,-2,3,1,-90,-2,9,-7,5};vector<int> zonghe;zonghe=FIND_MAX_SUBARRAY(b,0,8);//int sum4=FIND_MAX_CROSSING_SUBARRAY(b,0,2,4);cout<<zonghe[0]<<" "<< zonghe[1]<<" "<< zonghe[2]<<endl;return 0;}
0 0
- 最大子数组的分治算法
- 最大子数组问题的分治算法
- 最大子数组-分治算法
- 分治算法--最大子数组
- 分治算法---最大子数组
- 分治算法求子数组的最大和
- 【算法学习】最大子数组问题的分治法求解
- 最大子数组问题的分治求解算法
- [算法导论]分治法---最大子数组
- 算法导论,分治策略,最大子数组
- 【算法设计-分治】最大子数组问题
- 分治算法-最大子数组问题
- 分治法求和最大的子数组
- 分治策略 & 最大子数组的问题
- 最大子序列和的分治算法
- 一个数组中找出连续子向量的最大和 分治算法 扫描算法O(n)
- 算法导论_最大子数组问题(分治策略)
- 分治算法实现最大连续子数组和
- 职责链
- jdk1.8中使用sql server
- 追逐自己的梦想----------辅助制作第二十三课:挂机选项卡的实现
- extern C的作用详解
- 装饰器
- 最大子数组的分治算法
- leetcode: Binary Search Tree Iterator
- Majority Element
- 常用的排序算法
- Cloneable接口分析
- 观察者
- POJ 3744 Scout YYF I 概率dp+矩阵加速
- Android LayoutInflater详解
- 安装wampserver时提示丢失MSVCR110.dll