私はビットの配列を持っています。ビットは、次の基準に従ってオン/オフを切り替えます。 1.ビットの左右のビットがオンの場合、そのビットを1にします。 2.境界条件(左端と右端のビットが1ビットだけに依存します。つまり、それを左またはその右のいずれか。配列のビットを変更する
この配列は、以下の基準でm回処理されます。
私が書きました次のコードでは、Aは元の配列、subsiquentは処理の配列ですが、これはO(nm)となります.nは長さ、mは何も処理しません。私の複雑さを減らすことができます。
for(int k = 0;k < m;k++){
for(int l = 0;l < n;k++){
if(l == 0){
if(A[l+1]==1)
subsiquent[l]=1;
else
subsiquent[l]=0;
//** is there a } missing here?
else if(l==n){
if(A[l-1]==1)
subsiquent[l]=1;
else
subsiquent[l]=0;
} else {
if(A[l+1]==1 && A[l-1]==1){
subsiquent[l]=1;
}else{
subsiquent[l]=0;
}
}
//** or is there a } missing here?
}
A = subsiquent;
}
あなたは 'N'ビット 'M'回をスキャンしたいですか?私は、複雑さがO(n * m)より大幅に減少することは疑いの余地があります。 – Thomas
これは、トグルするための代替ソリューションがないことを示唆しています。それをm回スキャンする以外にトグルすることはできませんか?ありがとう –
@ketananandなぜあなたはそれをm回スキャンしたいですか? –