“跳表在底层全量链表之上随机建立稀疏快车道,以期望对数搜索换额外指针;Move to Front按访问重排链表,用竞争分析而非最坏查找界评价。两者都不是普通链表常数插删性质的直接推论。指针机模…”
形式陈述 ​
列表访问模型 ​
有一个包含同一组元素的无序线性列表。访问当前位置为
Move-to-Front(MTF)在每次访问后都把该元素直接移到表头。它不估计长期频率,也不预知未来序列;状态完全由最近访问顺序形成。
与任意比较算法的竞争界 ​
固定请求序列
令
当两算法从同一排列开始时
因此 MTF 对允许动态重排的离线最优算法也是 2-competitive;不同初始排列只产生与请求长度无关的加性项。
一次访问的逆序账本 ​
处理某次请求
其摊还访问成本为
共同位于
随后,
直觉
MTF 把“刚被请求”当作短期局部性的信号。一个热点第一次可能在列表深处,但访问后立即来到表头;连续热点的后续成本都降为 1。热点发生切换时,新热点也会自动前移,不需要维护频率计数或显式时间戳。
逆序势衡量的不是一份列表自身有多乱,而是在线列表与比较算法的排列差异。MTF 为寻找
例子与边界
设 MTF 当前列表为 [c,a,b,d],比较算法 [a,b,c,d],本次请求 b。这里 b 前面但在 c,所以 b 移到表头时
实际成本为 3,摊还成本仍为 3,而
模型边界必须固定。经典免费操作只允许“刚访问的元素向前移动”;若允许免费任意重排整个列表,比较基准会被彻底改变。若交换具有非单位权重、元素大小不同或访问代价不是位置的线性函数,也需要新的势函数或新的竞争界。
MTF 的保证是序列总成本,不是逐次延迟上界。一个长期未访问的元素第一次仍可能花费线性成本。static optimum 只选择一个固定排列,dynamic optimum 则能随序列付费调整;两种基准对应不同问题,不能只写“优于最优排列”而省略最优算法允许的操作。
Transpose 每次只把访问项前移一位,Frequency Count 按累计次数排序。它们也会让热点前移,却不因此自动继承 MTF 的 2-竞争性;竞争定理依赖具体状态更新与势变化,而不是“具有自调整性”这一宽泛描述。
推论与应用
MTF 是自调整数据结构和竞争分析的早期范例。证明中的势同时依赖在线算法与比较算法,展示了势能法不仅能分析单个数据结构的摊还操作,也能追踪两个动态状态之间的距离。
在 paging 的阶梯成本模型中,列表前
参考资料
- Daniel D. Sleator and Robert E. Tarjan, “Amortized Efficiency of List Update and Paging Rules,” Communications of the ACM 28(2), 1985, pp. 202–208.
- Allan Borodin and Ran El-Yaniv, Online Computation and Competitive Analysis, Cambridge University Press, 1998, Chapter 3.