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

jr唔识编程 2022级 2024-01-12 15:04:18

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.分析该算法的时间复杂度

O(nlogn)

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

通过本章的学习,我明白了分治法的基本内涵就是“把复杂的问题简单化”,分治法就是将一个大问题分解成若干个子问题进行求解,在这过程可以用到函数的递归求解,也可以不用递归求解。分治法思想对于解决现代计算机甚至生活方面的问题都极其重要,将一个大的问题拆解成小问题,如汉诺塔、归并排序等。

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

431

社区成员

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

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