使用格雷码(或其他?)存储任何可变位宽值,而不存储其宽度

时间:2011-08-25 14:58:48

标签: algorithm

也许我的google-fu只是蹩脚,但我记得15年前读过一篇文章,描述了某个压缩算法如何将较少位的字典键分配给它正在压缩的大多数重复或常见的较长冗余项目。由于它在较窄位值中占据了一席之地,因此它为较少使用的字典项添加了位。

然后用这些字典键替换了源中的项目,但是,作为格雷码(如果内存正确地为我服务),因为据推测,当你逐位转换格雷码编码的数字时,你应该知道当你拥有整数时,你不必在某处存储你需要读多少位。

问题是,我看不出这是如何工作的,此外,我看到的所有文档格雷码(例如,维基百科)都强调了它在解码数字位置传感器时的优势。对于我的申请,我显然不需要这样做。

这是我想到的不同类型的编码,还是我错过了一些非常明显的东西?

我的应用程序是一个基于trie的索引,其中命中被序列化为文件表的3字节键。一片叶子可能有成千上万的点击,但通常,因为空格有10K到100K的文件,这会导致大量浪费的空间。

我已经想过其他的黑客,但我的记忆不断回到这一点,这将是理想的。有人可以发布一个示例的链接,或为我删除一些关键字?或.net / java / c *中的示例?谢谢!

1 个答案:

答案 0 :(得分:1)

可能是Arithmetic / Range编码(大多数人在学术上都是一样的。)

7zip在LZ *通过后使用范围编码;所以你可以使用SDK,它是公共领域(包括整个压缩程序的C#代码,而不仅仅是一个包装器)。