算法与设计第二章作业

bjaesk 2022级 2023-11-05 17:00:52

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

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

int mid=(left+right)/2;

int lmax=maxSum(left,mid);  //左边最大子段和

int rmax=maxSum(mid+1,right);  //右边最大子段和

//第三种情况,最大子段横跨左右两部分

int clmax=a[mid];

int temp1=a[mid];

for(int i=mid-1;i>=left;i--)

{

       temp1+=a[i];

       if(temp1>clmax)

           clmax=temp1;

}    //左边部分最大子段和

int crmax=a[mid+1];

int temp2=a[mid+1];

for(int j=mid+2;j<=right;j++)

{

       temp2+=a[j];

       if(temp2>crmax)

              crmax=temp2;

}   //右边部分最大子段和

int cmax=clmax+crmax; 

int maxs=max(max(lmax,rmax),cmax);   

if(maxs<0)      return 0;

return maxs;

 

时间复杂度为

T(n)=O(1)+2T(n/2)+O(n)=O(nlogn)

 

分治法一共分为三个步骤:划分、求解、合并,利用递归求解子问题。计算时间复杂度时用递归方程进行分析。

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

434

社区成员

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

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