"BitVector" (数据结构)

"BitVector"

表示布尔值向量或根据位元数组构建的集合的成员.

更多信息

  • "BitVector" 是一种非常紧凑的数据表示,只能采用两个值,例如布尔数据,也可以是集合的高效表示.
  • 位元的编号与 BitSet 等其他位元运算一致,因此 0 表示第一位.
  • CreateDataStructure[ "BitVector",length]创建新的指定 length"BitVector"
    CreateDataStructure["BitVector",blist]根据含有 TrueFalse 的布尔列表 blist 创建新的 "BitVector"
    Typed[x,"BitVector"]x 的类型为 "BitVector"
  • 对于类型为 "BitVector" 的数据结构,可进行以下运算:
  • ds["BitAnd",dsi]用按位 Anddsdsi 中的位元组合在一起用时: O(n/8)
    ds["BitClear",k]ds 中的第 k 个位元设为 0用时:O(1)
    ds["BitClearAll"]ds 中的所有位元设为 0用时:O(n)
    ds["BitCount"]返回 ds 中被设为 1 的位元的数量用时:O(n)
    ds["BitGet",k]获取 ds 中的第 k 个位元用时:O(1)
    ds["BitInvert",k]反转 ds 中第 k 个位元的值用时:O(1)
    ds["BitList"]返回 ds 中被设为 1 的位元的列表用时:O(n)
    ds["BitNand",dsi]用逐位 Nand 组合 dsdsi 中的位元用时:O(n/8)
    ds["BitNor",dsi]用逐位 Nor 组合 dsdsi 中的位元用时:O(n/8)
    ds["BitNot",dsi]翻转 ds 中的位元用时:O(n/8)
    ds["BitOr",dsi]用按位 Ordsdsi 中的位元组合在一起用时: O(n/8)
    ds["BitSet",k]ds 中的第 k 个位元设为 1用时:O(1)
    ds["BitTest",k]如果 ds 中的第 k 个位元被设为 1 则返回 True,否则设为 False用时:O(1)
    ds["BitXnor",dsi]用逐位 Xnor 组合 dsdsi 中的位元用时:O(n/8)
    ds["BitXor",dsi]用按位 Xordsdsi 中的位元组合在一起用时: O(n/8)
    ds["Boole"]返回一个数值数组,其中 ds 中的置位位元为 1,其他位元为 0用时:O(n)
    ds["Capacity"]返回可以存储在 ds 中的位元的数量用时:O(1)
    ds["Copy"]返回 ds 的拷贝用时:O(n)
    ds["Length"]返回 ds 中可以存储的位元的数量用时:O(1)
    ds["OffBitList"]返回 ds 中关闭的位元的列表用时:O(n/8)
    ds["OffBitList",dsi]返回在 dsdsi 中皆 Off 的位元的列表用时:O(n/8)
    ds["OnBitList",dsi]返回在 dsdsi 中皆 On 的位元的列表用时: O(n/8)
    ds["Visualization"]返回 ds 的可视化用时:O(n)
  • 还支持以下函数:
  • dsi===dsj如果 dsi 等于 dsj 则为 True
    FullForm[ds]ds 的完全形式
    Information[ds]关于 ds 的信息
    InputForm[ds]ds 的输入形式
    Normal[ds]ds 转换成普通表达式

范例

打开所有单元关闭所有单元

基本范例  (3)

可用 CreateDataStructure 创建新的 "BitVector"

将第 20 个位元设为 1:

测试一个位元是否被设置为 1:

提取位元:

反转位元:

获取被设为 1 的位元的列表:

返回表达式形式的 ds

可用普通列表创建新的 "BitVector"

验证它们是相等的:

可视化数据结构:

测试共有的位元:

两者中皆 on 的位元:

两者中皆 off 的位元:

组合:

"BitVector" 只含有两者中皆 on 的位元:

范围  (1)

信息  (1)

可用 CreateDataStructure 创建新的 "BitVector"

数据结构 ds 的信息:

属性和关系  (3)

"BitVector" 中位的编号与 Power 和位运算(如 BitSet)一致.

创建两个位向量:

用零初始化两个位向量:

SameQ 测试相等性:

通过将一个位元设为 1 改变其中一个位向量:

两个位向量不再相等:

UnsameQ 测试不相等性:

创建位向量:

获取与位元对应的 0/1 值组成的数组:

当位元被置位时,数组的值为 1,否则为 0:

这相当于对布尔列表应用 Boole: