【发布时间】:2013-03-15 00:10:23
【问题描述】:
我接受了一些课程来实现我选择的压缩算法。它可以是任何语言,但我最了解的语言是 Java,其次是 C。它将基于 -
解压后的输出必须和原始输入匹配,所以只能看lossless的算法。
运行时间必须与消息的长度成正比。
内存要求必须与消息的长度无关。
我们的实现将进行如下测试 -
标准文本文件
字节值在 0-255 之间的二进制文件
大约 10mb 的未指定内容的大文件。
我最初的想法是使用动态算术编码,但我想知道是否有更适合上述约束的算法? 其次,用 C 语言而不是 Java 语言是更好的主意吗?我问这个是因为我认为 C 的内存占用会更小,但我不确定是否真的如此。
我花了一些时间在谷歌上搜索这个问题,一些网站提到了 LZW 编码与动态 Huffman 编码的结合。这会是一个明智的追求途径吗?我们的讲师确实警告我们,多年来尝试动态霍夫曼编码的提交中有 90% 没有正确实施。
也就是说,我不怕尝试一下,但在开始之前我会重视一些意见。
任何反馈将不胜感激。
【问题讨论】:
-
如果之前使用 Huffman 提交的 90% 都是错误的,那么这对您来说可能是一个更好的挑战。
-
Shannon-Fano 不满足您的 (3) 要求吗?做对很简单。如果您以前从未实现过压缩算法,我建议您使用 S-F。
-
如果您确实走 LZW-Dynamic-Huffman 路线,我唯一的意见是使用接近-任何人的 LZW 技术除了提出的建议在Dr.Dobbs 1989 article。我发现对 Terry Welch 在算法中的“错误”的“分析”和作者对该问题的“解决方案”既侮辱了读者,也侮辱了 Welch 先生,坦率地说,他比那篇文章的作者忘记了更多关于数据压缩算法的事情永远都知道。
-
不压缩,多买点磁盘空间。
标签: c encoding compression information-theory