分治策略,大致可以理解为,我们遇到一个规模比较大的问题,可以考虑将其划分为若干个规模较小的问题,然后规模较小的问题可以再继续分,知道问题变得显然容易解决。听起来和递归有点相似,严格上讲,分治是一种思想,递归是对自身的调用,二者是不同层次的概念,但是他们都是在降低需要处理的规模。
最大子数组问题,给出一个数组,其中有实数若干,我们要找到一个子数组(连续的),使得该子数组的元素和是最大的。设我们的数组长度为 n,那么用暴力计算的方法,对于前 n - 1 个数中的第 i 个(i >= 1),有 n - i 种情况,一共有 种情况,也就是
的时间复杂度。但是使用分治策略的话我们可以取得更优的时间复杂度。
我们在这个数组中找到一个中点 mid,把数组分成两部分。那么如果该数组存在一个 "最大子数组",那么该 "最大子数组" 的位置可能有三种情况:第一种就是完全在 mid 的左边,第二种就是完全在 mid 的右边,第三种就是跨越 mid。那么该数组的 "最大子数组" 是 mid 左边的子数组、mid 右边的子数组、跨越 mid 的 "最大子数组" 这三个中的最大者。我们先来看当确定了