273
社区成员
发帖
与我相关
我的任务
分享
1.首先将序列a[1:n]分成长度相等的两段a[1:n/2]和a[n/2+1:n];
2.确定mid=(left+right)/2,并通过递归算法求得左右两区域(即[left,mid]和[mid+1,right]两个区域)的子段和;
3.将两个区域求出的和相加并与二者比较,较大为序列最大字段;
代码如下:
1.分解子问题和合并子问题的时间复杂度都是O(1);
2.求解子问题的时间复杂度为2T(n/2);
3.T(n)=2T(n/2)+O(n),通过计算得到时间复杂度为O(nlogn)。
分治法的基本思想就是把一个较大的规模的问题分解成多个规模较小的子问题求解,最后再将子问题所得解合并,这些子问题相互独立且与原问题相同。利用分治的思想所构造出的程序一般都用了递归算法,使得代码量小,算法结构清晰,可读性较强。但是同时,由于递归算法的调用,程序运行效率较低。分治算法适用于解决分治适用于解决规律性强,且输入规模较大的问题。