最大子树问题(The maximum-subarray problem)
来源:互联网 发布:node 开发流程 编辑:程序博客网 时间:2024/05/04 01:01
最大子树问题(The maximum-subarray problem)Introduction to Algorithms Chapter4.1
通俗的说就是在一堆有正有负的数中找出连续的一组数字,使它们的和最大。
The maximum-subarray problem is interesting only when the array contains some negative numbers. If all the array entries were nonnegative, then the maximum-subarray problem would present no challenge, since the entire array would give the greatest sum.
这是最大子树问题 Θ(nlgn) 的C语言实现代码
#include<stdio.h>typedef struct{int maxLeft;int maxRight;int sum;}Cross;Cross find_max_crossing_subarray(int a[],int low,int mid,int high){ //为了返回多个值,用了结构体Cross cross;int leftSum,rightSum;int sum=0;cross.maxLeft=0;cross.maxRight=0;for(int i=mid;i>=0;i--){sum+=a[i];if(sum>leftSum){leftSum=sum;cross.maxLeft=i;}}sum=0;for(i=mid+1;i<=high;i++){sum+=a[i];if(sum>rightSum){rightSum=sum;cross.maxRight=i;}}cross.sum=leftSum+rightSum;return cross;}Cross find_max_subarray(int a[],int low,int high){Cross cross,crossLeft,crossRight;if(high==low){cross.maxLeft=low;cross.maxRight=high;cross.sum=a[low];return cross;}else{int mid=(low+high)/2;crossLeft=find_max_subarray(a,low, mid);crossRight=find_max_subarray(a,mid+1, high);cross=find_max_crossing_subarray(a,low,mid,high);if(crossLeft.sum>=crossRight.sum&&crossLeft.sum>=cross.sum)return crossLeft;else if(crossRight.sum>=crossLeft.sum&&crossRight.sum>=cross.sum)return crossRight;else return cross;}}void main(){int a[10]={2,-5,8,-7,6,9,0,-3,1,-4};Cross cross;cross=find_max_subarray(a,0,9);printf("第%d~%d个数的和最大,为:%d",cross.maxLeft+1,cross.maxRight+1,cross.sum);printf("\n");}
0 0
- 最大子树问题(The maximum-subarray problem)
- 最大子串问题(The Maximum-subarray Problem)
- 最大子数组(The maximum-subarray problem)
- The Maximum Subarray Problem
- The maximum-subarray problem
- The Maximum-Subarray Problem
- 最大子数组(maximum subarray)问题
- 【算法导论学习-007】最大子数组和问题(Maximum subarray problem)
- 最大子数组和(The Maximum Subarray)
- 最大子串和问题(Maximum Subarray)
- 最大子串和问题(Maximum Subarray)
- leetcode笔记:Maximum Subarray(最大子串和问题)
- Maximum subarray -- 最大子数组问题(C++)
- 最大子串和问题(Maximum Subarray)
- 最大子串和问题(Maximum Subarray)
- 最大子数组问题 Maximum Subarray
- LeetCode Maximum subarray,最大子串问题
- 最大和的子数组 Maximum subarray problem
- YII下查看数据库日志的配置方式
- 关于梯度计算和相关原理
- C中调用Matlab的几种方法
- 工作日志2014-07-02
- 常用Git命令
- 最大子树问题(The maximum-subarray problem)
- C#连接操作SQLite and QT连接操作SQLite
- SQL SERVER 2008 无法启动T-SQL调试的解决方法
- struts2学习工具常来登陆
- 卡尔曼滤波的原理说明
- php多输出换行\n
- 关于Android的目录结构
- Cocos2d-x 打包成APK中文显示乱码
- SVN服务器搭建和使用(一)