algorithm - 集合操作的数据结构

标签 algorithm data-structures language-agnostic

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

  1. 工会
  2. 区别
  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 速度慢但占用内存少。

请注意:集合中可能包含整数以外的其他类型,如 float 或字符串

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

最佳答案

一种选择是使用布隆过滤器来扩充您的有序树,以加速 ismemberof 类型测试。

认为整体行为应该是这样的:

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

然而,具体细节将取决于过滤器的大小、集合的大小和域的大小。

另一个选项可能是 Judy Arrays .对于这种用途,我听说过关于它们的好消息,但没有个人经验。

还有一个选项是 forrest approach (而不是纯二叉树)。

关于algorithm - 集合操作的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753492/

相关文章:

java - 限制用户在发生冲突时创建组

algorithm - 广度优先迭代?

c - 如何将一个结构复制到作为另一结构元素的数组?

c++ - 直线下的二维点

c# - 对于以下情况,最好的 C# 数据结构是什么

math - 计算平均置信区间而不存储所有数据点

math - float 学坏了吗?

memory - 字节序取决于处理器还是内存?

c# - 获取一组矩形的轮廓

algorithm - 大哦 - 为什么这种不平等是真的?