问:压缩算法 是如何 确定 编码表的?

吹风的兔子 2018-05-09 02:52:59
大部分 压缩算法原理:

通过符号的出现频率,按照 哈夫曼算法 得到一个 编码表,
再通过编码表 重新编码 得到 压缩后的 字节。


问题来了:
计算 “编码表”,取决于 “出现频率”
“出现频率” 是如何产生的???

比如:
我有一本 《三国演义》 需要压缩到 字节流。
哈夫曼算法 如果遍历了 整本《三国演义》 计算除了 “编码表”。
然后按照 “编码表” 压缩了 《三国演义》
然后:
我再继续往这个 压缩字节流 中,写入了一本 英文《圣经》

完蛋:
之前通过 整本 中文《三国演义》确定的 编码表,在压缩 英文《圣经》 时,命中率锐减,压缩质量瞬间变差。

——————————————————————
问:
压缩算法的 “编码表” 是如何 产生 的?
> 是通过 全部待压缩字节 计算?(把《三国演义》《圣经》 都遍历一遍) —— 很明显,这种做法太占用 算法空间(内存)。
> 还是通过 最前面的 一部分字节 计算?(把 《三国演义》第一章 遍历一遍) —— 很明显,这种做法得到的编码表质量不高。

> 压缩算法 是如何 折中 处理的????




...全文
351 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2018-05-09
  • 打赏
  • 举报
回复
有用固定字典的,也有动态计算字典的。 zip算法首先用哈夫曼编码得到字典,然后再压缩字典,这一步用的固定的码表 https://www.cnblogs.com/esingchan/p/3958962.html

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧