【发布时间】:2017-06-03 02:39:16
【问题描述】:
我有一个实现霍夫曼编码来编码文本的代码。
鉴于以下文字
abbccc
我的程序生成下表
a -> 00
b -> 01
c -> 1
所以编码后的文本(位数组)是
000101111
问题是:我需要将表格与文本一起编码,但我不知道推荐的方法是什么。
到目前为止我的想法:
- 第一个字节是表中键值对的数量N
- 接下来的 N*2 字节是键值对本身(一个字节为键,一个字节为值)
- 剩余位是编码文本本身
您能否为此建议我一些更灵活但更便宜(低内存使用)的方法?
【问题讨论】:
-
我很确定 DEFLATE 算法使用 Huffman 编码。你可以看看他们是如何做到的。警告文档有点密集且难以理解。我还没有弄明白。几年前我记得,如果你按照一定的程序来构建霍夫曼树,然后以某种排序顺序存储 KVP,就会有一个唯一的表示,这使得存储表非常紧凑。 ietf.org/rfc/rfc1951.txt
-
如果您想以尽可能小的尺寸存储表格(您并没有真正说出“便宜”的含义),然后查找规范的霍夫曼代码。对于初学者,en.wikipedia.org/wiki/Canonical_Huffman_code。我认为这就是@ithenoob 正在讨论的内容?
-
@Gene:我特别指的是 DEFLATE 管理其字典的方式,我相信它也以某种神秘的方式被压缩。但是,您链接到的维基百科页面似乎更有希望,因为它更具可读性并且明确指出将讨论紧凑的霍夫曼表示。
-
@Gene,“便宜”是指内存。我编辑了我的问题以使其清楚。感谢您指出这一点。
-
@ithenoob,我会尽快阅读此规范,谢谢。
标签: data-structures language-agnostic huffman-code