算法设计第二章作业-

花京院菜明 2022级 2023-10-25 13:35:54

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

//三种情况:
//1. 最大字段和为左半段之和
//2. 最大字段和为右半段之和
//3. 最大字段和跨越左右
int solve(int left,int right)
{
    if(left==right)
    {
        //子问题只有一个,大于0就返回该数
    }
    //左右分开
    int sleft=solve(left,mid),int sright=solve(mid+1,right);
    //向左
    for(int i=mid;i>=left;i--)
    {
        //从中间向左累加得到最大值
    }
    for(int i=mid+1;i<=right;i++)
    {
        //从中间向右累加得到最大值
    }
    return;
}

二、分析该算法的时间复杂度

1. 划分:O(1);

2. 求解子问题:子问题划分为规模为n/2的子问题,再归并,时间复杂度:2T(n/2);

3. 合并:O(nlongn)

三、结合本章的学习,你对分治法的体会和思考

    分治法就是将大规模的问题划分为小问题,分而治之,最后再合并。在这个过程中时间复杂度可以大大减少。一般包括:

1. 分解子问题

2. 解决子问题

3. 合并子问题

三个步骤。

 

 

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

434

社区成员

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

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