算法第二章上机实践报告
1.实践题目名称
最大子列和问题
2.问题描述
在给出的k个整数中找到最大子列和。(k<=100000)
3.算法描述
int maxsum(int *a, int left, int right)
先调用maxsum(left,mid)求left到mid的最大子列和,再调用maxsum(mid+1,right)求mid+1到right的最大子列和,最后求横跨两边的最大子列和,返回三者中最大的子列和。
4.时间及空间复杂度分析
时间复杂度:整个问题分为三步,求左边最大子列和,求右边最大子列和,求横跨两边的最大子列和。设整个问题为T(n),则求左边为T(n/2),右边为T(n/2),求横跨两边为O(n),
T(n)=2T(n/2)+O(n),由主定理,T(n)=O(nlogn)。
空间复杂度:S(n)=O(n)
5.心得体会
学会了用分治法