【发布时间】:2012-05-30 16:51:45
【问题描述】:
我想知道 Bitvector32 是否有在 O(1) 时间内运行的位运算符。我目前正在使用大尺寸的 BitArray,并使用在 O(bitarray 的大小)中运行的 Bitwise And、Or 和 Not。
我在互联网上搜索了这个,但找不到答案。希望这里的人能帮忙!
【问题讨论】:
我想知道 Bitvector32 是否有在 O(1) 时间内运行的位运算符。我目前正在使用大尺寸的 BitArray,并使用在 O(bitarray 的大小)中运行的 Bitwise And、Or 和 Not。
我在互联网上搜索了这个,但找不到答案。希望这里的人能帮忙!
【问题讨论】:
因此,
var vectorAnd = new BitVector32(vector1.Data & vector2.Data);
var vectorOr = new BitVector32(vector1.Data | vector2.Data);
var vectorNot = new BitVector32(~vector1.Data);
都是 O(1) 操作。
【讨论】:
鉴于 BitVector32 始终是 32 位,因此没有可说的大小变化 - 那么如何根据数据大小来表示任何操作?
就我个人而言,我从来没有发现BitVector32 是一种非常令人愉快的类型——我通常会坚持使用UInt32 来表示32 位,并使用普通的&、| 等运算符。
如果您正在考虑用一堆 BitVector32 值替换您的 BitArray,那最终仍然会使每个操作 O(n)。基本上很难避免这种情况,除非您实际存储原始值和操作,推迟操作的实际应用 - 这将更加更加复杂,并且只有在您只访问时才能使事情变得更好结果的一小部分。
【讨论】: