算法设计与分析 第二章作业

软件工程2202 张潇议 2022级 2023-11-05 14:37:19

作业要求:

  1. 请以伪代码描述最大字段和的分治算法

  2. 分析该算法的时间复杂度

  3. 结合本章的学习,你对分治法的体会和思考

 

1.请以伪代码描述最大子和段的分治算法

int MaxSum(int *a, int left, int right){
	int sum = 0;//最大子和段 
	if (left == right)//处理序列长度为一的情况 
	sum = a[left] > 0 ? a[left] : 0;
	int s1 = 0;
	int lefts = 0;
	for (int i = mid;i >= left;i--){
		lefts += a[i];
		if (lefts > s1){
			s1 =lefts;
		}
	} 
	int s2 = 0;//记录右段最大子和段 
	int rights = 0;
	for (int i = mid + 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; 
} 

2.分析该算法的时间复杂度

T(n) = 2(n/2) + O(n)

所以时间复杂度为O(nlogn)

3.结合本章的学习,你对分治法的体会和思考

分治法思想对于解决现代计算机甚至生活方面的问题都极其重要,将一个大的问题拆解成小问题,如汉诺塔、归并排序等。分治法可以将大问题拆解成小问题,就可以帮助人们更加精准的解决一些复杂问题,再将问题进行合并,这是极其便捷也很重要的思想,需要我们掌握。

...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧