您的位置:首页 > 其它

求一个矩阵中最大的二维矩阵(元素和最大)

2012-03-20 21:07 363 查看
35.(矩阵)

求一个矩阵中最大的二维矩阵(元素和最大).如:

1 2 0 3 4

2 3 4 5 1

1 1 5 3 0

中最大的是:

4 5

5 3

要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码

遍历每个二维矩阵,记录和最大的index。时间复杂度O(m*n)

//coder:Lee,20120320

#include<iostream>

#include<cassert>

using namespace std;

struct Index

{

int indexRow;

int indexCol;

};

//Output: left-up index

Index Max2DInMatrix(int A[][5],int row,int col)

{

assert(A!=NULL&&*A!=NULL&&row>1&&col>1);

Index leftUpIndex;

leftUpIndex.indexRow=0;

leftUpIndex.indexCol=0;

int maxSum=-999999;

int tempSum=0;

for(int i=0;i<row-1;i++)

for(int j=0;j<col-1;j++)

{

tempSum=A[i][j]+A[i+1][j]+A[i][j+1]+A[i+1][j+1];

if(tempSum>maxSum)

{

maxSum=tempSum;

leftUpIndex.indexRow=i;

leftUpIndex.indexCol=j;

}

}

return leftUpIndex;

}

int main()

{

int A[3][5]={{1 ,2 ,0 ,3 ,4},{2 ,3 ,4 ,5 ,1},{1 ,1 ,5 ,3 ,0}};

Index index=Max2DInMatrix(A,3,5);

for(int i=index.indexRow;i<=index.indexRow+1;i++)

{

for(int j=index.indexCol;j<=index.indexCol+1;j++)

cout<<A[i][j]<<" ";

cout<<endl;

}

return 0;

}

扩展:参考http://blog.csdn.net/yuucyf/article/details/6717435

如果题目是要求求最大的子矩阵呢,那么我们就可以把矩阵每一竖直方向的排列,看做一个元素。

所以,矩阵就转化成了我们熟悉的一维数组。

即以上矩阵,相当于:

a[1->n][1] a[1->n][2] ... a[1->n][i] .. a[1->n][j] .. a[1->n]

1->n 表示竖直方向,其中a[1->n][1]表示第一列中的所有元素相加后的值。

那么,假定是5X5矩阵,那解法是:

第一行:a[1-5][1] a[1-5][2] a[1-5][3] a[1-5][4] a[1-5][5] 形成一个一维数组,该数组的最大和值

为Sum1.

第二行:a[2-5][1] a[2-5][2] a[2-5][3] a[2-5][4] a[2-5][5] 形成一个一维数组,该数组的最大和值

为Sum2.

第三行:a[3-5][1] a[3-5][2] a[3-5][3] a[3-5][4] a[3-5][5] 形成一个一维数组,该数组的最大和值

为Sum3.

第四行:a[4-5][1] a[4-5][2] a[4-5][3] a[4-5][4] a[4-5][5] 形成一个一维数组,该数组的最大和值

为Sum4.

第五行:a[5][1] a[5][2] a[5][3] a[5][4] a[5][5] 形成一个一维数组,该数组的最大和值为Sum5.

然后比较Sum1到Sum5找出最大值就为该矩阵的最大子矩阵所对应的和值.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐