我需要存储一组有序整数,这些整数可以形成如下所示的序列
1,2,3,15,16,20,21,25,26,27,28
它也可以表示为
1-3,15-16,20-21,25-28
我不需要排序序列我只需要能够添加整数并知道 set 中是否有某个整数。
我正在寻找在插入和搜索方面快速O(lg(n))
或O(n*lg(n))
的数据结构。是整数集合中的X,它可以处理并发读写,如果可能的话,可以写入没有锁定和没有持久性的写入。
对于相同的插入和搜索时间,将选择更节省空间的解决方案。
二进制搜索树,但它不够好,因为由于整数以不断增长的升序顺序插入,生成的树看起来不太好,所以我想我需要一个多元自平衡树。
没有重复。
只需要参考说明就可以完成这项工作。
背景:这是针对mvcc数据库,每个事务都有一个事务ID,在订购时应该是唯一的,即。对于两个T1(t1),T2(t2),id(T1)< ID(T2)。差距来自于事务未提交其事务ID丢失的事实。事务ID用于注释数据版本,知道是否应该考虑数据的版本以及如何,至少必须知道它是否已经提交,我必须维护一个提交事务的列表,一个汉堡的哈希映射可以做完美的POC工作,但从长远来看。我不知道专业人士如何做到这一点......
类似的问题可能有点误导:Finding a gap in an ordered range of adjacent numbers
答案 0 :(得分:2)
我建议使用interval tree - 这是一个修改后的二进制搜索树,用于压缩间隔。可以通过使用自平衡变体来处理有序插入的问题。可以通过锁定或实现persistent版本来实现并发支持。