快速、小巧、简单的位图上的排名/选择
1 位图上的 Rank和 Select查询的重要性
位图(bitmap)上的 Rank和 Select查询对于构建各种紧凑型数据结构至关重要。Rank查询返回在位图的前i个位置中有多少个特定的位(通常是1),而Select查询则返回第j个特定位(通常是1)的位置。这些操作在许多应用中都有重要作用,例如树结构的模拟、字符串索引、文本压缩等。
理论上,Rank和Select查询可以在常数时间内完成,只需额外使用o(n)个比特的空间,或在压缩位图上使用nH0(B)+o(n)个比特的空间。然而,实际应用中,这些理论结果的实现并不总是简单或高效。本文将介绍两种新的结构,旨在弥合理论与实践之间的差距,提供高效且易于实现的解决方案。
2 理论与实践的差距
尽管理论上Rank和Select查询可以在常数时间内完成,但实际应用中,Select查询的实现通常较为复杂,且需要更多的空间开销。例如,原始的常数时间Select解决方案需要超过60%的额外空间,这在实际应用中是不可接受的。此外,Select查询的实现通常比Rank查询复杂,导致性能上的差异。
为了解决这些问题,本文提出两种新的结构:一种用于明文形式的位图,另一种用于压缩形式的位图。这两种结构不仅易于实现&#x