结合无损数据压缩算法

凯洛

我想知道我们可以进行无损数据压缩到什么程度?我无法找到无损算法的在线模拟器来执行一些经验测试。我可以自己做一个,但是不幸的是我在这段时间没有足够的时间。我仍然对自己的直觉感到好奇,我将要解释一下。

让我们仅采用两种比较流行的算法:Huffman CodingRun-lenght Enconding

假设我们有一个数字A符号的字母和该字母的任意长符号序列:例如:

Alphabet  = {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, X, W, Y, Z}
Sequence1 =  SFBJNERUSNJGSDKKDEIJGNMSDJDDSUSJNF
Sequence2 =  MNMNMNREGUHSDFJUF
Sequence3 =  MMMMMNNNNNASDUERJGASIUJMMMNNNUNS

现在,如果仅用固定长度的n字对每个符号进行编码,那么我们就拥有未压缩的序列,即长的N位。

如果我们使用霍夫曼编码序列,则将使用H位代替N位,从而节省(1-H/N)*100%空间。

如果我们使用RLE编码相同的序列,则将使用Rbits进行保存(1-R/N)*100%

我想知道,如果我们应用RLE + Huffman或者Huffman + RLE比仅使用其中之一可以节省更多空间,会发生什么

对我来说,这似乎是一个非常基本的想法,但是在谷歌搜索中,我没有发现任何与此主题相关的问题。

编辑:嗯,我可能没有考虑过,如果我先使用RLE,将无法使用霍夫曼,因为与单个符号的固定长度代码的对应关系将会丢失;但是仍然应该可以先使用Huffman,然后再使用RLE。

顺便说一句,我对其中的逻辑很感兴趣,我的意思是串联使用多个以上的无损压缩算法。

编辑2:当我评论马克·阿德勒的答复时,我意识到我可能已经找到了我问题的答案。就是这个:

符号到符号代码的霍夫曼如何影响检测?

假设我们有以下代码:AABCABAAB用纯二进制00 00 01 10 00 01 00 00 01格式,它将被编码为(obv空间仅出于可读性目的)。Huffman会将其编码为0 0 11 10 0 11 0 0 11空格进一步显示了如何不更改字符串,因此假设我们正在此范围(符号方式)接近代码,则有可能检测到完全相同的重复次数。

这就引出了我的另一点(鉴于这已经是很长的评论了,在这里我将不讨论):逐位分析代码。

因此,我实际上认为我得出了一个结论:众所周知,任何字典(或基于替换的)编码器将可变数量的符号分组为固定长度的码字,而Huffman(或任何其他熵编码器)对固定长度的符号进行编码变成可变数量的比特,从而使熵近似为最小值;ERGO,这将是毫无意义的(且仅计算的废物)首先让霍夫曼运行,因为其他的算法将最有可能引入更多的冗余这霍夫曼也能减少。

当然,这只是理论上的论文,因为在实践中我们可以考虑其他因素(例如计算时间)……更不用说要编码的字符串的不同配置可能导致不同结果的事实。但是,对我来说这很有意义。:)

马克·阿德勒

这些组合是常规完成的。您应该阅读一些有关压缩的书。

LZ77是RLE的一种更通用的形式,它复制先前字符串的重复。(距离1和长度n的匹配对最后一个字节n个副本进行编码。)LZ77通常后面跟随霍夫曼,算术或范围编码。

Huffman应该跟随LZ77或RLE,而不是跟随它。霍夫曼编码将使检测重复变得更加困难,而不是更加容易。为了首先使用RLE,您只需将符号集扩展到文字之外。作为一个示例,在zip,gzip,zlib等中使用的Deflate格式具有286个符号集,用于编码256个文字字节,29个长度前缀代码和流码的一端。29个长度前缀代码中的每一个都隐含一个零到五位的后缀,该后缀跟随该代码添加到基本值以获取长度。长度代码及其后缀的存在意味着它后面是另一个霍夫曼代码,它是30个距离代码前缀之一,每个前缀的后缀为0到13位,以指定匹配返回的距离。

还有许多其他转换(可能会或可能不会自行压缩),然后进行熵编码。这些包括Burrows-Wheeler变换(BWT),Move-To-Front变换(MTF)(通常遵循BWT),图像的离散余弦变换(可以无损地进行,但最常用于有损压缩算法中)变换以可逆的方式对数据中的组公共性进行分组,从而为熵编码步骤提供了更大的收益。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据压缩定义

来自分类Dev

Scala中的数据压缩

来自分类Dev

Kafka数据压缩技术

来自分类Dev

数据帧宽到数据压缩

来自分类Dev

Chrome数据压缩代理和DWR

来自分类Dev

JPEG 和 PNG 元数据压缩

来自分类Dev

具有重复字符串的数据的最佳无损压缩算法

来自分类Dev

坐标路径数据的无损压缩

来自分类Dev

随机数据的无损压缩

来自分类Dev

Chrome数据压缩代理错误与jQuery Ajax表单提交

来自分类Dev

iOS和.NET WebAPI之间的数据压缩

来自分类Dev

霍夫曼的数据压缩填充表和代码反转问题

来自分类Dev

优化使用数据压缩的Java服务器

来自分类Dev

如何在Firefox上使用Google数据压缩代理?

来自分类Dev

适用于PC的Chrome数据压缩代理

来自分类Dev

Chrome数据压缩代理错误与jQuery Ajax表单提交

来自分类Dev

数据压缩会产生更少的事务日志吗?

来自分类Dev

在 Angular 7 中实现 Draco 3D 数据压缩以压缩 .STL 文件?

来自分类Dev

Django:数据库级或代码级的TextField(字符串)数据压缩

来自分类Dev

对于任何实际数据集,数据压缩比的最小可能值是多少

来自分类Dev

如何在霍夫曼编码中使用Splay树数据结构进行数据压缩?

来自分类Dev

有数学证据证明霍夫曼编码是最有效的无损压缩算法吗?

来自分类Dev

Sparql多语言数据压缩到一行

来自分类Dev

为什么base64编码的数据压缩如此差?

来自分类Dev

ASP.NET Web Api2:是否应该启用JSON数据压缩?

来自分类Dev

将缓冲区中的数据压缩为每个元素16位到12位

来自分类Dev

iOS7:如何修复“ Chrome数据压缩代理”错误?

来自分类Dev

使用Python将数据压缩成12位块?

来自分类Dev

优化查询以将报价价格数据压缩为OHLC间隔

Related 相关文章

热门标签

归档