2016-10-05 13 views
1

私は行列N * Nを持ちます。行列の挿入とシフトn * n

Iが挿入行/ COLが全て1

である場合、マトリックスと確認するためにそれを挿入し、NUM 0/1を取得する機能を実装する必要があり、このためにする必要があります マトリックスもし次のようになります。

0 1 0 
1 1 0 
0 0 0 

そして、我々は次のようになり行列になりましたので、1を挿入します。我々は0を挿入し、その行列がどのように見える今場合は

1 0 1 
0 1 1 
0 0 0 

0 1 0 
1 0 1 
1 0 0 

私は行列への右シフトを行うと思いますが、私はo(n^2)時間かかるでしょう。

値(0/1)を挿入し、すべて1の行と列をチェックする機能を実装する別のアイディアがありますか?

ありがとうございます!

+0

ここに質問がありますか? –

+1

はより効率的な方法ですか?たぶんbitVector? – maz

+0

私はそれが 'O(n^2)'からさらに減らすことはできませんが、他の誰かがあなたを提案する良いオプションを持っていることを期待できます:) –

答えて

-1

マトリックスは、一般wがアレイ(xyはゼロベースである)の幅であるx*w + yとしてインデックス各(x,y)位置と、メモリにアレイとして実現されます。配列を印刷するのは、すべてのw要素の後に新しい行を挿入するのと同じくらい簡単です。

これにより、挿入がO(n)の操作になります。すべての要素を配列の1つの位置だけずらしてください。

+0

その配列uの要素の総数は 'n^2' 'nではない。したがって、時間の複雑さは、私がちょうど与えたalgoの 'O(n)'ではなく、 'O(n^2)'です –

+0

OPの 'N * N'である配列の長さとして' n'を書きました質問。あなたは正しいです、それはまだ 'O(N * N)'または 'O(N^2)'の操作です。行列のすべての要素を更新する必要があります。 –

関連する問題