算法设计与分析第二章作业
1.
把整个序列一分为二,此时最大字段和会出现三种情况,(1)最大字段在左半序列中,(2)最大字段在右半序列中,(3)最大字段横跨左右序列中
第一二种用递归继续一分为二,第三种像左开始找最大字段和,再向右开始找最大字段和,然后两个相加。
伪代码
int maxSum(int *a,int left,int right){
if(left == right)
return a[left];
int mid = (left+right) / 2;
int leftSum = maxSum(a,left,mid);
int rightSum = maxSum(a,mid+1,right);
int sl = 0;// 像左最大字段和
int nowLeftSum = 0;
for(int i = mid; i > left; i--){
nowLeftSum += a[i];
if(nowLeftSum > sl)
sl = nowLeftSum;
}
int sr = 0;
nowRightSum = 0;
for(int i = mid; i > left; i--){
nowRightSum += a[i];
if(nowRightSum > sr)
sr = nowRightSum;
}
int sum = sl + sr;
return sum;
}
2.算法复杂度为 O(nlogn);
3.总结
(1)任何可以用计算机求解的问题所需计算的时间都与其规模有关。问题规模越小,解题所需时间往往也越短,从而也比较容易处理。
(2)直接或间接的调用自身的算法称为递归算法。
(3)分治法的基本思想是将一个规模为n的问题分解成k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解决这些子问题,然后将各子问题的解合并得到原问题的解。

...全文
相关推荐
头歌之算法设计与分析(第二章 贪心算法作业1-必做).rar
里面的内容分别为: 第1关:找零钱 第2关:求一个数列的极差 第3关:将真分数用埃及分数之和表示 第4关:找到出现次数最多的数 第5关:将给定的整数去掉任意个数字后重新组成最小整数
第二章课后作业2.rar
2020华为云实战营第二章课程五分钟快速打卡作业打卡二,作业有点难度,不用担心,手把手教你最短时间完成任务!
计算机算法设计与分析.pdf
计算机算法设计与分析.pdf
高中数学第二章算法初步阶段质量评估课时作业(含解析)北师大版必修3.doc
高中数学第二章算法初步阶段质量评估课时作业(含解析)北师大版必修3.doc
算法设计与分析课后习题答案
算法设计与分析第三版课后习题部分答案,为PDF格式,文档内容为英文


