这是什么抽象数据类型?

What abstract data type is this?

以下是常见的数据类型吗(即它有名称)吗?

它的独特之处在于,与常规 Set 不同,它在初始化时包含 "universe",内存开销为 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()

这样的东西有标准名称吗?

我过去曾多次使用过它,并看到它用于多边形裁剪的平面扫描算法等。

有时候它所代表的抽象数据类型只是一个集合,数据结构是一种优化。我用它来表示正则表达式给出的匹配字符集,例如 [^a-zA-z0-9.-],并对这些集执行交集、并集和其他操作。

这种数据结构是在其他一些有序集合或映射结构之上实现的,通过简单地存储集合中成员资格发生变化的键而不是集合本身中的键。在我见过此类事情发生的所有其他情况下,作者指的是底层结构,而不是为概念本身命名。

不过,我喜欢为它命名的想法,因为正如我所说,我自己已经多次使用它。也许我会称它为 "in & out set" 以纪念我吃汉堡时最喜欢的汉堡连锁店。

这是 Compressed Bit SetCompressed Bitmap

一个Bit SetBitmap是专门用来存放Integer的集合。大多数语言都提供这些的标准实现。它们通常通过将 1 分配给 Integers 内部数组中的第 N 位来工作,其中 N 是您要添加到集合中的数字。 0 表示该值不存在。这些类型 Bit Sets 的内存使用量取决于您存储的最大数量。

A Compressed Bit Set 是压缩 01 范围的一种。

在这种情况下,问题演示了一种称为 "run-length-encoding" 的压缩(谢谢@Ralf Kleberhoff),因此它具体是 Run-length Encoded Bitmap.

Compressed Bitmaps(从最新到最旧)的常见实现是: