无损压缩算法是否在位级别上工作?

Do lossless compression algorithms work on the bit level?

举例来说,我有一个文件,我想在 C 中创建一个压缩算法,如果我的算法获得该文件的位表示,对其进行处理并编写一个只有我的算法可以的新文件知道如何解压缩吗?

简单文件压缩背后的直觉

考虑映射 M: K -> V.

这种映射的要求是任何输入字符串 k 可以专门映射到一些希望更短的字符串 M(k) = v.

示例(带文字)

您的输入文件是

aaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccaaaaaaaaaa

压缩算法应该找到一些映射 M 可以提供很好的压缩,而不会花费太长时间。 在这种情况下,直觉上,您可以使用:

M(aaaaaaaaaa) = a
M(bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) = b
M(ccccc) = c

压缩文件变成

abca

您可以反向执行相同的操作来解压缩文件。

(注意映射需要以某种方式存储alongside/inside压缩文件,方便以后解压)

现在您可能已经猜到最好在字符串是单个位的位级别上完成此操作。

示例(带位)

您的输入文件是

11111111101010101010101010101010101010000000000000

压缩算法应该找到一些映射 M 可以提供很好的压缩,而不会花费太长时间。 在这种情况下,直觉上,您可以使用:

M(111111111) = 11
M(0101010101010101010101010101) = 01
M(0000000000000) = 00

压缩文件变成

110100

在位级别执行此操作的一个强大优势是它可以用于任何文件类型。