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