"BitVector" (数据结构)
-
参见
- 函 数
- BitSet
- BitClear
- BitGet
- CreateDataStructure
- DataStructure
-
- 编译类型
- Boolean
-
- 数据结构
- BloomFilter
- 相关指南
-
-
参见
- 函 数
- BitSet
- BitClear
- BitGet
- CreateDataStructure
- DataStructure
-
- 编译类型
- Boolean
-
- 数据结构
- BloomFilter
- 相关指南
-
参见
"BitVector" (数据结构)
"BitVector"
表示布尔值向量或根据位元数组构建的集合的成员.
更多信息
- "BitVector" 是一种非常紧凑的数据表示,只能采用两个值,例如布尔数据,也可以是集合的高效表示.
- 位元的编号与 BitSet 等其他位元运算一致,因此 0 表示第一位.
-
CreateDataStructure[ "BitVector",length] 创建新的指定 length 的 "BitVector" CreateDataStructure["BitVector",blist] 根据含有 True 和 False 的布尔列表 blist 创建新的 "BitVector" Typed[x,"BitVector"] 设 x 的类型为 "BitVector" - 对于类型为 "BitVector" 的数据结构,可进行以下运算:
-
ds["BitAnd",dsi] 用按位 And 将 ds 和 dsi 中的位元组合在一起 用时: 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 组合 ds 和 dsi 中的位元 用时:O(n/8) ds["BitNor",dsi] 用逐位 Nor 组合 ds 和 dsi 中的位元 用时:O(n/8) ds["BitNot",dsi] 翻转 ds 中的位元 用时:O(n/8) ds["BitOr",dsi] 用按位 Or 将 ds 和 dsi 中的位元组合在一起 用时: 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 组合 ds 和 dsi 中的位元 用时:O(n/8) ds["BitXor",dsi] 用按位 Xor 将 ds 和 dsi 中的位元组合在一起 用时: 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] 返回在 ds 和 dsi 中皆 Off 的位元的列表 用时:O(n/8) ds["OnBitList",dsi] 返回在 ds 和 dsi 中皆 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 转换成普通表达式 Pick[list,ds] 提取 ds 中 1 对应的 list 中的元素
范例
打开所有单元 关闭所有单元基本范例 (3)
可用 CreateDataStructure 创建新的 "BitVector":
ds = CreateDataStructure["BitVector", 64]ds["BitSet", 20]ds["BitTest", 20]ds["BitTest", 21]ds["BitGet", 21]ds["BitInvert", 21]ds["BitList"]list = Normal[ds]ds1 = CreateDataStructure["BitVector", list]ds1 === dsds["Visualization"]ds = CreateDataStructure["BitVector", 8];
ds["BitSet", 2];ds["BitSet", 4];
ds1 = CreateDataStructure["BitVector", 8];
ds1["BitSet", 2];ds1["BitSet", 5];ds["OnBitList", ds1]ds["OffBitList", ds1]ds = CreateDataStructure["BitVector", 8];
ds["BitSet", 2];ds["BitSet", 4];
ds1 = CreateDataStructure["BitVector", 8];
ds1["BitSet", 2];ds1["BitSet", 5];ds["BitAnd", ds1];
ds["BitList"]范围 (2)
信息 (1)
可用 CreateDataStructure 创建新的 "BitVector":
ds = CreateDataStructure["BitVector", 64]Information[ds]选择 (1)
创建类型为 "BitVector" 且长度为 5 的数据结构:
ds = CreateDataStructure["BitVector", 5];将其第二位和第四位设为 1,注意它是从 0 开始索引的,而不是从 1 开始索引的:
ds["BitSet", 1];
ds["BitSet", 3]Pick[{a, b, c, d, e}, ds]应用 (1)
将 Pick 与由 True 和 False 组成哦列表一起使用:
selector = RandomChoice[{True, False}, 10 ^ 7];
data = Range[10 ^ 7];
AbsoluteTiming[pick = Pick[data, selector];]ds = CreateDataStructure["BitVector", selector];
AbsoluteTiming[pick2 = Pick[data, ds];]pick === pick2属性和关系 (3)
"BitVector" 中位的编号与 Power 和位运算(如 BitSet)一致.
ds = CreateDataStructure["BitVector", 8];
ds["BitSet", 1];
Normal[ds]2^1BitSet[0, 1]ds1 = CreateDataStructure["BitVector", 32];
ds2 = CreateDataStructure["BitVector", 32];ds1["Visualization"]ds2["Visualization"]用 SameQ 测试相等性:
ds1 === ds2ds1["BitSet", 1]ds1 === ds2用 UnsameQ 测试不相等性:
ds1 =!= ds2ds = CreateDataStructure["BitVector", {True, False, True, True, False, False, True, False}]DataStructure["BitVector", {"Data" -> ByteArray["TQ=="], "ElementSize" -> 8, "Capacity" -> 8}]bar = ds["Boole"]TableForm[{Normal[ds], Normal[bar]}]Boole[Normal[ds]] == bar历史
2020年引入 (12.1)