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

计科2101王伟 2022-09-26 23:39:50

一、最大子段和的分治算法

1.首先将序列a[1:n]分成长度相等的两段a[1:n/2]和a[n/2+1:n];

2.确定mid=(left+right)/2,并通过递归算法求得左右两区域(即[left,mid]和[mid+1,right]两个区域)的子段和;

3.将两个区域求出的和相加并与二者比较,较大为序列最大字段;

代码如下:

二、时间复杂度

1.分解子问题和合并子问题的时间复杂度都是O(1);

2.求解子问题的时间复杂度为2T(n/2);

3.T(n)=2T(n/2)+O(n),通过计算得到时间复杂度为O(nlogn)。

三、体会和思考

分治法的基本思想就是把一个较大的规模的问题分解成多个规模较小的子问题求解,最后再将子问题所得解合并,这些子问题相互独立且与原问题相同。利用分治的思想所构造出的程序一般都用了递归算法,使得代码量小,算法结构清晰,可读性较强。但是同时,由于递归算法的调用,程序运行效率较低。分治算法适用于解决分治适用于解决规律性强,且输入规模较大的问题。

...全文
12 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
发帖
gdufscs

124

社区成员

广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
帖子事件
创建了帖子
2022-09-26 23:39
社区公告
暂无公告