最大子矩阵和问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析 浙江工业大学信息工程学院 最大子矩阵和问题 问题描述:给定一个m行n 列的整数矩阵a,试求矩阵a 的一个子矩阵,使其各元素之和为最大。 分析:用2 维数组a[1 : m][1 : n]表示给定的m行n列的整数矩阵。子数组a[i1 : i2][j1 : j2]表示左上角和右下角行列坐标分别为(i1, j1)和(i2, j2)的子矩阵,其各元素之和记为: (1) 最大子矩阵和问题的最优解即为: (2) (3) 如果令: 那么 (4) 式(4)就是我们熟悉的最大子序列和的问题。 根据以上分析我们可得到最大子矩阵和问题的算法: Max_Sub_Matrix(m, n, a) //m为行数,n为列数,a为二维矩阵 sum ← 0 b[n] for i←1 to m for t←1 to n do b[t] = 0 //初始化数组b for j←i to m do for k←1 to n b[k] ← b[k] + a[j][k] max←Max_Sub_List(n, b) //函数返回n个数的序列b的最大子序列的和 if max sum then sum = max return sum 下面我们就通过来同学上课提出的一些特殊情况来检验算法的正确性。 1 2 3 1 -2 10 20 2 100 -1 -2 3 0 -2 -3 矩阵a的行m=3,列数n=3,矩阵的元素分布如上图所示。 当i = 1时,初始化数组b,使得 b: 0 0 0 当j = 1时,k从1递增到n,由算法的第8行可得数组b将首先存储矩阵的第一行的各值,即b为: b: -2 10 20 由最大子序列和的函数Max_Sub_List返回该序列的最大子序列的和值为max=30; 当j = 2时,k 从1递增到n,由算法的第8行可得数组b将矩阵a第二行的值分别加到原有各值上,可得数组b为 b: 98 9 18 同理,由函数Max_Sub_List返回该序列的最大子序列的和值为max=125。 当j = 3时,k从1递增到n,由算法的第8行可得数组b将矩阵a第三行的值分别加到原有各值上,可得数组b为 b: 98 7 15 同理,由函数Max_Sub_List返回该序列的最大子序列的和值为max=120。 到此,i的第一次循环结束。 当i = 2时,从新初始化数组b,使得 b: 0 0 0 j = 2时,k从1递增到n,由算法的第8行可得数组b将首先存储矩阵的第二行的各值,即b为: b: 100 -1 -2 由函数Max_Sub_List返回该序列的最大子序列的和值为max=100。 j = 3时,k从1递增到n,由算法的第8行可得数组b将矩阵a第三行的值分别加到原有各值上,可得数组b为 b: 100 -3 -5 由函数Max_Sub_List返回该序列的最大子序列的和值为max=92。 到此,i的第二次循环结束。 当i=3循环结束时,可求出该矩阵的最大子矩阵和值为125。 算法的第7到第9行求出每行i固定,j变化的最大子序列和的最大值,第6行为可能与第i行一起构成子矩阵的行,将其值对应加到第i行,然后求该子序列的最大值。而最外层的循环为分别求出每一行的子序列最大值。 说明:最大子序列的解法大家可根据上课介绍的方法使用动态规划法来构造。而大家在网上看到的解法一般不能处理(-1,-2,-3),类似于这种所有元素均为负值的序列,而且也不能够方便的处理返回最小个数的位置。 进一步实践: 1、大家可在上面提供的算法基础上扩充使得该算法能返回最小矩阵的位置; 2、如何解3维的情况(解法与2维类似,转化为一维的方式处理。

文档评论(0)

9988871 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档