您的位置:首页 > 其它

贪心算法之最大的子组合求解

2016-04-14 11:47 218 查看
      本来博主是没有心情写这篇博客了,因为昨天住的地方遭贼了。半夜两点多,偷开我家窗户,把博主卧室里面的玫瑰金给偷走了。当时博主就睡得特别不舒服,半夜醒来就发现手机被偷了。搞得博主后半夜基本没有睡,万幸的是,博主的手机开了“查找iphone”功能,因此开启了丢失模式之后,任小贼再牛逼,刷了机也用不了。虽然拿不回来,也要恶心死小偷。所以,在此,博主也提醒各位博友,一定一定要将iphone的“查找iphone功能”打开。

     回到正题吧,前两天在复习数据结构和算法,也看了一些算法题。于是,就将自己碰到的且学习了的算法题,贡献到博客中,以备温故而知新嘛。

     贪心算法又称为扫描算法,在《编程珠玑》这本书中有介绍,说实话,我是因为不懂这个算法才去看的这本书,而不是从书中看到这个算法。贪心算法是一种有缺陷的算法。主要思想就是通过求解局部最优解来获得全局最优解的算法。主要是这个算法无法考虑到所有的情形,所以在某一些的场景中是十分有效,但适用性不广。下面就是这个算法的一个实例应用。

    求一个数组中的所有子组中最大的一个。例如:-1,2,5,3,-2,5,-3中最大的子组和为2,5,3,-2,5这个子组。下面就给出这个算法的实现代码,代码异常简单,但是设计思想非常狡猾。

int GetMax(int m,int n){
return m>n?m:n;
}
int MaxSubArray(int array[],int length){
int maxendhere = 0;
int maxsofar=0;
for(int i = 0;i < length;i++){
maxendhere  = GetMax(maxendhere + array[i] ,0);// 求出了数组中a[i]之前的最优子组
maxsofar = GetMax(maxendhere ,maxsofar); // 从子组中获得最大的子组
}
return maxsofar;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: