第07周实验七最大子矩阵和问题

时间:22-09-12 网友

实验七 动态规划 最大子矩阵问题

一、实验目的

   1、分析并掌握"最大子矩阵" 问题的动态规划算法求解方法;

   2、运用动态规划算法解决实际问题加深对动态规划算法的理解和运用;

  

二、实验环境

Windows XP以上版本的操作系统,Visual Studio 2010编程环境。

三、 实验内容

  使用动态规划算法解决最大子矩阵问题,并能返回最大子矩阵的边界下标。

  

问题描述:给定一个m行n列的整数矩阵A,试求A的一个子矩阵,使其各元素之和为最大。

问题分析:用二维数组a[1:m][1:n]表示给定的m行n列的整数矩阵。子数组a[i1:i2][j1:j2]表示左上角和右下角行列坐标分别为(i1,j1)和(i2,j2)的子矩阵,其各元素之和记为:

最大子矩阵问题的最优值为。

如果用直接枚举的方法解最大子矩阵和问题,需要O(m^2n^2)时间。注意到,式中,,设,则

容易看出,这正是一维情形的最大子段和问题。因此,借助最大子段和问题的动态规划算法MaxSum,可设计出最大子矩阵和动态规划算法

参考:最大字段和动态规划算法:

int MaxSum(int n,int *a)

{

int sum=0,b=0;

for(int i=1; i<=n; i++)

{

if(b>0)

{

b+=a[i];

}

else

{

b=a[i];

}

if(b>sum)

{

sum = b;

}

}

return sum;

}

《第07周实验七最大子矩阵和问题》相关文档:

第07周实验七最大子矩阵和问题09-12

Top