前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编码原理(附一)---算术编码

编码原理(附一)---算术编码

作者头像
视界音你而不同
发布2020-04-10 14:46:14
9880
发布2020-04-10 14:46:14
举报
简介

算术编码是一种无损的数据压缩方法,也是熵编码的一种方法。与其他熵编码比较而言,其他熵编码通常是把输入的消息区分为符号,然后对每个符号进行编码,而算术编码是呢是根据输入消息中不同符号出现的概率,把整个输入的消息最终编码为1个数,一个介于0和1之间的小数。有没有想知道是肿么编码的呢。接下来已一个简单的栗子来说明喽。

准备工作

现在假设有字符序列 aabcda,且P(a) = 0.2,P(b) = 0.1, P(c) = 0.4,P(d) = 0.3,分别代表a,b,c,d在整个序列中出现的概率分别是20%,10%,%40,30%,四者加起来正好为1哦。且4个符号出现的概率将[0,1]区间分割为 [0,0.2),[0.2,0.3),[0.3,0.7),[0.7,1)。

编码过程

首先字符序列中出现了a,P(a) = 0.2,所以落在了区间[0,0.2);

接下来出现的还是a,P(a) = 0.2,但当前的区间已经变为【0,0.2】,(0.2 - 0)* P(a) = 0.04,此时,区间边落在了【0,0.04】;

继续,序列中出现了b,P(b) = 0.1,当前区间为【0,0.04】,(0.04 - 0)* P(b) = 0.004,此时,区间落在了【0,0.004】;

序列中出现c,P(c) = 0.4,当前区间为【0,0.004】,(0.004 - 0) * P(c) = 0.0016,新的区间落在【0,0.0016】;

序列中出现了d,P(d) = 0.3,当前区间为【0, 0.0016】,(0.0016 - 0) * P(d) = 0.00048,新的区间落在【0,0.00048】;

序列中出现了a,P(a) = 0.2,当前区间为【0,0.00048】,(0.00048 - 0) * P(a) = 0.000096,区间落在【0,0.000096】。

好了,到此,整个序列中的符号经过算术编码得到一个相对较小的区间,二进制编码最终在最后得到的区间之内,选取任意一个数作为编码的结果。此处我们就选则0.000086作为最终的结果吧。这样,我们的算术编码是不是也清晰了呢,希望对大家有用哦!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 视界音你而不同 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档