434
社区成员
发帖
与我相关
我的任务
分享目录
MaxSum (int left, int right)
if (left==right) return a[right] //临界条件:相等返回
mid=(left+right)/2 //取中间值
Lsum=MaxSum(1,mid) //分为左右两个部分求最大字段和
Rsum=MaxSum(mid+1,r)
Sum1=a[mid] Sum2=a[mid+1] //两部分数组
Sum=Sum1+Sum2 //合并
if(Lsum>sum) sum=Lsum //三者比较大小,返回最大值sum
if(Rsum>sum) sum=Rsum
return sum
T(n)=2T(n/2)+O(n) = O(nlogn) 时间复杂度为O(nlogn)
通过本章的学习,了解到分治法的基本思想是将一个规模为n的子问题分解为规模较小的子问题,这些问题与原问题相同,这样大大的提高了编写算法代码的效率。分治法的具体例子包括二分法,快速排序,归并排序…都是通过分解和合并(一些问题不用)进行解决问题的,这个算法思想的关键在于找出分解的临界条件以及分解的思路代码,从而更加清晰地去解决问题,同时结合递归,迭代等算法提高算法效率,总之分治法与后面的动态规划算法都是解决问题的重要算法设计思想。