【C++】自适应哈夫曼编码
TODO:
- 文档编写ing
==========编码器载入码表:* A B C D
==========开始编码:AADCCDD
长度:7
输入 第1个字符:A
首次编码
到达叶子:* 更新值:0->0
到达叶子:A 更新值:00001->1
输出序列:0 00001
输入 第2个字符:A
获得指针:A
到达叶子:* 更新值:0->0
到达叶子:A 更新值:1->1
输出序列:0 00001 1
输入 第3个字符:D
首次编码
到达叶子:* 更新值:0->00
到达叶子:D 更新值:00100->01
到达叶子:A 更新值:1->1
输出序列:0 00001 1 0 00100
输入 第4个字符:C
首次编码
到达叶子:* 更新值:00->000
到达叶子:C 更新值:00011->001
到达叶子:D 更新值:01->01
到达叶子:A 更新值:1->1
输出序列:0 00001 1 0 00100 00 00011
输入 第5个字符:C
获得指针:C
到达叶子:A 更新值:1->0
到达叶子:* 更新值:000->100
到达叶子:D 更新值:01->101
到达叶子:C 更新值:001->11
输出序列:0 00001 1 0 00100 00 00011 001
输入 第6个字符:D
获得指针:D
到达叶子:A 更新值:0->0
到达叶子:* 更新值:100->100
到达叶子:D 更新值:101->101
到达叶子:C 更新值:11->11
输出序列:0 00001 1 0 00100 00 00011 001 101
输入 第7个字符:D
获得指针:D
到达叶子:A 更新值:0->0
到达叶子:* 更新值:100->100
到达叶子:C 更新值:11->101
到达叶子:D 更新值:101->11
输出序列:0 00001 1 0 00100 00 00011 001 101 101
==========解码器载入码表:* A B C D
==========开始解码:0 00001 1 0 00100 00 00011 001 101 101
长度:10
输入 第1个字符:0
为NEW位
输入 第2个字符:00001
对应字符为:A
到达叶子:* 更新值:0->0
到达叶子:A 更新值:00001->1
解码字符串:A
输入 第3个字符:1
获得指针:A
到达叶子:* 更新值:0->0
到达叶子:A 更新值:1->1
解码字符串:AA
输入 第4个字符:0
为NEW位
输入 第5个字符:00100
对应字符为:D
到达叶子:* 更新值:0->00
到达叶子:D 更新值:00100->01
到达叶子:A 更新值:1->1
解码字符串:AAD
输入 第6个字符:00
为NEW位
输入 第7个字符:00011
对应字符为:C
到达叶子:* 更新值:00->000
到达叶子:C 更新值:00011->001
到达叶子:D 更新值:01->01
到达叶子:A 更新值:1->1
解码字符串:AADC
输入 第8个字符:001
获得指针:C
到达叶子:A 更新值:1->0
到达叶子:* 更新值:000->100
到达叶子:D 更新值:01->101
到达叶子:C 更新值:001->11
解码字符串:AADCC
输入 第9个字符:101
获得指针:D
到达叶子:A 更新值:0->0
到达叶子:* 更新值:100->100
到达叶子:D 更新值:101->101
到达叶子:C 更新值:11->11
解码字符串:AADCCD
输入 第10个字符:101
获得指针:D
到达叶子:A 更新值:0->0
到达叶子:* 更新值:100->100
到达叶子:C 更新值:11->101
到达叶子:D 更新值:101->11
解码字符串:AADCCDD