問題は、すべてのセルが黒または白のマトリックスが与えられた場合に、すべての境界セルが黒の最大サイズのサブマトリックスを見つけることです (内部セルは黒である必要はありません)。
現在、私はせいぜいO(N^4)
解決策を考えることができます。このために、2 つの補助テーブルを作成します。1 つは各セルの各行の右に連続する黒セルの数を示し、もう 1 つは各セルのその列にある連続する黒セルの数を示します。次に、次のようにします。
for each row (i):
for each cell (i,j):
for each window (1..n-j):
if auxrow[i,j+window]-auxrow[i,j] == window: #so, all cells in this window is black
colsleft = auxcol[i,j]
colsright = auxcol[i,j+window]
botttom_row = min(colsleft,colsright)
for bot in (row..row+mincol):
if auxrow[bot][j+window]-auxrow[bot][j] == window:
maxlen = ... #do whatever to save this sub-matrix as answer
このソリューションを改善するにはどうすればよいですか? Topcoderで興味深い議論、特に Rem ( O(N^2*log N)
) による回答と Tomek によるフォローアップの改善提案を見ましたが、どちらの解決策も理解できませんでした。誰かが私よりも優れたソリューションを提供したり、それらのアルゴリズムを説明したりできますか?