第3章 动态规划8课件.ppt

* 最大子段和问题的分治算法 对于情形(3)。容易看出,a[n/2]与a[n/2+1]在最优子 序列中。因此,可以在a[1:n/2]中计算出 , 并在a[n/2+1:n]中计算出 。 则s1+s2即为出现情形(3)时的最优值。据此可设计出 求最大子段和的分治算法。 * 最大子段和问题的分治算法 算法描述 * 最大子段和问题的分治算法 算法描述 * 最大子段和问题的分治算法 复杂度分析 T(n)=O(nlogn) * 最大子段和问题的动态规划算法 记 ,1? j ?n,则所求的最大子段和为 当b[j-1]0时b[j]=b[j-1]+a[j],否则b[j]=a[j]。由此可得计算b[j]的动态规划递归式 b[j]=max{b[j-1]+a[j],a[j]}, 1? j ?n * 最大子段和问题的动态规划算法 算法显然需要O(n)计算时间和O(n)空间。 int maxSum(int n, int *a) { int sum=0, b=0; for (int i=1;i=n;i++) { if (b0) b+=a[i]; else b=a[i]; if (bsum

文档评论(0)

1亿VIP精品文档

相关文档