2012-04-04 11 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はあなたに役立つかもしれません。行列に対してkadaneのアルゴリズムを使用すると、O(n^3)で行うことができます。

+0

あなたはO(n^2)解決法について詳しく説明できますか? – noMAD

+0

@noMAD、申し訳ありません私はこれを他のいくつかの問題と混同しました。私はO(n^3)以下では可能ではないと思います。 –

+0

申し訳ありませんが、私はそれがO(n^3)でどのように行われるのかを知りたいですか?ここでKadaneのアルゴリズムをどのように適用しますか? – noMAD

関連する問題