【问题标题】:What type of file should i store huffman results?我应该存储什么类型的文件?
【发布时间】:2013-04-14 18:21:24
【问题描述】:

我有树,每个字节的编码值,编码和解码表,以及编码文件的二进制文件中的编码文件,我有两个问题,我应该存储什么,只有解码表和编码文件应该足够了吗?我应该在什么类型的文件中存储解码表和我的编码文件?我正在使用java。

【问题讨论】:

    标签: java algorithm encoding huffman-code


    【解决方案1】:

    如果生成规范树,则只需按未编码值的顺序存储每个字节的代码长度。由于霍夫曼码的最大长度是不同的未编码值的数量,而最小长度为 1,因此每个长度都适合单个字节。 (gzip 库还对长度进行了编码以进一步减少开销。)

    假设代码是规范的,有一个简单的算法可以从长度列表生成完整的树。

    实际上,至少有两种可能的规范编码样式。在这两种情况下,给定长度的代码与原始未编码字节具有相同的顺序。在Wikipedia 中描述的规范代码中,较短的代码在较长的代码之前(即 shortest 代码全为零。但更常见的规范形式将较长的代码放在开头,因此 最长代码全为零。Wikipedia 文章包括生成其规范编码形式的算法;另一种形式同样简单。

    最长代码优先形式的优点是你可以证明任何代码只有最后一个ceil(log<sub>2</sub>n)位可以是非零的(n是字母大小);换句话说,每个代码由一些零位组成,后跟最多一个混合零和一的“字节”。此属性有助于加快解码速度。

    【讨论】:

    • 但我的问题是,我怎样才能保存我的编码输出文件和我用来解码它的表......在我不使用规范代码的情况下,比如哈夫曼的正常代码算法使
    • 序列化你的解码表,然后输出编码位,我猜。但是规范表会短很多,也不难。
    • 如果字母表中的字母缺失,规范编码将不起作用 ???例如,如果你有'A'、'C'、'D',它就不会像那样工作???
    • @pedro:没错,规范编码假定所有符号都出现。您可以在长度向量中插入 0 以指示缺失的符号,并且如果您希望符号使用形成字节的子范围(例如,0x20 到 0x7E,如果它是 US-ASCII),您还可以输出符号范围 (长度向量之前的两个字符)(必要时仍使用 0)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2021-11-19
    • 2023-03-19
    • 2011-07-24
    相关资源
    最近更新 更多