【发布时间】:2021-10-25 21:55:21
【问题描述】:
我需要一个结构来存储数据,以便以下所有操作都是对数时间:
该结构表示唯一元素的有序列表。需要支持以下操作:
- 在列表的右端添加一个元素。
- 从列表中的任意位置删除一个元素。
- 获取列表的长度。
- 将给定索引处的元素放入列表中。
- 获取给定元素的索引。
例如,如果这个结构被实现为一个简单的 python 列表,则操作 1、3 和 4 是(摊销的)常数时间,其中 2 和 5 是线性的(5 可以相对容易地取对数,但 2仍然存在问题)。
我想到的唯一方法是有一个哈希表存储每个元素之前完成的插入次数,以及一个存储对的二叉搜索树(必须是自平衡的)@ 987654321@,其中i 是在值之前完成了多少次插入,并且是用于使其成为 BST 的顺序,此外每个节点还存储以它为根的子树的总大小(这需要每当任何节点发生变化时向上传播)。这似乎是一个过于复杂的方案,是否有更简单的结构可以在所有列出的操作中实现对数或更好的性能?
【问题讨论】:
标签: data-structures