【发布时间】:2017-05-24 22:51:21
【问题描述】:
我正在处理区间为 [0, m] 的一组 n 个整数,我需要以下操作:
- 找到
- 移除
- 插入
- 枚举(获取所有条目)
- 清除(删除所有条目)
目前我正在为此使用二叉树/堆,但想知道是否有更有效的数据结构。 我可以使用未初始化的 RAM,据我所见,查找/删除/插入需要 O(1),枚举/清除需要 O(n),同时需要 O(m) 空间。 (例如见https://research.swtch.com/sparse)
是否有任何数据结构需要小于 O(m) 的空间,同时仍然保持(摊销)最坏情况复杂性 O(1) 用于查找/删除/插入和 O(n) 用于枚举/清除?
请注意:摊销如下:“给定 n 个操作,我们总共有恒定 * n 个操作,因此摊销的最坏情况是 O(1)”。不像:“给定这个概率分布和假设 X、Y、Z,平均最坏情况很可能在 O(1) 中。” 所以我不是在寻找“可能大部分时间”在 O(1) 中工作的基于哈希表的解决方案。
【问题讨论】:
-
看en.wikipedia.org/wiki/Y-fast_trie(虽然它可能使用哈希表)
-
Y-fast 尝试不需要哈希表,但是 find/remove/insert 的成本是 Θ(sqrt(log m)),它是超常数。
标签: search data-structures collections set