有没有人知道我可以访问和删除最坏情况下的第k项O(logn)的数据结构,并且还支持在最坏情况下在第k项之后插入项目的操作O(logn) ?
答案 0 :(得分:3)
是。您所描述的内容可以通过扩充树来实现。每个节点都有一个计数器,指示其子树中的节点数(包括其自身)。对于叶节点,计数器为1.对于根节点,计数器是节点的总数。这样,您可以从根目录开始找到带有二进制搜索的第k个项目。无论何时插入/删除元素,都必须更新从该位置到根位置的路径中的计数器。
这种树被称为order statistic trees,排名树木,反树木......
参见第14章,"扩充数据结构"在Cormen,Leiserson,Rivest和Stein的伟大着作" Intorduction to Algorithms"中。
答案 1 :(得分:0)