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

软工2202刘星宇 2022级 2023-10-21 21:08:14

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

此题所使用的分治法基本思想为将原问题分解为各个子问题,各个子问题相互独立,递归求解子问题,简化原问题,从而得到结果。

伪代码描述最大子段和问题解法如下:

left=1,right=n;

mid=(left+right)/2;

sumleft=Max(a,left,mid);//求出左序列最大子段和

sumright=Max(a,mid+1,right);//求出右序列最大子段和

//Max递归函数:用于求出现有序列的最大子段和

int Max(int a[ ],int l,int r)

{

int left=0;//求出左段最大子段和

int s1=0;

for(int i=mid;i>=l;i--)

{

s1=s1+a[i];

if(left>s1)

s1=left;

}

int right=0;//求出右段最大子段和

int s2=0;

for(int j=mid+1;j<=r;j++)

{

s2=s2+r[j];

if(right>sum2)

sum2=right;

}

int sum=s1+s2;//求出整个子段的最大子段和

if(sum<s1)

sum=s1;

else if(sum<s2)

sum=s2;

return sum;

}

2.时间复杂度

T(n)=2T(n/2)+n. 根据主定理可知,时间复杂度为O(nlogn)

3.对分治法的体会和思考

在本章的学习中,我了解到了分治法作为一种基本的算法,它的意义是尽可能地提高算法效率,快速得到所求问题的结果,将规模较大的问题分解为了小的子问题,通过对子问题的解决与递归,从而求得大问题。同时,分治法也给了我们学习的提示,对于学习而言,我们总会遇到各类难题,但我们可以考虑用“分治法”的思想去解决问题,不要害怕困难,将大的问题看作一个个小问题去攻克解决,那么我们便能拿下难题。

 

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

434

社区成员

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

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