上述方法为分治法求解最大子段和,这种方法的时间复杂度为:
解得O(nlogn)
更高效的算法:动态规划法
求解步骤:
1.找出最优解的性质,并刻画其特征。
令,则所求的最大子段和为:
根据b[j]的定义,当b[j-1]>0时,b[j]=b[j-1]+a[j],否则b[j]=a[j]。
2.递归的定义最优值
b[j]=max{b[j-1]+a[j],a[j]},1<=j<=n
3.以自底向上的方式计算出最优解。
这种方法的时间复杂度为O(n)。
上述方法为分治法求解最大子段和,这种方法的时间复杂度为:
解得O(nlogn)
更高效的算法:动态规划法
求解步骤:
1.找出最优解的性质,并刻画其特征。
令,则所求的最大子段和为:
根据b[j]的定义,当b[j-1]>0时,b[j]=b[j-1]+a[j],否则b[j]=a[j]。
2.递归的定义最优值
b[j]=max{b[j-1]+a[j],a[j]},1<=j<=n
3.以自底向上的方式计算出最优解。
这种方法的时间复杂度为O(n)。