【发布时间】:2011-03-08 09:29:46
【问题描述】:
所以,这是我的小问题。
假设我有一个桶列表 a0 ... an 分别包含 L 0 ... cn
桶的顺序很重要。我不能去交换它们。
现在,我想索引这些存储桶,以便:
- 我知道项目的总数
- 我可以查找第 i 个元素
- 我可以在任何存储桶中添加/删除项目并有效地更新索引
看起来很简单吧?看到这些标准,我立即想到了一棵芬威克树。这才是它们真正的意义所在。
但是,当您考虑用例时,会出现一些其他用例:
- 如果桶数下降到 L 以下,桶必须消失(暂时不要担心项目)
- 如果存储桶计数达到 H,则必须创建一个新存储桶,因为该存储桶已满
我还没有弄清楚如何有效地编辑 Fenwick 树:删除/添加一个节点而不重建整个树...
当然我们可以设置 L = 0,这样就不需要移除了,但是添加项目是无法避免的。
那么问题来了:
您是否知道该索引的更好结构或如何更新 Fenwick 树?
主要关注的是效率,因为我确实计划实现它,所以缓存/内存方面的考虑值得担心。
背景:
我正在尝试提出一种类似于 B 树和排名跳过列表但具有本地化索引的结构。这两种结构的问题是索引是沿着数据保存的,这在缓存方面效率低下(即您需要从内存中获取多个页面)。数据库实现表明,保持索引与实际数据隔离对缓存更友好,因此更高效。
【问题讨论】:
标签: algorithm data-structures b-tree