我想知道 Bitvector32 是否有在 O(1) 时间内运行的位运算符。我目前正在使用大尺寸的 BitArray 并使用按 O(位数组的大小)操作的按位与、或和非。
我在互联网上搜索了这个,但找不到答案。希望这里的人能帮忙!
鉴于 aBitVector32
始终是 32 位,因此没有可言的大小变化 - 那么如何根据数据大小来表示任何操作呢?
就我个人而言,我从来没有找到BitVector32
一个非常令人愉快的类型——我通常可能只是坚持使用 aUInt32
来表示 32 位,并使用普通&
的|
等运算符。
如果你想BitArray
用一堆值替换你的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) 操作。