私は四角形のボード(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