“在Word RAM上,固定 $w=\Theta(\log N)$ 并提供字内移位、掩码、乘除和随机访存,每个目录字段及块偏移占常数个字。用微块查表为全部 $s\le b$ 的位型存类别、偏移…”
形式陈述
两种共同思想
四俄罗斯方法选微块长度
表规模与复杂度
若微块有
直觉
有限微块把许多次局部转移压成一个类型编号,字级并行则把许多独立布尔状态压进一个机器字;两者都先证明被打包的工作互不干扰,再用一次查表或字操作批量推进。加速来自这个可枚举或可并排的结构,不来自“使用了位运算”本身。
图中差分模式的二进制编码 1011 等于十进制11,所以查询写成
例子与边界
±1 RMQ 与 bitset DP
Euler 深度数组相邻差为
考虑非负整数权重的0/1子集和,只保留和
并丢弃高于
失败边界
表过大时缓存与预处理会吞掉收益;动态更新若改变微块类型,需要重新编码。理论 Word-RAM 的常数乘法、位提取不等同于任意现实 SIMD 指令,跨字移位和未对齐访问也不免费。未声明
推论与应用
预处理复用与转移闭包
应区分通用微表和依赖本次输入的表。
例如把
计算
Broadword 算法还要防止相邻字段的进位串扰,常在字段间留 guard bits。把多个小整数装进一字后直接做普通加法,若未证明进位不会越界,就不是合法的“并行比较”。
参数为什么取对数级
在 (type,l,r):先减去块首深度,把正负差分编码成 type,再用块内端点查出相对最小位置,最后加回块起点。表保存的是相对位置而非绝对深度,所以同一类型才能跨不同块、不同实例复用。
块长还受查询字段编码限制。若 type、两个端点和答案不能在常数字内寻址,所谓“一次查表”本身就要多字运算;选择参数时必须同时核对类型数、端点表维度和地址字长,而不只是写
字级并行的另一条检查线是“一个字能否容纳所有字段与隔离位”。例如用位集做可达状态转移时,移位、按位与或在
参考资料
- V. Arlazarov et al., On Economical Construction of the Transitive Closure of a Directed Graph, 1970.
- Donald Knuth, The Art of Computer Programming, Vol. 4A, Addison-Wesley, 2011, bitwise techniques.
- Virginia Vassilevska Williams, MIT 6.890 Lecture 2: Boolean Matrix Multiplication, 2021,§3:依赖输入矩阵块的表与通用 bitwise-OR 表的区别。
- Erik D. Demaine, MIT 6.851 Advanced Data Structures, notes on word-level parallelism, accessed 2026.