Skip to content

Commit 258fcfc

Browse files
committed
refactor
1 parent 12cd26d commit 258fcfc

17 files changed

+4803
-18
lines changed

.README_images/03e5b34a.png

68.1 KB
Loading

.README_images/21beabb6.png

61.8 KB
Loading

.README_images/25ad07ef.png

73.1 KB
Loading

.README_images/55a2e7d1.png

66.8 KB
Loading

.README_images/64320512.png

66.7 KB
Loading

.README_images/e598a60d.png

62.6 KB
Loading

README.assets/55a2e7d1.png

66.8 KB
Loading
103 KB
Loading

README.assets/e598a60d.png

62.6 KB
Loading

README.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
# simple8b的Go实现
22

3-
TODO 2022-11-28 02:52:45 测试
3+
4+
5+
Simple8b 是 64 位算法,维护了一个查找表,实现将多个整形数据压缩到一个 64bit 长整型中。其中前 4 位表示选择器,用来标记每个值使用多少bit,后面 60 位用于存储数据。 ![simple8b算法查找表](./README.assets/data_compress_4-8b1ba456.png) 如上图所示,Integers Coded表示可压缩的数据集大小,Bits Per Integer表示每个整数分配多少 Bits 来表示,比如要压缩8个数据,选择器选择8,每个数据用7个 bits 表示,但是如果某个数据的值超过了7个 bits 的表示范围,那么就需要尝试用选择器9,只能压缩前7个数据,每个数据用8个bits来表示,以此类推。第一次未压缩的数据将压缩到一个新的64bit的长整型中,由此可见simple8b算法对小整数的压缩效果比较好,对大整数的压缩效果不佳。
6+
7+
8+
9+
一个int64类型有64位:
10+
11+
![](.README_images/21beabb6.png)
12+
13+
每8个bit分为一组用同一个颜色标识,这样看得更清楚一些,每个不同的颜色是一个byte,总共是8个byte 64个bit:
14+
15+
![](./README.assets/55a2e7d1.png)
16+
17+
其中前4个bit用来存放数值位数长度:
18+
19+
![](./README.assets/e598a60d.png)
20+
21+
比如每个数值使用4个bit来表示:
22+
23+
![](.README_images/25ad07ef.png)
24+
25+
每个数值使用10个bit来表示:
26+
27+
![](.README_images/03e5b34a.png)
28+
29+
每个数值使用15个bit来表示:
30+
31+
![](.README_images/64320512.png)
432

533

634

0 commit comments

Comments
 (0)