问:压缩算法 是如何 确定 编码表的?
吹风的兔子 2018-05-09 02:52:59 大部分 压缩算法原理:
通过符号的出现频率,按照 哈夫曼算法 得到一个 编码表,
再通过编码表 重新编码 得到 压缩后的 字节。
问题来了:
计算 “编码表”,取决于 “出现频率”
“出现频率” 是如何产生的???
比如:
我有一本 《三国演义》 需要压缩到 字节流。
哈夫曼算法 如果遍历了 整本《三国演义》 计算除了 “编码表”。
然后按照 “编码表” 压缩了 《三国演义》
然后:
我再继续往这个 压缩字节流 中,写入了一本 英文《圣经》
完蛋:
之前通过 整本 中文《三国演义》确定的 编码表,在压缩 英文《圣经》 时,命中率锐减,压缩质量瞬间变差。
——————————————————————
问:
压缩算法的 “编码表” 是如何 产生 的?
> 是通过 全部待压缩字节 计算?(把《三国演义》《圣经》 都遍历一遍) —— 很明显,这种做法太占用 算法空间(内存)。
> 还是通过 最前面的 一部分字节 计算?(把 《三国演义》第一章 遍历一遍) —— 很明显,这种做法得到的编码表质量不高。
> 压缩算法 是如何 折中 处理的????