273
社区成员
发帖
与我相关
我的任务
分享
一、请以伪代码描述最大字段和的分治算
int maxSum(int* a, int left, int right)
{
if(left == right)
{
return a[left] < 0 ? 0 : a[left];
}
int mid = (left + right) / 2;
int leftmax = maxSum(a,left,mid);
int rightmax = maxSum(a,mid+1,right);
int lsum = 从mid减小加到left的最大值;
int rsum = 从mid+1增大加到right的最大值;
int allmax = lsum + rsum;
return leftmax, rightmax, allmax三者中的最大值;
}
二、分析该算法的时间复杂度
(1)分解子问题:O(1);
(2)求解子问题:2T(n/2);
(3)合并子问题:O(n);
该算法时间复杂度为O(nlogn)。
三、对分治法的思考
分治法是计算机算法中重要的一种,它将一个复杂的问题不断分解为若干个小问题,解决小问题后再将其合并起来,从而解决大问题。利用好分治法可以协助我们更加方便地解决编程上的困难。