Algorithm 对于只包含间隙搜索和附加的有序序列,最有效的数据结构是什么?

Algorithm 对于只包含间隙搜索和附加的有序序列,最有效的数据结构是什么?,algorithm,data-structures,Algorithm,Data Structures,我需要存储一组有序整数,它们可以形成如下序列 1,2,3,15,16,20,21,25,26,27,28 它也可以表示为 1-3,15-16,20-21,25-28 我不需要对序列进行排序,我只需要能够添加整数,并知道集合中是否有整数 我正在寻找一种数据结构,它在插入和搜索方面是快速的O(lg(n))或O(n*lg(n)),即整数集合中的X,它可以处理并发读写,如果可能的话,可以在没有锁和持久性的情况下进行写操作 对于相同的插入和搜索时间,将选择更节省空间的解决方案 一个二进制搜索树,但它不

我需要存储一组有序整数,它们可以形成如下序列

1,2,3,15,16,20,21,25,26,27,28
它也可以表示为

1-3,15-16,20-21,25-28
我不需要对序列进行排序,我只需要能够添加整数,并知道集合中是否有整数

我正在寻找一种数据结构,它在插入和搜索方面是快速的
O(lg(n))
O(n*lg(n))
,即整数集合中的X,它可以处理并发读写,如果可能的话,可以在没有锁和持久性的情况下进行写操作

对于相同的插入和搜索时间,将选择更节省空间的解决方案

一个二进制搜索树,但它不够好,因为整数是以不断增长的升序插入的,生成的树看起来不好,所以我想我需要一个多版本的自平衡树

没有重复的

不需要代码,只需要一个带有引用的解释就可以了

背景:这是针对mvcc数据库的,每个事务都有一个事务id,在订购时应该是唯一的,即对于两个T1(T1),T2(T2),id(T1)
类似的问题可能有点误导:

我建议一个——这是一个经过修正的二进制搜索树,它压缩区间。有序插入的问题可以通过使用自平衡变量来处理。并发支持可以通过锁定或实现版本来实现。

什么编程语言?1)听起来像是标准的平衡BST(例如红黑树/AVL树)。稍微增加一点复杂性,您甚至可以让一个节点表示一个间隔(不完全是一个间隔树)(尽管这可能会稍微影响平衡)。这些问题的并发性并不难处理。2) “整数按顺序插入”是什么意思?如果你的意思是在构建过程中,那么我相信有一些方法可以在给定一组排序的数字的情况下在O(n)时间内构建一个完全平衡的BST。最节省空间的数据结构可能是Judy树,但是更新可能会非常昂贵。就像间隔/范围树一样,并发可能需要范围锁(甚至可能是其中的一个树…),它如何处理重复项?@Dukeling 1)我将研究thx。2) 这是一个不断增长的整数列表,没有重复的,但可能会有gapsI。我在考虑你的答案,我只是需要时间来正确理解区间树,它接近我的算法,我仍然需要使它工作。我还更新了这个问题,指定持久性不是实现并发的可能解决方案,锁是最后的解决方案。@amirouche:为什么持久性不是一个选项?还有:我们谈论的是同样的坚持吗?请阅读我提到的维基百科文章;这种类型的持久性在并行和并发编程中非常理想。