具有不可预测时序的数据结构探索
1. 设计目标
在数据结构设计领域,存在两个重要目标:
- 调用效率 :高效操作并非时序不可预测性所独有的要求,自算法设计诞生以来,它一直是主要目标。我们不能为了获得不可预测性而过度牺牲效率。这里,效率的衡量标准是自适应对手能在多大程度上操纵数据结构,使他选择的调用尽可能昂贵。
- 调用时序的不可预测性 :直观地说,要实现时序不可预测,要求对手无法预测调用所需的时间。具体而言,对手在观察了他选择的操作的时序后,能生成每个下一个可能调用的可能时序的概率分布。我们通过所有下一个可能调用的时序分布的熵的最小值来衡量不可预测性,即 $min_{inv} H(dur(inv))$,其中 $dur(inv)$ 是表示调用 $inv$ 时序的随机变量,基于对手到目前为止观察到的调用及其时序,$H()$ 表示熵。熵直观地衡量了对手对结果时序的不确定程度。
这两个目标之间存在一定的矛盾。效率要求限制了我们所能期望的不可预测性程度。例如,一个大小为 $n$ 的数据结构,如果以 $O(f(n))$ 的时间实现调用($f$ 为非递减函数),那么其不可预测性(按上述定义)最多为 $log_2 O(f(n)) = O(log_2 f(n))$。此外,虽然这两个目标没有明确包括向对手隐藏数据结构状态,但这样做有助于实现我们的目标。
2. 跳跃表(Skip Lists)
跳跃表是一种可用于实现集合抽象数据类型的数据结构。它由多个非空链表组成,记为 $list_1, \ldots, list_m$,其中 $m \geq 1$ 在跳跃表的生命周期内可以变化。每个链表
具有不可预测时序的跳跃表数据结构探索
超级会员免费看
订阅专栏 解锁全文
8888

被折叠的 条评论
为什么被折叠?



