У меня квадратная доска (матрица NxN). Каждый квадрат (ячейка) имеет определенные точки, связанные с ним. Моя цель - найти самую большую подматрицу, которая имеет самое высокое суммирование точек. Я начал с попытки найти все субматрицы и их веса. Но я зациклился на том, как это сделать.Лучший/Самый быстрый способ перебора всех подматриц матрицы NxN
Я думал, что у меня может быть HashMap<String,Integer>
, который хранит начальную строку, столбец и размер подматрицы. Код должен выглядеть примерно так:
int [][] mat = new int[10][10];
void countSubMatrix()
{
for(int i = 0; i<mat.length; i++)
{
for(int j = 0; j<mat[i].length; j++)
{
storeSubMatrix(i,j);
}
}
}
void storeSubMatrix(int x, int y)
{
int size = 0;
int tempX = x;
int tempY = y;
while(tempX < board.length && tempY < board[x].length)
{
map.put(x.toString() + "," + y.toString(),size+1);
tempX++;
tempY++;
}
}
Но я не знаю, правильно ли это сделать. Есть предположения?
Нужны ли подматрицы также квадратные? Могут ли они быть любого размера меньше, чем NxN? Могут ли значения ячейки быть отрицательными? – DNA
Они тоже должны быть квадратными. И да, любой размер меньше NxN. Ну, в моей игре нет отрицательных значений, но это хороший вопрос. Как это имеет значение, если ячейка имеет отрицательную ценность? – noMAD
@noMAD: Если отрицательных значений нет, ответ тривиален - полная матрица [по определению и сама субматрица] имеет не меньшее суммирование, чем любую из ее подматриц - таким образом, она максимальна. Однако, я сомневаюсь, что это то, что вы действительно после ... – amit