算法与分析第二章作业

weixin_46255744 2022级 2023-10-30 19:49:05

int maxmerge(int a[], int left, int right)

{

int mid = (left+right)/2;

int s1,s2,sum=0,max=-10000;

    if(left == right) return a[left];

s1 = maxmerge(a,left,mid);

s2 = maxmerge(a,mid+1,right);

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

{

sum += a[i];

if(sum > max) max = sum;

}

sum = max;

for(int i=mid+1;i<=right;i++)

{

sum += a[i];

if(sum > max) max = sum;

}

if(max<s1) max = s1;

else if(max<s2) max = s2;

return max;

 }
时间复杂度

分解子问题:O(1)

求解子问题:2T(n/2)

合并子问题:O(n)

故时间复杂度为T(n)=2T(n/2)+O(n)=nlogn

对分治法的思考

  1. 将一个问题分解为多个相同类型的子问题;
  2. 求解这些子问题;
  3. 将所有子问题合并;
...全文
15 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

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

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