算法第二章上机实践报告

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.心得体会

学会了用分治法

posted @ 2020-10-03 15:16  林国滨  阅读(83)  评论(0编辑  收藏  举报