算法导论之js实现--分治法求最大子数组
更新日期:
分治法求最大子数组
分治法
分治策略递归求解一个问题,在每层递归中:
- 分解(Divide)步骤:将问题划分未一些子问题,子问题的形式与原问题一样,只是规模更小
- 解决(Conquer)步骤:递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解
- 合并(Combine)步骤:将子问题的解组合成原问题的解
最大子数组问题
求数组的和最大的非空连续子数组,即最大子数组。
分治策略思路
将子数组划分为两个规模尽量相等的子数组,A[low, ..., high]
的一个最大子数组A[i, .., j]
所处的位置必然是三种情况之一:
- 完全位于子数组
A[low, ..., mid]
中,low <= i <= j <= mid
- 完全位于子数组
A[mid + 1, ..., high]
中,mid <= i <= j <= high
- 跨越了中点,
low <= i <= mid < j <= high
可递归求解A[low, ..., mid]
和A[mid + 1, ..., high]
。
求解跨越中点的最大子数组的思路:
- 循环求出
A[i, ..., mid]
以及A[mid + 1, ..., j]
的最大和 - 合并返回左侧和右侧最大和
js实现
|
|
验证
|
|
查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢
码生艰难,写文不易,给我家猪囤点猫粮了喵~