3个版本 (破坏性更新)
0.3.0 | 2024年6月9日 |
---|---|
0.2.0 | 2024年4月28日 |
0.1.0 | 2022年6月23日 |
在算法中排名第329
每月下载量187次
19KB
375 行
bs
此crate提供了一个bitset抽象,对于只包含0..=63范围内位的bitset,它以单个u64存储,具有非分配的快速和小集合优化。对于许多程序,bitset几乎都是空的或主要包含低编号位,但偶尔包含高位的比特,因此需要透明地溢出。这是为这样的程序设计的。
我为创建了另一个bitset crate而道歉。令人惊讶的是,尽管有数十个bitset crate,但我找不到一个能够以简单/快速/明显的方式(使用单字操作)执行此操作,并在必要时溢出到大型bitset。有许多只提供固定大小的crate,也有许多只提供可变大小的crate,还有两个crate(smallbitvec和id-set)几乎符合我的要求,但在快速和小集合情况下做出了不可解释的糟糕大小或表示选择,使它既不快速也不小。此crate做了你期望的简单/小/快/明显的事情:一个枚举,包含小u64情况和大型向量支持情况。
它将其向量支持情况委托给bit_set
,这完全没问题。像bit_set
一样,它不公开(或跟踪)bitset中的“总比特数”,只跟踪设置(1值)比特数。这通常是您想要的 - 透明地扩展存储以适应设置比特,并隐式地将bitset视为包含无限个零,超出最后一个设置比特 -- 但如果您想跟踪零的最大限制,您可以通过将其嵌入到包含额外字节的元组中来自己添加它。
请注意,这也意味着没有“反转”或“非”操作,因为这会产生无限个设置比特集合。但您通常只想执行反转操作以执行“差集”操作,这已提供。如果您真的想执行给定一些范围的逆操作,如果您跟踪零的最大限制,您可以初始化一个在该限制处设置所有比特的bitset,然后从其中获取差集。
许可证:MIT OR Apache-2.0
依赖项
~140–320KB