【发布时间】:2016-12-25 23:52:57
【问题描述】:
假设我们有一个二维数组
1 2 3 1
5 6 4 0
0 3 2 1
1 2 1 0
如果每行的行长不同,是否有一种全局方法如何使用分治技术在列中找到最大数量?
我指的是在需要此步骤的二维数组中查找峰值的步骤。
在一维数组上会是这样的
int maxNumber( vector<int> a , int min , int max ){
if( min == max )
return a[min];
int mid = ( min + max)/2;
int i = maxNumber( a , min , mid );
int j = maxNumber( a , mid +1, max);
if( i > j)
return i;
return j;
}
vector<int> v = { 1 , 2 , 5 , 0 , 10 , 9};
cout << maxNumber( a , 0 , a.size() -1 );
现在对于 NxN 或 NxM 矩阵,我们可以做
int maxNumberCollum( vector<vector<int>> a , int row_min , int row_max , int size){
if ( row_min == row_max ){
return a[row_min][size];
}
int row = ( row_min + row_max ) / 2;
int i = maxNumberCollum( a , row_min , row , size );
int j = maxNumberCollum( a , row + 1 , row_max , size);
if( i > j)
return i;
return j;
};
vector< vector<int> > a = { { 1 , 2 , 3 },
{ 5 , 0 , 1 },
{ 6 , 2 , 0 }
};
cout << maxNumberCollum( a , 0 , a.size() -1 , 2 )
我们希望在作为参数传递的列中找到最大值。
但是考虑到我们不知道矩阵(二维数组)是否为 NxN / NxM 或者每一行的行长不同,如何将其实现为二维数组的有效方法是什么?
【问题讨论】:
-
对每一列做一维案例,然后对每一列的结果再做一维案例?
-
必须使用 D&C 来解决您的问题吗?
-
@shole 这不是必须的,但我试图用 D&C 来解决这个问题
-
错字提醒:它是一个列 - 不是“列”..
-
(标题中的
in column和这篇文章的第一个问题是什么?with column we want to find maximum in passed as argument.是什么意思?)
标签: c++ arrays algorithm containers divide-and-conquer