“当图稀疏且无负环时,Johnson 算法以势函数重赋权后从每点运行 Dijkstra,时间随 $m$ 而非固定 $n^3$;它与 Floyd–Warshall 的稠密矩阵 DP 是不同成本区…”
两种共同思想 ​
四俄罗斯方法选微块长度
表规模与复杂度 ​
若微块有
±1 RMQ 与 bitset DP ​
Euler 深度数组相邻差为
对子集和的布尔可达集合,用位向量
一次字操作并行更新
失败边界 ​
表过大时缓存与预处理会吞掉收益;动态更新若改变微块类型,需要重新编码。理论 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, bitwise techniques.
- Erik Demaine, MIT 6.851/6.854 Notes on Word-Level Parallelism.