Compression 压缩少量数据

Compression 压缩少量数据,compression,Compression,我有一个程序,我在其中生成大约80到150位的比特流,我想对其进行压缩,因为我将把它们转换成某种ASCII字符串,这样人们就可以传输它们 有谁知道一个好的,免费位意识压缩机,可能会在这样一个流工作?我对“标准选项”的主要问题是,这个流实际上应该被视为位,而不是字节,否则结构就会丢失,它们的开销会淹没任何增益 补充: 我之所以要压缩这些流,是因为用户将剪切并粘贴它们,可能会使用base64编码之类的方法,所以保存一些数据很有帮助 下面是一个例子,供那些想看的人参考。我将添加格式以使其更易于阅读:

我有一个程序,我在其中生成大约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!

我之所以认为这是“比特”的原因是,当被视为比特流时,存在明显的压缩选项(特别是,通常是网格中的很多个),当你把它看作字节流时,它消失了。

< P>我猜没有通用算法会给你这种数据带来很大的压缩。 您最好的选择是分析数据的结构,并尝试找到一个自定义压缩算法,或者定制一个现有的算法(可能使用预填充的字典或类似的东西)。

zlib压缩(可能与gzip相同的算法)是免费的。它有一些设置,但我不确定你能节省多少,除非你的比特有一些周期性的模式


由于png和gif图形文件本质上是位模式的表示,也许您可以找到它们使用的压缩算法。

由于流非常小,您能在这里发布一些吗

此外,您是否确定这些流中有足够的冗余,甚至允许压缩?是否存在重复的数据块

这有点长,但在没有任何具体答案的情况下,你可能想看看ROM场景,看看文本字符串是如何在基于盒带的RPG游戏(如“Chrono Trigger”或“Final Fantasy III”)中被压缩的。我知道文本字符串在那些游戏中被压缩的(在那些日子里字节是如此珍贵)破解这个阴谋对黑客来说是一个有趣的挑战。当你提到许多短字符串被压缩时,我唯一想到的就是这个


不过,您的根本问题可能仍然存在。我可以想象,这些ROM中的压缩方案利用了许多字符串之间的冗余(即,如果“Timbuktu”出现在58个不同的字符串中),而不是单个流中的冗余。

您想要的是无损二进制压缩。我敢肯定,如果没有大量的其他资源,也会有论文或网络文章。谷歌这些条款,我怀疑你会得到你需要的

你在谈论多少数据?您的管道是否太小或吞吐量太高,以至于您必须进行压缩

回想起来,您的数据非常小,除非您分析流量并进行自己的“压缩”(基本上只是已知位模式的映射/散列),否则您可能无法获得有价值的收益


正如其他人所说,发布一些示例数据,之后可能会有更好的建议。

压缩150位,您希望实现什么?除非你把这19亿条信息中的几条加起来,否则我不确定你希望得到什么。这是一个UI问题——您希望用户发送/接收“代码”吗


怎么样?这将获取二进制数据,并将其转换为编码字符,以便于传输或输入。

我的想法与Tim相同——如此少量的数据似乎不值得压缩。事实上,我建议您真正想研究的是某种ascii编码方法,如uuencode或mime encode(又名“”)。

CCITT的无损编码方案,用于压缩G3和G4 TIFF,设计时考虑了二进制数据。G4 TIFF是通常用于OCR和传真的黑白图像。我想到的另一个简单方案是。

我建议您考虑使用。它是可下载的,许可证允许你在几乎任何项目中使用它。重要的一点是,它被广泛使用,因此调试良好。如果您的数据很重要,您不希望将来在随机日期调试hombrew算法中的奇数边缘情况

我把它弄得有点乱,它确实允许面向流的压缩。不过,我不确定一次只向它提供少量数据时,它有多好。无损耗压缩通常通过查找和消除模式来工作,如果一次输入12字节这样的小数据,那么就不会有很多模式可供查找


我不是在支持胡安的答案,因为他还建议使用GIF,这是一种有损压缩。你没有提供太多的信息,但我猜你不希望任何压缩格式实际上会丢失数据。大多数流行的图形、音频和视频压缩算法都是有损的;他们依靠人类感官的能力来正确地接收图像或声音,并稍微删除或修改一些原始信息。

克里斯,感谢您发布这些样本。我认为运行长度编码是你想要的方式。这应该很容易实现

将与所有连续的0很好地配合

所以压缩这些字符串的主要原因是为了使它们更容易剪切和粘贴?有道理;这听起来是个有趣的项目

如果你只是想让字符串更人性化,听起来你已经准备好了。如果您试图压缩它们,以便它们通过有线传输更快,我认为压缩小字符串的好处可能会被其他TCP问题(如MTU大小等)所击败。(我在那里没有经验,所以