“跳表在底层全量链表之上随机建立稀疏快车道,以期望对数搜索换额外指针;Move to Front按访问重排链表,用竞争分析而非最坏查找界评价。两者都不是普通链表常数插删性质的直接推论。指针机模…”
记录、入口与允许操作 ​
指针机的内存由记录组成。每条记录含
关键限制是:记录地址没有可供算法观察的整数值。算法不能对地址加减、从键的 bit 算出某个任意内存位置,也不能把许多指针打包进一字后并行处理。若允许数组,则访问单元也须由已持有的显式引用逐步获得;不能悄悄恢复随机地址计算。
时间按上述原语步数计算,空间按可达记录数及每条记录的常数字段计算。比较是否单位成本、是否允许随机分支、输入键是否为不可分原子,都必须随结论声明;“pointer machine”并不是唯一完全标准化的指令表。
与 Word-RAM、Cell-probe 的关系 ​
Word-RAM把一个
Cell-probe 模型则把地址计算和内部计算设为免费,只统计读写的
真例:链表中的第六个记录 ​
设入口指向单链表首节点,要读取第六个节点。指针机必须执行五次 next 追踪;即使节点在现实内存中恰好连续,也不能把首地址加五倍记录大小。若已额外维护每隔四个节点的跳指针,可以更快,但这些跳边占空间且要在更新时维护。
数组 RAM 会用 base + 5 一步定位同一逻辑位置。两种实现的接口都可叫“读取第六项”,成本差异来自访问模型,而不是渐近记号写法。
几何范围搜索中的模型差异 ​
正交范围查询的比较树、范围树和指针式报告结构只需沿节点导航,天然适合指针机。Word-RAM 结构还可能把多个秩、位图或微块答案打包在一字中,从而得到更低的对数因子。
因此一个声称“范围报告需
随机化与可达地址 ​
随机化可以让算法在若干已知指针或局部更新方案中抽样,却不会赋予随机地址访问。若当前只持有节点
对固定输入
其中每条随机执行仍逐步沿合法指针导航。若对手能观察先前随机选择后再修改结构,还要说明保证针对 oblivious 还是 adaptive 更新序列;隐藏种子本身不是指针机原语。
空间按已分配记录还是当前入口可达记录计量也会影响结论。惰性删除后,断开但尚未回收的节点仍占实际空间;若分析只数可达结构,就必须把垃圾回收过程和成本另行说明。
树导航状态轨迹 ​
在一棵二叉搜索树中查键
失败边界 ​
现实机器既能沿指针,也能对地址附近做数组算术,并受缓存层次影响,所以它不严格等于任一抽象模型。Pointer-machine 上较慢不等于现实代码必慢;该模型的用途是隔离“只靠链接结构能做到什么”。
稳定节点身份也不表示垃圾回收免费。删除记录前要保证没有可达指针仍引用它;持久化或共享结构还要把所有权计入空间。若算法把键解释成整数、通过键构造一个表下标,模型已经增强,相关下界必须重新审计。
参考资料
- Robert E. Tarjan, “A Class of Algorithms Which Require Nonlinear Time to Maintain Disjoint Sets,” Journal of Computer and System Sciences 18(2), 1979.
- Bernard Chazelle, “Lower Bounds for Orthogonal Range Searching: I. The Reporting Case,” Journal of the ACM 37(2), 1990.
- Mihai Pătraşcu and Mikkel Thorup, “Time-Space Trade-Offs for Predecessor Search,” STOC, 2006, for model-sensitive comparisons.