“同一递归图像还能服务不同模型。对数方法动态化把静态结构按二进制块合并,以重建换取摊还更新;缓存无关模型通过递归布局在未知 $B,M$ 下控制块传输;并行算法模型把相互独立的子问题同时执行,并…”
形式陈述
对数方法把可分解的静态查询结构改成支持插入的分层结构。设当前对象为有限集合,查询
例如成员查询取逻辑或,计数查询求和。本节先承诺每次插入的键尚未出现;若字典接口还要求检测同键并覆盖旧值,定位与更新旧记录的费用必须另外计入。
维护块
插入先形成一个单键块。若该层已有块,合并两块并在更高层构建新结构,像二进制进位一样继续。令
直觉
层占用位就是键数的二进制表示。一个键每次参与更高层重建,所在块大小至少翻倍,因此不会在同一层被反复重建。查询则要访问所有当前非空块,再按原问题的组合规则合成答案。
这种结构保存的是一组不同大小的静态索引。它与分治法共享分组合并的图像,但这里的层次由更新进位形成,不要求每个静态建表过程本身也是分治算法。
例子与边界
一次进位与一次查询
当前有大小1、2、4的三个有序块,插入一个新键时,临时单键块依次归并成大小2、4、8的块。每次线性归并利用了两输入已经有序的条件,因此
成员查询在每个非空数组二分,再对命中结果取或,总成本为
查询组合不是免费假设
一般查询成本为
其中组合成本按真实答案表示计算。若
可分解性也需要证明。知道各块的最近点,可以比较距离取全局最近点;仅知道每块的某个全局路径摘要,却未必能恢复跨块组合出的路径。底层数据同样是“集合”,并不保证任意查询都可按块合成。
推论与应用
逐层的摊还账本
前
若固定
从只插入到完整动态接口
若答案属于可逆群,且删除对象确实来自当前集合,可考虑分别记录插入与删除贡献再相减;普通成员关系的逻辑或没有这种逆运算。墓碑方案则必须让查询识别已删除身份,并控制清理成本。
完整字典还需决定重复插入、覆盖更新和删除失败的语义。若把同一键的多个版本放进不同块,原先的“不交键集合”不变量已经改变,应改用记录身份并按版本规则筛选,重新证明查询组合。全局重建可以定期清理这些历史记录;逐操作最坏延迟则还需为各层迁移安排预算与期限。
参考资料
- Jon Louis Bentley、James B. Saxe,Decomposable Searching Problems I: Static-to-Dynamic Transformation,Journal of Algorithms 1(4), 1980,pp. 301–358。
- Mark H. Overmars,The Design of Dynamic Data Structures,Lecture Notes in Computer Science 156,Springer,1983。