如何找到可以使用霍夫曼编码最有效压缩的二进制符号集?

问题描述 投票:0回答:1

在我当前使用霍夫曼编码实现文件压缩时,我获取每个字节的频率并从那里构建树。

我认为,如果我不将程序限制为仅计算字节的频率,而是计算任意长度的二进制符号的频率,则有可能进一步压缩。

例如,在文本文件中,如果有“q”,则下一个字节始终是“u”。与其使用“q”和“u”,不如使用“qu”和“u”。

但不仅仅是连接字节,而是任何长度的任何类型的二进制符号。

我曾想过生成所有可能的消息,然后以某种方式选择使用某种 Mealy 机器实现不重叠的符号子集并生成频率,但我不知所措。

algorithm compression complexity-theory huffman-code
1个回答
0
投票

这是 Kolmogorov、Solomonoff、Chaitin 等人在 1960 - 1970 年研究的问题。 Wikipedia 给出了 很好的概述,你可以从那里找到原始论文。柯尔莫哥洛夫复杂性涉及找到可以重现给定任意输入字符串的最短程序长度的想法。术语“任意”是指任何输入,包括无限多个和随机输入。

柯尔莫哥洛夫复杂性研究的一个关键点是,根本不可能编写一个单一的通用程序来将任意输入字符串压缩到小于输入字符串本身加上一些字节的大小。这种限制来自于任意的随机噪声数据的本质。随机数据无法被压缩。但是,如果您对数据的内部结构或模式有特定的了解,您也许能够设计出比通用无损压缩更有效的算法,或者为现有算法提供更好的参数

作为一种实用方法,您可以尝试不同的通用无损压缩算法并检查它们在数据上的性能。尝试改变压缩级别和字典大小。更好的压缩通常会影响压缩数据所需的时间。

在某些情况下,如果您有许多带有重复数据的短字符串,您可以尝试训练压缩器并使用已经预先计算的字典来使压缩运行得更快,输出更小。

从评论中我注意到这可能与 DNA 序列压缩有关 - 这是一个独立的活跃研究领域,并且有许多论文可用于该主题。我会从那里开始。

© www.soinside.com 2019 - 2024. All rights reserved.