【问题标题】:Efficient data structure for a set of integers一组整数的高效数据结构
【发布时间】: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


【解决方案1】:

不,没有这样的已知数据结构。请参阅 Mikkel Thorup 的“Mihai Pǎtraşcu: obituary and open questions”,第 1 节,问题 1。“如果我们想要查找和更新的联合边界,最知名的边界是 O(sqrt(log n / log log n)) "

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2012-04-20
    相关资源
    最近更新 更多