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

软工2101叶颖勤 2022-09-26 21:17:33

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

int max(int a[],int left,int right)
{
    if(left == right) return sum<-max{a[left]||0};
    else
    {
        int mid = (left+right)/2;
        sum_left  =max(a,left,mid);
        sum_right = max(a,mid+1,right);
        sum_1 = 0;
        left_sum = 0;
        for(int i =mid;i>left;i--)
        {
            left_sum = left_sum + a[i];
            sum_1 = max{sum_1,left};
        }
        sum_2 = 0;
        right_sum = 0;
        for(int i=mid+1;i<right;i++)
        {
            right_sum = right_sum + a[i];
            sum_2 = max{sum_2,right_sum};
        }
        sum = sum_1 + sum_2;
        sum = max{sum,sum_left};
        sum = max{sum,sum_right};
        return sum;
    }
}

2.分析该算法的时间复杂度

T(n) = O(1) / 2T(n/2)+O(n)  = O(n*log n)

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

算法第二章主要讲了二分法,顾名思义就是说将给定的数组或者数值范围或者给定的东西进行一分为二。不断地进行一分为二就可以简化问题的复杂度,可以通过不断地解决分开出来地问题。但是二分以后,还有需要不同的操作,需要我们一一甄别。就是说二分是件很机械地东西,但是如何对二分后的东西进行操作,就需要我们进一步的思考。好比日常生活,我们也知道要把事情分成几件事来做,但是对于不同的事情,就要用不同的方法,不能一概而论。

...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-数据结构与算法 发布问题, 以便更快地解决您的疑问

434

社区成员

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

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