什么数据结构在时间和空间上都能有效地支持以下设置操作?
我可以想到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速度慢但占用的内存较少。
请注意:该集合可能包含除整数之外的其他类型,例如浮点数或字符串
其他哪些数据结构既快速又通用,节省空间?
答案 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)