计算机算法设计与分析第二章作业
请以伪代码描述最大字段和的分治算法
问题描述
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。
要求算法的时间复杂度为O(n)。
问题分析
通过分治的思想,可以不断把数组a[1:n]从中间平均分成两个部分:a[1:mid]和a[mid+1: n]两个部分,这样最大字段和出现的位置就会分成三种情况:
- 最大子段和在左半段
- 最大子段和在右半段
- 最大子段和在中间段
最大子段在左半端与右半端的通过不断递归相加求得,中间通过分别求两边再相加得出,最后再进行比较返回最大的子段和。
算法实现
#include<iostream> using namespace std; int a[10000]; int MaxSum(int *a, int left, int right) { int sum = 0, MidSum = 0,LeftSum = 0, RightSum=0; int center, s1, s2, lefts, rights; if(left == right) sum = a[left]; else{ center = (left + right)/2; LeftSum = MaxSum(a, left, center); RightSum = MaxSum(a, center+1, right); s1 = 0; lefts = 0; for(int i = center;i >= left;i--) { lefts += a[i]; if(lefts > s1) s1 = lefts; } s2=0; rights=0; for(int j = center+1;j <= right;j++) { rights += a[j]; if(rights > s2) s2 = rights; } MidSum = s1+s2; if(MidSum < LeftSum) sum = LeftSum; else sum = MidSum; if(sum < RightSum) sum = RightSum; } return sum; } int main(void) { int n,j; cin>> n; for(j = 0;j < n;j++) cin>> a[j]; cout<< MaxSum(a,0,n-1); return 0; }该算法的时间复杂度
划分子问题:O(1)
求解子问题:2T(n/2)
合并子问题:O(n)
所以T(n) = 2T(n/2)+O(1)+O(n)
所以该算法的时间复杂度为T(n) = O(nlogn)
分治法的体会与思考
分治算法的核心思想可以归结为四个字:分而治之。分治法将规模为n的问题不断缩减,划分子问题,分成k个规模为n/m的我们比较容易能解决的子问题,这些子问题相互独立且与原问题性质相同,最后求出的小规模问题的解合并为更大规模的解,自底向上逐步合并求出原问题的解。
相关推荐
计算机算法设计与分析.pdf
计算机算法设计与分析.pdf
计算机算法与程序设计(python)-计算机PPT模板.pptx
计算机算法与程序设计(python)_计算机 演讲人 202x-11-11 202x 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第1页。 第一章绪论(4学时) 01 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第2页。 第一章绪论(4学时) 1.1课程简介 01 1.2raptor流程图 02 1.3python简介及编程 03 1.42019年-学生的特色作品1 04 1.42019年-学生的特色作品2 05 1.52020年-学生特色作品-爬虫,机器学习与神经网络 06 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第3页。 第一章绪论(4学时) 1.52020年-学生特色作品-游戏 1.52020年-学生特色作品-其他 第一章测验 第一章编程作业 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第4页。 第二章穷举搜索问题(2学时) 02 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第5页。 第二章穷举搜索问题(2学时) M.94275.CN 2.2穷举搜索 02 第二章测验 05 2.1故事:案件回顾 01 2.4穷举搜索操作与编程实现 04 2.3故事:寻找billy 03 第二章编程作业 06 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第6页。 第三章字符串与数组(2学时) 03 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第7页。 3.1数组 3.2字符串 第三章测验 第三章编程作业 第三章字符串与数组(2学时) 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第8页。 第四章二分搜索与递归(4学时) 04 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第9页。 4.1二分搜索 4.2递归 4.3圆二分搜索 第四章测验 第四章编程作业(更正) 第四章二分搜索与递归(4学时) 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第10页。 第五章广度优先搜索与队列 05 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第11页。 第五章广度优先搜索与队列 5.1广度优先搜索 5.2队列与广度优先搜索求最短路径的实现 第五章测试 第五章编程作业 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第12页。 第六章深度优先搜索与栈 06 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第13页。 第六章深度优先搜索与栈 6.1深度优先搜索与栈 6.2栈与队列 第六章测验 第六章编程作业 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第14页。 第七章并行算法,迭代加深与逆向索引 07 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第15页。 7.1并行算法 01 06 第七章测验 03 7.4作业提示 7.3逆向索引 第七章编程作业 02 7.2迭代加深 04 05 第七章并行算法,迭代加深与逆向索引 单击此处添加文本具体内容,简明扼要的阐述您的观点。根据需要可酌情增减文字,以便观者准确的理解您传达的思想。 单击此处添加标题 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第16页。 第八章二叉搜索树 08 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第17页。 第八章二叉搜索树 01 8.1二叉搜索树的定义与查找 02 8.2二叉搜索树的实现 03 8.3有序数组构造二叉搜索树 04 8.4二叉搜索树的区间查找 05 8.5二叉搜索树的插入 06 8.6trie树 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第18页。 第八章二叉搜索树 第八章测验 第八章编程作业 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第19页。 第九章最佳搜索与堆 09 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第20页。 第九章最佳搜索与堆 M.94275.CN 9.1最佳搜索 9.2优先队列 9.3堆 第九章测验 9.5总结 9.4大结局 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第21页。 第九章最佳搜索与堆 第九章编程作业 计算机算法与程序设计(python)-计算机PPT模板全文共34页,当前为第22页。 第二部分高级应用1 10 计算机算法与程序
计算机算法-设计与分析导论 巴斯著 课后答案(英文版)
呵呵,大家是不是找了好久了,我是从同学那里得到的,如果有需要中文版答案的,加我QQ 872286990.这个不外传的,私人答案
华师大出版《算法与程序设计》解析算法课件
华东师范大学出版社《算法与程序设计》(选学模块)(试用本)第二章基本算法实例课件
高中数学第二章算法初步2.2.2变量与赋值课时作业(含解析)北师大版必修3.doc
高中数学第二章算法初步2.2.2变量与赋值课时作业(含解析)北师大版必修3.doc


