C#中的Bitvector32和Bitarray

时间:2012-05-24 05:48:20

标签: c# bitarray bitvector

我想知道Bitvector32的按位运算符是否在O(1)时间内运行。我目前正在使用大尺寸的BitArray并使用Bitwise And,Or和Not,它们以O(比特阵列的大小)运行。

我在互联网上搜索了这个,但找不到答案。希望这里的人可以帮忙!

2 个答案:

答案 0 :(得分:2)

鉴于BitVector32总是正好是32位,所以没有可变的大小 - 所以如何根据数据的大小来表达任何操作?

就我个人而言,我从未发现BitVector32是一种非常令人愉快的类型 - 我通常只会坚持使用UInt32代表32位,并使用普通&,{{1等操作符。

如果您正在考虑用一堆|值替换BitArray,那么最终仍会使每个操作都为O(n)。从根本上说,除非你实际存储原始值和操作,否则很难避免这种情况,推迟操作的实际应用 - 这将更加复杂,并且如果你只访问一个,那么最终会让事情变得更好结果的一小部分。

答案 1 :(得分:2)

  • 将BitVector32转换为int是O(1)操作。 (reference
  • 将int转换为BitVector32是O(1)操作。 (reference
  • 对int执行按位操作是O(1)操作。

因此,

var vectorAnd = new BitVector32(vector1.Data & vector2.Data);
var vectorOr = new BitVector32(vector1.Data | vector2.Data);
var vectorNot = new BitVector32(~vector1.Data);

都是O(1)操作。