算法设计与分析第二章作业
1、请以伪代码描述最大字段和的分治算法
int maxSum(int a[],int left,int right) {
int sum = 0;
if(left == right)
{
if(a[left] > 0) sum = a[left];
else sum = 0;
}
else
{
int center = (left + right) / 2;
int leftsum = maxSum(a, left, center);
int rightsum = maxSum(a, center + 1, right);
int s1 ,lefts = 0;
for(int i = center ; i >= left; i--) {
lefts += a[i];
if(lefts > s1) s1 = lefts;
}
int s2 ,rights = 0;
for(int i = center + 1 ; i <= right; i++) {
rights += a[i];
if(rights > s2) s2 = rights;
}
sum = s1 + s2;
if(sum < leftsum) sum = leftsum;
if(sum < rightsum) sum = rightsum;
}
return sum;
}
2、分析该算法的时间复杂度
将数组一分为二,时间复杂度为O(1),不断求数组二分之一和的最大值,时间复杂度为 2T(n/2),合并子问题,时间复杂度为O(n)所以可得该算法的时间复杂度为O(nlogn)
3、分治法的体会和思考
运用分治法,可以将一个大问题分解为若干个子问题,递归地解决各个子问题,然后将各个子问题的解合并得到原问题的解。运用分治法,虽然提高了解决问题的空间复杂度,但是却可以降低时间复杂度,从而提高解决问题的效率,递归细化问题,使问题的复杂程度降低。该方法可以在许多例子中体现,如二分搜索、合并排序、大整数的乘法、快速排序等,我们应当学习并且熟练运用该方法,以在解决这类问题时可以达到更高的效率,让代码更简洁,时间复杂度更低。。相比于之前学习过的一些方法,分治法在时间效率上有更大的优势,非常值得我们学习和使用。
相关推荐
头歌之算法设计与分析(第二章 贪心算法作业1-必做).rar
里面的内容分别为: 第1关:找零钱 第2关:求一个数列的极差 第3关:将真分数用埃及分数之和表示 第4关:找到出现次数最多的数 第5关:将给定的整数去掉任意个数字后重新组成最小整数
第二章课后作业2.rar
2020华为云实战营第二章课程五分钟快速打卡作业打卡二,作业有点难度,不用担心,手把手教你最短时间完成任务!
计算机算法设计与分析.pdf
计算机算法设计与分析.pdf
高中数学第二章算法初步阶段质量评估课时作业(含解析)北师大版必修3.doc
高中数学第二章算法初步阶段质量评估课时作业(含解析)北师大版必修3.doc
算法设计与分析课后习题答案
算法设计与分析第三版课后习题部分答案,为PDF格式,文档内容为英文


