分治策略——最大子数组的问题(附伪代码)

什么是最大子数组?

在这里插入图片描述
如图所示,为寻找数组A的和最大的非空连续子数组。我们称这样的连续子数组为最大子数组(maximum subarray)

什么是分治策略?

1、分解(Divide) 步骤将问题划分为一些小问题,子问题的形式与原问题一样,只是规模更小
2、解决(Conquer) 步骤递归地求解出子问题,如果子问题的规模足够小,则停止递归,直接求解
3、合并(Combine) 步骤将子问题的解组合成原问题的解

对最大子数组使用分治策略

1、分解 low表示数组最小下标,mid表示数组中间下标,high表示数组最大下标。考虑数组A[low,…,mid]和A[mid+1,…high]。A[low,…,high]的任何连续子数组A[i,…,j]所处的位置有三种可能:

(1)完全的处在左侧的子数组A[low,…,mid]内。

(2)完全的处在右侧的子数组A[mid+1,…high]内。

(3)跨越了中点mid,即low<=i<=mid, mid+1<=j<=high

2、求解 :对于(1)和(2)中的两个情况,这两个子问题仍然是最大子数组问题,也即是说与原问题相同的规模较小的子问题。继续分解,知道出现情况(3),最终解决。因此下面的重点放在第(3)个情况,寻找跨越中点的最大子数组,最后在这三种情况中选择和最大的,既是问题的解。通过伪代码

对于(3)中的情况,分析可知任何跨越了中点的子数组都由两个子数组A[i,…,mid]和A[

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值