高级前缀码的Huffman设计理念

274 阅读4分钟

近期Zipack系列文章:\

本期记录一下Zipack的类型树和前缀表。从类型树上看,Zipack一共有21种数据类型,包括15种已分配类型和6种保留类型,15种已分配类型中又有11种基本类型和4种复合类型,11种基本类型中有5个是实数类型。大家可以按这种分类方法把所有类型一一对应上去,理解一遍。\

基于Huffman编码的类型树

Zipack
├─── 0:小自然数
╰─── 1
     ├─── 10
     │    ├─── 100:小字符串
     │    ╰─── 101:小列表
     ╰─── 11
          ├─── 110:小字典
          ╰─── 111
               ├─── 1110:(小)保留
               ╰─── 1111
                    ├─── 1111,0
                    │    ├─── 1111,00
                    │    │    ├─── 1111,000
                    │    │    │    ├─── 1111,0000:True
                    │    │    │    ╰─── 1111,0001:False
                    │    │    ╰─── 1111,001
                    │    │         ├─── 1111,0010:正小数
                    │    │         ╰─── 1111,0011:负小数
                    │    ╰─── 1111,01
                    │         ├─── 1111,010
                    │         │    ├─── 1111,0100:VLQ字节流
                    │         │    ╰─── 1111,0101:VLQ字符串
                    │         ╰─── 1111,011
                    │              ├─── 1111,0110:VLQ列表
                    │              ╰─── 1111,0111:VLQ字典
                    ╰─── 1111,1
                         ├─── 1111,10
                         │    ├─── 1111,100
                         │    │    ├─── 1111,1000:VLQ正整数
                         │    │    ╰─── 1111,1001:VLQ负整数
                         │    ╰─── 1111,101
                         │         ├─── 1111,1010:Null
                         │         ╰─── 1111,1011:保留
                         ╰─── 1111,11
                              ├─── 1111,110
                              │    ├─── 1111,1100:保留
                              │    ╰─── 1111,1101:保留
                              ╰─── 1111,111
                                   ├─── 1111,1110:保留
                                   ╰─── 1111,1111:保留

图中的树形结构使用了制表符

前缀表明细\

类型前缀长度段长度含义负载
迷你自然数0\7bit
VLQ正整数1111 1000\vlq自然数+128
VLQ负整数1111 1001\-1-vlq自然数
正小数1111 0010\(精度反转算法)
负小数1111 0011\(精度反转算法)
短字符串1005bit字符的数量zipack字符串
VLQ字符串1111 0101vlq自然数+32字符的数量zipack字符串
字典中的“键”vlq自然数字符的数量zipack字符串
纯字节流1111 0100VLQ自然数字节数量字节流
Boolean1111 0000、1111,0001\
null/nil1111 1010\
短列表1015bit列表元素的数量子元素无缝拼接
VLQ列表1111 0110VLQ自然数+32列表元素的数量子元素无缝拼接
迷你字典1105bit键值对的数量键值无缝拼接
字典1111 0111vlq自然数+32键值对的数量键值无缝拼接
保留类型FB、FC、FD、FE、FF\\\
保留类型(带长度)1110 0000 ~ 1110 11114bit某种保留对象的数量\