2012-04-04 3 views
0

У меня квадратная доска (матрица 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++; 
    } 
} 

Но я не знаю, правильно ли это сделать. Есть предположения?

+0

Нужны ли подматрицы также квадратные? Могут ли они быть любого размера меньше, чем NxN? Могут ли значения ячейки быть отрицательными? – DNA

+0

Они тоже должны быть квадратными. И да, любой размер меньше NxN. Ну, в моей игре нет отрицательных значений, но это хороший вопрос. Как это имеет значение, если ячейка имеет отрицательную ценность? – noMAD

+0

@noMAD: Если отрицательных значений нет, ответ тривиален - полная матрица [по определению и сама субматрица] имеет не меньшее суммирование, чем любую из ее подматриц - таким образом, она максимальна. Однако, я сомневаюсь, что это то, что вы действительно после ... – amit

ответ

0

Самая большая подматрица, т. Е. Она также может быть прямоугольником, то this может вам помочь. Используя алгоритм Кадана для матрицы, это можно сделать в O(n^3).

+0

Можете ли вы подробно остановиться на решении O (n^2)? – noMAD

+0

@noMAD, извините, я смутил это с другой проблемой. Я не думаю, что это возможно меньше чем O (n^3). –

+0

Хорошо, я хотел бы знать, как это можно сделать в O (n^3) ??? Как вы примените алгоритм Кадане здесь? – noMAD

Смежные вопросы