273
社区成员
发帖
与我相关
我的任务
分享
1.请以伪代码描述最大字段和的分治算法
MaxArray(array[],left,right)
{
if(left>right) 则 return;
else mid = (left+right)/2;
左字段求解 MaxArray(array[],left,mid)
右字段求解 MaxArray(array[],mid,right)
中间字段求解 MiddleSum(array[],left,mid,right)
比较三者大小,取其中最大值 MaxNum
return MaxNum
程序结束
}
2.分析该算法的时间复杂度
对于左右字段时间复杂度都是O(n/2),中间字段求解时间复杂度为O(n)
所以整体时间复杂度为O(n)
3.结合本章的学习,你对分治法的体会和思考
分治法很形象,就是先分,再治,最后将子问题合并给出原问题答案。通过将大问题分成多个相同的子问题进行求解,缩小单次求解规模,使得编程者在编程时思维逻辑上相较与迭代法更加宽松,不必考虑其他特殊情况。但是分治法遇到规模极大的问题时,容易出现爆栈的问题,所以可以和迭代法视情况而使用。