设置操作的数据结构

时间:2012-08-01 06:12:22

标签: algorithm data-structures language-agnostic

什么数据结构在时间和空间上都能有效地支持以下设置操作?

  1. union
  2. ismemberof
  3. 添加
  4. 删除
  5. 我可以想到3种不同的方法来做这些操作,假设我们有两组,它们的大小都是N:

    位数组:

    1. O(N)  2.O(N)  3.O(1)  4.O(1)  5.O(1)
    

    哈希表

    1. O(N)  2.O(N)  3.O(1)  4.O(1)  5.O(1)
    

    有序树

    1. O(NlogN)  2.O(NlogN)  3.O(logN)  4.O(logN)  5.O(logN)
    

    Bit Array和HashTable速度很快,但它们使用的内存太多,Ordered Tree速度慢但占用的内存较少。

    请注意:该集合可能包含除整数之外的其他类型,例如浮点数或字符串

    其他哪些数据结构既快速又通用,节省空间?

3 个答案:

答案 0 :(得分:2)

一个选项是使用bloom过滤器扩充有序树,以加快ismemberof类型测试。

认为整体行为类似于:

1. O(N log(N) )  2. O( ? )  3.O(1)  4.O(log(N))  5.O( log(N) )

但具体细节取决于过滤器的尺寸,套装的大小以及域名的大小。

另一个选项可能是Judy Arrays。我听说过这种用途的好东西,但没有个人经验。

另一种选择是forrest approach(而不是纯二叉树)。

答案 1 :(得分:1)

我建议Binary Heap(最简单的一个),Binomial Heap(加速联盟)和Fibonacci Heap(最难实施,但具有标准操作的最佳已知摊销时间) 。

<强>操作 二进制堆 二项式堆 斐波纳契堆(摊销)
工会 O(n)O(logn)O(1)
2.差O(nlogn)O(nlogn)O(nlogn)
3.找到(ismemberof)O(n)O(n)O(n)
4.添加O(lgn)O(lgn)O(1)
5.删除O(lgn)O(lgn)O(lgn)

但是,当需要 insert,find / extract min(max),union delete 操作时,主要使用这些结构。 查找差异操作的运行时间仍然很短。

答案 2 :(得分:0)

您还可以查看Union-Find Data Structure