3、实用简洁数据结构设计与应用

实用简洁数据结构设计与应用

1 引言

简洁数据结构(SDS)能够以较小的空间存储数据,并支持高效的数据操作。在信息理论中,编码数据存在一个信息理论下界,即每个数据项至少需要 ⌈log |D|⌉ 位(以 2 为底)来唯一标识,其中 D 是数据的域。SDS 的挑战在于在满足信息理论下界的基础上,利用额外的 r 位冗余信息,快速执行查询操作,最好能达到每个查询的常数时间复杂度。

SDS 最初是在理论环境中提出的,如今已广泛应用于各种数据类型,如整数集、序列、字符串、树、图等。随着软件技术的发展,一些高效的 SDS 库逐渐涌现,如 C++ 库 libcds、rsdic、SDSL 以及 Java/C++ 库 Sux 等。这些库结合了数据压缩和高效数据结构的优势,能够直接对压缩数据进行操作,适用于大规模数据集。

2 基本工具集

2.1 子集和位向量

位向量是 SDS 的基本构建块,它是一个由 0 和 1 组成的有限序列。位向量可以被解释为有序宇宙 U 的子集,其中第 i 位为 1 表示 U 中的第 i 个元素属于该子集,为 0 则表示不属于。信息理论下界为 ⌈log $\binom{|U|}{m}$⌉,其中 m 是 1 的数量。

Rank 和 Select 是位向量的两个重要原语:
- Rank1(i):返回 s[0, i) 中 1 的数量。
- Select1(i):返回第 i 个 1 的位置。

Predecessor1(i) 是与 Rank/Select 紧密相关的操作,它返回小于或等于 i 的最右侧 1 的位置。

利用 Rank1 可以实现稀疏数组的空间优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值