我需要一个数据结构来存储 {1, . . . , n}(n 最初给出)并且仅支持以下操作:
• 最初:n 给定,S = {1, . . . , n} 开头。
• delete(i):从S 中删除i。如果i 不在S 中,则无效。
• pred(i):返回 i 的 S 中的前任。这意味着 max{j ∈ S | j < i},S 中严格小于 i 的最大元素。如果没有,则返回 0。参数 i 保证在 {1, . . . , n},但可能在也可能不在 S 中。
例如,如果 n = 7 且 S = {1, 3, 6, 7},则 pred(1) 返回 0, pred(2) 和 pred(3) 返回 1。
我需要弄清楚:
- 表示 S 的数据结构
- 初始化算法(O(n) 时间)
- 删除算法(O(α(n)) 摊销时间)
- pred (O(α(n)) 摊销时间的算法)
将不胜感激任何帮助(我不需要代码 - 只是算法)。