1

我想知道 Bitvector32 是否有在 O(1) 时间内运行的位运算符。我目前正在使用大尺寸的 BitArray 并使用按 O(位数组的大小)操作的按位与、或和非。

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

4

2 回答 2

3

鉴于 aBitVector32始终是 32 位,因此没有可言的大小变化 - 那么如何根据数据大小来表示任何操作呢?

就我个人而言,我从来没有找到BitVector32一个非常令人愉快的类型——我通常可能只是坚持使用 aUInt32来表示 32 位,并使用普通&|等运算符。

如果你想BitArray用一堆值替换你的BitVector32值,那最终仍然会使每个操作 O(n)。基本上很难避免这种情况,除非您实际存储原始值和操作,推迟操作的实际应用——这将更加复杂,并且只有在您只访问一小部分结果时才能使事情变得更好。

于 2012-05-24T05:53:16.957 回答
3
  • 将 BitVector32 转换为 int 是 O(1) 操作。(参考
  • 将 int 转换为 BitVector32 是一个 O(1) 操作。(参考
  • 对 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) 操作。

于 2012-05-24T05:55:18.473 回答