【发布时间】:2008-12-22 16:04:07
【问题描述】:
我有一个程序可以生成大约 80 到 150 位左右的比特流,我想对其进行压缩,因为我要将它们转换为某种 ASCII 字符串,以便人们可以传输它们。
有谁知道可以在这样的流上工作的免费的位感知压缩器吗?我对“标准选项”的主要问题是这个流真的应该被视为位,而不是字节,否则结构会丢失,并且它们的开销会淹没任何收益。
加法:
我想压缩这些流的原因是因为用户将剪切+粘贴它们,可能使用 base64 编码之类的东西,所以保存一些数据很有帮助。
这里有一个例子,给那些想看的人。我将添加格式以使其更易于阅读:
110 110 - This is a 6x6 grid (the maximum is 7x7, so we only need 3 bits!)
000000
011110
010010
010010
011110
000000 - This is one layout grid
000000
000000
001000
000100
000000
000000 - This is the second layout grid
现在我们列出一些片段
010 11111111 - A piece is a 3-bit colour code, then an 8-bit list of 'on / off' bits.
001 10101010 - Another bit!
001 10101010 - Another, identical bit!
我说这应该被视为“位”的原因是,当您将其视为位流(特别是,通常在“网格”中的许多 0)时,存在明显的压缩选项,当您将其视为字节时,这些选项会消失 -流。
【问题讨论】:
-
只是好奇,但是“必须被视为位”是什么意思。一个 80 位的字符串是一个 10 字节的字符串,在你的程序需要使用它之前可以这样处理。
-
当您说“这样人们可以传输它们”时,您是指人们通过电话发送字符串,在某处手动输入,等等。所以您想要该比特流的人类可读版本?
-
这些位块可以聚合然后发送,还是必须在它们可用时立即转发/发送。如果可以将它们聚合起来,我认为您会看到更好的压缩效果,但不确定您要达到的目标。
-
布局网格和一块是什么关系?你展示了一堆位和一些模式,但它们是如何联系在一起的?你能告诉我们更多关于它们的用法、它们的意义、用户粘贴和复制的东西会是什么样子等吗?
标签: compression