Давайте предположим, что мы имеем 2d массивMaximum в колонке 2d массива, используя разделяй и властвуй
1 2 3 1
5 6 4 0
0 3 2 1
1 2 1 0
Есть глобальный способ, как найти максимальное число в колонке, используя разделяй и властвуй технику, если длина из строка не была одинаковой для каждой строки?
Я имею в виду шаг в поиске пика внутри массива 2d, который требует этого шага.
На 1d массиве было бы что-то вроде
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)
с колонкой мы хотим найти максимум в качестве аргумента передан.
Но что было бы эффективным способом реализовать его для 2d-массива, учитывая тот факт, что мы не знаем, является ли матрица (2d-массив) NxN/NxM или длина строки не одинакова для каждой строки?
Сделайте 1-й случай по каждому столбцу, а затем 1-й случай снова по результатам каждого столбца? – David
IS D & C a должен использовать, чтобы решить ваш вопрос? – shole
@shole Это не обязательно, но я пытался понять это с помощью D & C – Darlyn