github.com/weedge/lib@v0.0.0-20230424045628-a36dcc1d90e4/container/set/readme.md (about)

     1  #### 介绍
     2  
     3  set 集合, 包括mapset ,  bitset(或者bitmap) ,  这里的hashset是以mapset来实现; 
     4  
     5  #### 使用场景
     6  
     7  其实主要都是在 **存在性** 问题 场景下的解决方案,尽量以低的空间利用率来解决问题,比如:
     8  
     9  1. mapset 使用在某个元素是否已经在集合中了,map key是否存在;
    10  2. bitset 使用在多个集合的diff, 并,与,异或等运算,计算汉明重量,以及偏移运算场景, 以及对bitset进行压缩([roaringbitmap](http://roaringbitmap.org/));
    11  2. Bitset 使用在类似0-1背包的问题,用于计算存放服用是否状态,进行状态转移,在高空间复杂度的情况下,优化内存消耗;
    12  3. 由bitset衍生的bloom filter  过滤器,用于不存在的场景;
    13  
    14  Tips: go1.13 以及之后的版本才支持位运算编译
    15  
    16  ```golang
    17  invalid operation: 1 << i (signed shift count type int) requires go1.13 or later (-lang was set to go1.12; check go.mod)
    18  ```
    19  
    20  
    21  
    22  #### references
    23  
    24  1. https://github.com/deckarep/golang-set
    25  2. https://github.com/yourbasic/bit
    26  2. https://github.com/bits-and-blooms/bitset
    27  2. https://github.com/RoaringBitmap/roaring
    28  2. [Consistently faster and smaller compressed bitmaps with Roaring.pdf](https://arxiv.org/pdf/1603.06549.pdf)
    29  2. [An Experimental Study of Bitmap Compression vs. Inverted List Compression.pdf](https://w6113.github.io/files/papers/sidm338-wangA.pdf)
    30  2. https://github.com/bits-and-blooms/bloom
    31  2. [扶苏的bitset浅谈](https://www.cnblogs.com/yifusuyi/p/10072729.html)
    32