【发布时间】:2013-01-21 01:30:13
【问题描述】:
有谁知道我可以在最坏情况 O(logn) 的情况下访问和删除第 k 个项目的数据结构,并且还支持在最坏情况 O(logn) 的第 k 个项目之后插入项目的操作?
【问题讨论】:
标签: data-structures indexing insertion random-access
有谁知道我可以在最坏情况 O(logn) 的情况下访问和删除第 k 个项目的数据结构,并且还支持在最坏情况 O(logn) 的第 k 个项目之后插入项目的操作?
【问题讨论】:
标签: data-structures indexing insertion random-access
【讨论】:
是的。您所描述的可以通过增强树来实现。每个节点都有一个计数器,指示其子树(包括其自身)中的节点数。对于叶节点,计数器为 1。对于根节点,计数器为节点总数。这样,您可以通过从根开始的二进制搜索找到第 k 个项目。每当您插入/删除一个元素时,您都必须更新从该位置到根的路径中的计数器。
这种树被称为order statistic trees、等级树、计数器树……
请参阅 Cormen、Leiserson、Rivest 和 Stein 所著的伟大著作“算法导论”中的第 14 章“增强数据结构”。
【讨论】: