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

软工2101张妍 2022-09-26 17:25:06

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

分治法的基本思想是将一个问题规模为n的问题分解为k个规模较小的子问题。

int maxSubSum(int *a, int left, int right) {
    if (left == right) {
        return a[left] < 0 ? 0 : a[left];
    }
        int centor = (left + right) / 2;
    int leftSum = maxSubSum(a, left, centor);
    int rightSum = maxSubSum(a, centor + 1, right);
    int s1 = 0;
    int lefts =0;
    for (int i = centor; i >= left; i--) 
    { 
        lefts += a[i];
        if (lefts > s1)  s1 = lefts;
        
    }
    int s2 = 0;
    int rights = 0;
    for (int i = centor + 1; i <= right; i++) 
    {
        rights += a[i];
        if (rights > s1) s1 = rights;
    }
    int sum = s0 + s1; 
    sum = max(sum, leftSum); 
    sum = max(sum, rightSum);
    return sum;
}
int maxSum(int *a, int n) {
    return sumSubSum(a, 1, n); 
}

二、算法时间复杂度

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

 

三、对分治法的体会和思考

1、当问题规模小到一定程度可以解决那么可以使用分治法;

2、子问题的解可以合并成该问题的解;

3、分治算法时间复杂度为O(nlogn),并且是稳定排序。

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

434

社区成员

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

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