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

计科2101罗嘉虹 2022-09-26 22:02:18
  • 伪代码描述最大字段和的分治算法

 int MaxSum(int *a, int left, int right)

{

int sum = 0;

if(left == right)

{

sum = a[left]>0? a[left]:0;

}

else

{

int center = (left+right)/2;

int leftSum = MaxSum(a,left,center);

int rightSum = MaxSum(a, center+1,right);

int s1 = 0;

int lefts = 0;

for(int i=center;i>=left;--i)

{

lefts += a[i];

if(lefts>s1) s1 = lefts;

}

int s2 = 0;

int rights = 0;

for(int i=center+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;

}

return sum;

}

  • 该算法的时间复杂度

分解子问题的时间复杂度为:O(1);

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

合并子问题的时间复杂度为:O(n);

综上,该算法时间复杂度为O(nlogn);

  • 分治法的体会思考

分治法的基本思想是将一个规模较大的问题分解为若干个规模较小的子问题,这些子问题互相独立且与原问题相同。相比于之前学习过的一些方法,分治法在时间效率上有更大的优势,非常值得我们学习和使用。

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

434

社区成员

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

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