O(1) 時間で動作する Bitvector32 のビット演算子があるかどうかを知りたかったのです。私は現在、大きなサイズの BitArray を使用しており、O(bitarray のサイズ) で動作する Bitwise And、Or、および Not を使用しています。
これについてインターネットで検索しましたが、答えが見つかりませんでした。ここの人々が助けてくれることを願っています!
a が常に正確に 32 ビットであることを考えると、BitVector32
さまざまなサイズについて説明する必要はありません。では、どのような操作をデータのサイズで表すことができるのでしょうか?
個人的には、これほどBitVector32
快適な型を見つけたことはありません。UInt32
通常は、32 ビットを表す a に固執し、通常の&
, |
etc 演算子を使用します。
BitArray
yourを一連の値に置き換えることを考えている場合BitVector32
でも、各操作を O(n) にすることになります。基本的に、元の値と操作を実際に保存し、操作の実際の適用を延期しない限り、これを回避することは困難です。これははるかに複雑になり、結果のごく一部にしかアクセスしない場合にのみ、結果が改善されます。
したがって、
var vectorAnd = new BitVector32(vector1.Data & vector2.Data);
var vectorOr = new BitVector32(vector1.Data | vector2.Data);
var vectorNot = new BitVector32(~vector1.Data);
すべて O(1) 操作です。