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

计科2101张瑞颖 2022-09-26 12:43:57

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

int maxs(int *a, int left, int right) {
	if (left == right) {
		return a[left] < 0 ? 0 : a[left];
	}
	    int mid = (left + right) / 2;
    int leftSum = maxs(a, left, mid);
    int rightSum = maxs(a, mid + 1, right);
    int s1 = 0;
    int lefts =0;
    for (int i = mid; i >= left; i--) { 
        lefts += a[i];
        if (lefts > s1) {
            s1 = lefts;
        }
    }
    int s2 = 0;
    int rights = 0;
    for (int i = mid + 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 maxs(a, 1, n); 
}

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

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

T(n)=O(nlogn)

3.分治法

分治法将规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。分治法是很多算法实现的基础,能够帮助我们解决很多大规模的问题。分解子问题时,最好把子问题分解为规模差不多的。

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

434

社区成员

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

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