问:压缩算法 是如何 确定 编码表的?
大部分 压缩算法原理:
通过符号的出现频率,按照 哈夫曼算法 得到一个 编码表,
再通过编码表 重新编码 得到 压缩后的 字节。
问题来了:
计算 “编码表”,取决于 “出现频率”
“出现频率” 是如何产生的???
比如:
我有一本 《三国演义》 需要压缩到 字节流。
哈夫曼算法 如果遍历了 整本《三国演义》 计算除了 “编码表”。
然后按照 “编码表” 压缩了 《三国演义》
然后:
我再继续往这个 压缩字节流 中,写入了一本 英文《圣经》
完蛋:
之前通过 整本 中文《三国演义》确定的 编码表,在压缩 英文《圣经》 时,命中率锐减,压缩质量瞬间变差。
——————————————————————
问:
压缩算法的 “编码表” 是如何 产生 的?
> 是通过 全部待压缩字节 计算?(把《三国演义》《圣经》 都遍历一遍) —— 很明显,这种做法太占用 算法空间(内存)。
> 还是通过 最前面的 一部分字节 计算?(把 《三国演义》第一章 遍历一遍) —— 很明显,这种做法得到的编码表质量不高。
> 压缩算法 是如何 折中 处理的????
通过符号的出现频率,按照 哈夫曼算法 得到一个 编码表,
再通过编码表 重新编码 得到 压缩后的 字节。
问题来了:
计算 “编码表”,取决于 “出现频率”
“出现频率” 是如何产生的???
比如:
我有一本 《三国演义》 需要压缩到 字节流。
哈夫曼算法 如果遍历了 整本《三国演义》 计算除了 “编码表”。
然后按照 “编码表” 压缩了 《三国演义》
然后:
我再继续往这个 压缩字节流 中,写入了一本 英文《圣经》
完蛋:
之前通过 整本 中文《三国演义》确定的 编码表,在压缩 英文《圣经》 时,命中率锐减,压缩质量瞬间变差。
——————————————————————
问:
压缩算法的 “编码表” 是如何 产生 的?
> 是通过 全部待压缩字节 计算?(把《三国演义》《圣经》 都遍历一遍) —— 很明显,这种做法太占用 算法空间(内存)。
> 还是通过 最前面的 一部分字节 计算?(把 《三国演义》第一章 遍历一遍) —— 很明显,这种做法得到的编码表质量不高。
> 压缩算法 是如何 折中 处理的????
...全文
相关推荐
zlib压缩算法详解
zlib 源码分析 对Huffman tree, lz77基础进行了深入讲解 对zlib的实现思路有深度的分析
C++实现LZW压缩算法源代码详解
除了使用标准库提供的异常类型之外,开发者还可以定义自己的异常类型,以提供更丰富的错误信息和处理逻辑。异常安全保证是指代码在遇到异常时能够保证资源的正确释放,以及不留下无效的状态。异常安全可以分为三个等级:基本保证、强保证和不抛出异常保证。
动态Huffman压缩算法
动态Huffman压缩算法,delphi语言描述
哈夫曼树压缩算法实现
这是我做的一个基于哈夫曼树思想的压缩算法程序源码,希望大家指正
LZW压缩算法 C#
本文分享了一个LZW压缩算法的C#源码,有需要的朋友可以参考一下。


