colSum と rowSum という 2 つの 10 進数の変数があり、これらの合計に基づいてバイナリ値のマトリックスを作成したいものを使用します。rowSum 配列変数は、各行のすべての 1 を追加した結果です。
だから、あなたが持っているなら
rowSum = [0,1,2]
colSum = [1,1,1]
次の配列を適切に構築する必要があります
matrix = [
[0,0,0],
[0,0,1],
[1,1,0]
]
私は PHP でこのメソッドを使用しています。これは 3x3 マトリックスでは機能しますが、8x8 などのより大きなマトリックスでは機能しません。まず、rowSum 値を使用して行のすべての 1 を埋めます。次に、2 つの列の間違った合計値を見つけようとします。ピボットを使用して、colSum の正しい値を取得するまで、同じ行でそれらを交換します (1 つは cero 値)。しかし、2 つの列の同じ行で 1 と 0 を変更するには、基準をある程度制御する必要があるため、機能しません...
これは私が使用している方法です。
この行列があるとしましょう (N=3 -> NxN):
0 0 0
0 0 1
1 1 0
次に、次の配列があります
R0 = {0,1,2} //--> result of sums of each rows: ( 0+0+0, 0+0+1 , 1+1+0 )
C0 = {1,1,1} // ->sums of each columns
ステップ1
各行に R0(i) と同じ数の 1 を使用して、NxN 配列を作成して塗りつぶします。
0 0 0
1 0 0
1 1 0
この新しい行列の合計を計算します: R1 = {0,1,2} C1 = {2,1,0}
ステップ2
作成した行列の列和のすべての要素が C0 (原点) と同じ値を持っているかどうかを確認します
for ( i=0, N-1) do
if C0(i)!=C1(i) then
ReplaceColumn(i)
end
end
列を置き換えるには、条件を掘り下げる必要があります。C0(0) = 1 != C1(0) = 2 最初の列の合計は、replace を呼び出す条件を満たしているので、
ステップ 3
分岐限定法を適用するための条件を選択し、グローバル条件 (すべての列の合計) を満たす列を変更するのに最適な行を見つけます。
列の合計の差の変化量は次のとおりです。
|C0(i)-C1(i)|
この例では |C0(0)-C1(0)| = 1 回の変更。変更によって列の合計の差が大きくなる場合は、戻る条件にする必要があります。
Σi,N(|C0(i)-C1(i)|)
では、この方法は本当に機能するのでしょうか?