有没有人知道一种数据结构,在这种数据结构中,我可以在最坏情况下O(logn)中访问和删除第k项,并且还支持在最坏情况下O(logn)中的第k项之后插入一项的操作?
发布于 2013-02-06 13:14:01
是。您所描述的内容可以通过扩展树来实现。每个节点都有一个计数器,指示其子树(包括其自身)中的节点数。对于叶子节点,计数器是1。对于根节点,计数器是节点总数。这样,您就可以通过从根开始的二进制搜索找到第k个项目。无论何时插入/删除元素,都必须更新从该位置到根的路径中的计数器。
这种树被称为order statistic trees树、等级树、计数器树……
您可以找到一个实现here和另一个here。
请参阅由Cormen,Leiserson,Rivest和Stein撰写的“算法归纳”一书中的第14章“增强数据结构”。
https://stackoverflow.com/questions/14719099
复制相似问题