利用动态规划求连续数组最大和以及最大子矩阵的和
2012-09-08 16:07
459 查看
题目一:
给定一个整型数组,数组中有正有负,求最大连续子序列的和。
解法:
利用动态规划的思想。
设f(n)表示以a
为子序列最后一个元素的最大和,则可以有下面的规则:
(1)当f(n-1)<0时,f(n)=a
;
(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a
。
用一个nGreatestNum来记录最大值,每次与f(n)进行比较,不断更新即可。
题目二:
给定一个二维数组,数组中有正有负,求最大子矩阵的和。
解法:
仍然用动态规划的思想。
首先,将二维问题降维处理:
例如,用2 维数组a[1 : m][1 : n]表示给定的m行n列的整数矩阵。子数组a[i1 : i2][j1 : j2]表示左上角和右下角行列坐标分别为(i1, j1)和(i2, j2)的子矩阵。
先按照行排列出所有可能区间,然后,再去求列的范围。
更详细的,当行区间确定之后,剩下就是确定列区间了,一旦确定列区间,最大子矩阵就确定了。
当行区间确定之后,求列区间的方法,可以转化成一维数组的最大连续子序列的问题:对行区间[i1, j1],依次对列进行求和,就得到n个数据的以为数组,根据最大连续子序列的和的求法,就可以获得连续子序列最大和。
仍然用nGreatestNum来记录最大值,算出一个子矩阵的和,就进行比较即可。
复杂度分析:
(1)排列出行区间,复杂度为O(M*M);
(2)而求得最大子序列的和复杂度为O(N);
(3)对于行区间确定之后对列求和的复杂度呢?
这里采用“部分和”的做法。
用BC[i][j]表示0到i行、0到j列的总和。
那么对于行区间r->l,求第i列的和:BC[l][i] - B[r-1][i] - B[l][i-1] + B[r-1][i-1]。
而求“部分和”仅需要O(N*M)。可以预先计算好。
因此,算法复杂度为O(N*M*M)。
给定一个整型数组,数组中有正有负,求最大连续子序列的和。
解法:
利用动态规划的思想。
设f(n)表示以a
为子序列最后一个元素的最大和,则可以有下面的规则:
(1)当f(n-1)<0时,f(n)=a
;
(2)当n!=0且f(n-1)>0时,f(n)=f(n-1)+a
。
用一个nGreatestNum来记录最大值,每次与f(n)进行比较,不断更新即可。
题目二:
给定一个二维数组,数组中有正有负,求最大子矩阵的和。
解法:
仍然用动态规划的思想。
首先,将二维问题降维处理:
例如,用2 维数组a[1 : m][1 : n]表示给定的m行n列的整数矩阵。子数组a[i1 : i2][j1 : j2]表示左上角和右下角行列坐标分别为(i1, j1)和(i2, j2)的子矩阵。
先按照行排列出所有可能区间,然后,再去求列的范围。
更详细的,当行区间确定之后,剩下就是确定列区间了,一旦确定列区间,最大子矩阵就确定了。
当行区间确定之后,求列区间的方法,可以转化成一维数组的最大连续子序列的问题:对行区间[i1, j1],依次对列进行求和,就得到n个数据的以为数组,根据最大连续子序列的和的求法,就可以获得连续子序列最大和。
仍然用nGreatestNum来记录最大值,算出一个子矩阵的和,就进行比较即可。
复杂度分析:
(1)排列出行区间,复杂度为O(M*M);
(2)而求得最大子序列的和复杂度为O(N);
(3)对于行区间确定之后对列求和的复杂度呢?
这里采用“部分和”的做法。
用BC[i][j]表示0到i行、0到j列的总和。
那么对于行区间r->l,求第i列的和:BC[l][i] - B[r-1][i] - B[l][i-1] + B[r-1][i-1]。
而求“部分和”仅需要O(N*M)。可以预先计算好。
因此,算法复杂度为O(N*M*M)。
相关文章推荐
- 利用动态规划求连续数组最大和以及最大子矩阵的和
- 动态规划方法求最大子连续数组乘积
- 利用动态规划求矩阵中和最大的子矩阵
- 动态规划典型例题--连续子数组的最大和
- 动态规划--求最大连续子数组的和(Python实现)&求解最大连续乘积字串(Python实现)
- 动态规划求数组中和最大字串的值 以及 字符串的循环移位(要求空间复杂度O(1),时间复杂度O(n))
- 动态规划求取连续数组最大和
- 动态规划-最大连续乘积子数组
- 【面试常见题目之动态规划】连续子序列的最大和(子数组的最大和)
- 动态规划:求子数组的最大连续和
- 利用动态规划和递归分别求两个串的最大公共子序列
- 动态规划--最大子矩阵和
- 动态规划-最大子数组和问题
- 动态规划 - 最大子矩阵和
- 动态规划--循环数组最大子段和
- 动态规划-循环数组最大子段和
- hdu1081 最大子矩阵和(DP动态规划 最大子序列和变形题)
- 动态规划---求最大子数组之和
- 连续最大子列和的动态规划写法
- 动态规划:最大子矩阵