第一次博客作业

问题描述:计算给定数组的最大连续子数组和计算给定数组的最大子数组的和有很多种算法,常见的有四种方法:1.暴力求解: 假设数组的长度为n,暴力求解方法的思路是很简单的,就是将子数组的开始坐标和结束坐标都遍历一下,这样共有 C n 2 C_{n}^{2} 种组合方式,再考虑这所有组合方式中和最大的情形。2.分治法:分治法的基本思想是将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小,递归地求出子问题,如果子问题的规模足够小,则停止递归,直接求解,最后将子问题的解组合合成原问题的解。3.Kadane算法:Kadane算法的简单想法就是寻找所有连续的正的子数组,同时记录所有这些连续的正的子数组中的最大的连续数组。每一次我们得到一个正数,就将它与max_so_far比较,如果它的值比max_so_far大,则更新max_so_far的值。4.动态规划法:用MS[i]表示最大子数组的结束下标为i的情形,则对于i-1,有:MS[i]=max{MS[i-1]+A[i],A[i]},这样就有了一个子结构,对于初始情形,MS[1]=A[1]。遍历i,就能得到MS这个数组,其最大者即可最大子数组的和。

 

posted @ 2021-03-28 23:10  刹那要抓住未来  阅读(33)  评论(0编辑  收藏  举报