需要有关在ASCII文本文件上实现LZW的帮助

时间:2014-04-23 14:41:08

标签: php algorithm lzw

我试图实施LZW来压缩基于ASCII的文本文件,我需要帮助。

我们说我有一个带有" BABAABAAAA"的文本文件。写在上面,我使用我的代码使用LZW算法压缩它。结果的输出将写在文本文件上,结果为

66|65|256|257|65|260|65

现在问题是,压缩文件的大小将比原始文件大,因为它将代码的每个char计为单个char,而不是将每个代码计为单个整数。因此,不是将65读作01000001,而是将65视为2 ascii char,即00110110(6)00110101(5)。而这甚至没有计算标记(' |')。

1 个答案:

答案 0 :(得分:0)

将某些文本转换为一系列整数(如66|65|256)后,不应将其作为一系列9个字符在文本模式下写入文件。您应该以二进制模式打开输出文件并以二进制形式写入数字(而不是像|那样写分隔标记。)

对于LZW,有两种方法:要么使用固定的二进制宽度,要么限制字典的大小,要么实现(稍微有点难)可变宽度版本,其中每个数字使用尽可能多的二进制数字。 NEXT免费字典密钥。

回到您的示例,66|65|256|257|65|260|65的固定宽度为9位,可以得到7 * 9 = 63位,即8个字节。