以下是常见数据类型(即它是否有名称)?
与常规Set
不同,它的独特之处在于它包含了"宇宙"使用O(C)
内存开销进行初始化,以及O(N/2)
的最大内存开销(仅当您删除其他所有元素时才会发生):
> s = new Structure(701)
s = Structure(0-700)
> s.remove(100)
s = Structure(0-99, 101-700)
> s.add(100)
s = Structure(0-700)
> s.remove(200)
s = Structure(0-199, 201-700)
> s.remove(202)
s = Structure(0-199, 201, 203-700)
> s.removeAll()
s = Structure()
这样的东西有标准名称吗?
答案 0 :(得分:0)
我过去曾经多次使用它,并且看到它用于多边形裁剪的平面扫描算法等。
有时它所代表的抽象数据类型只是一个集合,而数据结构是一种优化。我使用它来表示由正则表达式给出的匹配字符集,例如[^ a-zA-z0-9.-],并对这些集合执行交集,并集和其他操作。
这种数据结构是在一些其他有序集或映射结构之上实现的,只需存储集合中成员资格的密钥而不是集合本身中的密钥。在我看过这种事情的所有其他情况中,作者引用了底层结构,而不是给概念本身命名。
我喜欢为它命名的想法,因为正如我所说,我已经多次使用过它。也许我会把它称为“in& out set”,以纪念我吃汉堡包时最喜欢的汉堡包。
答案 1 :(得分:0)
这是Compressed Bit Set
或Compressed Bitmap
。
Bit Set
或Bitmap
是专为存储Integer
而设计的集合。大多数语言都提供这些标准的实现。它们通常通过在1
的内部数组中为N
位分配Integers
来工作,其中N
是您要添加到集合中的数字。 0
表示该值不存在。这些类型的Bit Sets
的内存使用量由您存储的最大数量决定。
Compressed Bit Set
是压缩0
和1
s范围的工具。
在这种情况下,问题演示了一种称为“run-length-encoding”的压缩(谢谢@Ralf Kleberhoff),因此它特别是Run-length Encoded Bitmap
。
Compressed Bitmaps
的常见实现(从最新到最旧)是: