香农编码,哈夫曼编码与费诺编码的比较[通俗易懂]

香农编码,哈夫曼编码与费诺编码的比较[通俗易懂]一、香农编码概念:香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。香农编码属于不等长编码,通常将经常出现的消息变成短码,不…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、香农编码

概念:
香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。

香农编码属于不等长编码,通常将经常出现的消息变成短码,不经常出现的消息编成长码,从而提高通信效率。 香农编码严格意义上来说不是最佳码,它是采用信源符号的累计概率分布函数来分配码字。
编码步骤如下:
(1)将信源符号按概率从大到小顺序排列,为方便起见,令
在这里插入图片描述
(2)按
在这里插入图片描述 计算第i个符号对应的码字的码长(取整);
(3) 计算第i个符号的累加概率 ;
(4)将累加概率变换成二进制小数,取小数点后 位数作为第i个符号的码字。
香农编码的效率不高,实用性不大,但对其他编码方法有很好的理论指导意义。一般情况下,按照香农编码方法编出来的码,其平均码长不是最短的。即不是紧致码(最佳码)。只有当信源符号的概率分布使不等式左边的等号成立时,编码效率才达到最高
例1对如下信源编码:
在这里插入图片描述
其香农编码如表所示,
在这里插入图片描述
以i=4为例,在这里插入图片描述 因此描述 。累加概率 ,变成二进制数,为0.1001…。转换的方法为:用Pi乘以2,如果整数部分有进位,则小数点后第一位为1,否则为0,将其小数部分再做同样的处理,得到小数点后的第二位,依此类推,直到得到了满足要求的位数,或者没有小数部分了为止。可以看出,编码所得的码字,没有相同的,所以是非奇异码,也没有一个码字是其他码字的前缀,所以是即时码,也是唯一可译码。
平均码长为:(0.2+0.19+0.18+0.17+0.15)x3+0.1×4+0.01×7=3.14
特点:
香农编码的效率不高,实用性不大,但对其他编码方法有很好的理论指导意义。一般情况下,按照香农编码方法编出来的码,其平均码长不是最短的,即不是紧致码(最佳码)。只有当信源符号的概率分布使不等式左边的等号成立时,编码效率才达到最高。

**

二、哈夫曼编码

**
概念:
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

哈夫曼编码的具体步骤如下:

1)将信源符号的概率按减小的顺序排队。
2)把两个最小的概率相加,并继续这一步骤,始终将较高的概率分支放在右边,直到 最后变成概率1。
3)画出由概率1处到每个信源符号的路径,顺序记下沿路径的0和1,所得就是该符号的霍夫曼码字。
4)将每对组合的左边一个指定为0,右边一个指定为1(或相反)。
例1对如下信源编码:
在这里插入图片描述
通过以上步骤得到的编码为:
在这里插入图片描述
平均码长:0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4 = 2.72
特点
Huffman码具有以下3个特点:

  1. Huffman码的编码方法保证了概率大的符号对应短码,概率小的符号对应长码,而且短码得到充分利用。
  2. 每次缩减信源的最后两个码字总是最后一位码元不同,前面各位码元相同(二元编码情况)。
  3. 每次缩减信源的最长两个码字有相同的码长。
    这三个特点保证了所得的Huffman码一定是最佳码。

三、费诺编码

概念:
1949年费诺(R.M. Fano)提出了一种编码方法,称之为费诺码或Fano码。它属于概率匹配编码,但一般也不是最佳的编码方法,只有当信源的概率分布呈现 在这里插入图片描述 分布形式的条件下,才能达到最佳码的性能 。

Fano码的编码步骤如下:
1)将 r 个信源符号按概率递减的方式进行排列 。
2)将排列好的信源符号按概率值划分成两大组,使每组的概率之和接近于相等,并对每组各赋予一个二元码符号0和1。
3)将每一大组的信源符号再分成两组,使划分后的两个组的概率之和接近于相等,再分别赋予一个二元码符号0和1。
4)依次下去,直至每个小组只剩一个信源符号为止。
5)将逐次分组过程中得到的码元排列起来就是各信源符号的编码。

例1对如下信源编码:
在这里插入图片描述
从左到右,所有的符号以它们出现的概率(次数)划分。在S3与S4之间划定分割线,得到了左右两组,总频率分别为0.57,0.43。
在这里插入图片描述

这样就把两组的差别降到最小。通过这样的分割, S1,S2与S3同时拥有了一个以0为开头的码字, S4,S5,S6,S7的码子则为1, 随后, 在树的左半边,于S1,S2,S3间建立新的分割线,S1为一组,S2,S3为一组这样S1就成为了码字为00的叶子节点,S2,S3的开头为01;然后S2,S3间再分组得到S2的编码为010,S3的编码为011.以此类推最后得到编码为下图:
在这里插入图片描述
**平均码长为:0.2×2+0.19×3+0.18×3+0.17×2+0.15×3+0.1×4+0.01×4= 2.74

Fano码具有以下性质:
1)Fano码的编码方法实际上是一种构造码树的方法,所以Fano码是即时码。
2)Fano码考虑了信源的统计特性,使概率大的信源符号能对应码长较短的码字,从而有效地提高了编码效率。
3)Fano码不一定是最佳码。因为Fano编码方法不一定能使短码得到充分利用。当信源符号较多时,若有一些符号概率分布很接近,分两大组的组合方法就会很多。可能某种分大组的结果,会使后面小组的“概率和”相差较远,从而使平均码长增加。
前面讨论的Fano码是二元Fano码,对于s元Fano码,与二元Fano码的编码方法相同,只是每次分组时应将符号分成概率分布接近的s个组。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195073.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安卓获取sha1_android获取真实时间

    安卓获取sha1_android获取真实时间此文介绍AndroidStudio中获取SHA1的方法。获取开发中的SHA1:在右侧找到菜单栏“Gradle”—>”APP名”—>“Tasks”—>“android”—>双击“signReport”即可。这时生成出来的只是debug的SHA1和MD5值:获取:获取发布版本的SHA1:请自行生成签名文件,打开androidst…

    2022年8月11日
    7
  • 美国目前最流行的五种量化交易模型[通俗易懂]

    美国目前最流行的五种量化交易模型[通俗易懂]01、股票多空策略股票多空策略(EquityLong/Short),即买一些股票,通过融券的方式去卖空一些股票,然后再用一些股指期货进行对冲。这是国际上主流的HedgeFund所用的量化策略,据知名数据商Eurekahedge的统计数据,在国际对冲基金中长期占比第一(一直超过30%)。比如2011年获得美国量化基金业评比第一名的贝莱德“32Cap全球对冲基金产品”使用的就是经典的多空策略…

    2022年6月26日
    72
  • Unable to AUTH to MASTER: -ERR Client sent AUTH, but no password is set「建议收藏」

    Unable to AUTH to MASTER: -ERR Client sent AUTH, but no password is set「建议收藏」问题描述:redis主从复制时,想要增加密码认证功能。初学了解不多,修改了master的redis_6379.conf,增加”masterauth 123456″,同时修改slave的redis_6380.conf,增加”masterauth 123456″。认为主从配置的认证密码的参数都是masterauth。重新启动后用redis-cli连接slave,输入info replicati…

    2022年6月13日
    60
  • SecureCRT 设置超时自动断开连接时长

    SecureCRT 设置超时自动断开连接时长SecureCRT 设置超时自动断开连接时长

    2022年4月24日
    63
  • python—whl文件介绍与安装

    python—whl文件介绍与安装在安装whl文件之前,我们需要先搞清楚什么是whl文件,whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装。在Win7下安装whl文件,可以直接使用pip命令:pipinstallMySQL_python-1.2.5-cp36-none-win32.whl(1)虽然大多数情况下,…

    2022年5月30日
    83
  • Vue前端项目-主页布局-左侧导航菜单(静态)[通俗易懂]

    Vue前端项目-主页布局-左侧导航菜单(静态)[通俗易懂]目录1、修改侧边栏组件2、滚动条样式3、导入并使用组件实现效果:NavMenu的详细用法:https://element.eleme.cn/#/zh-CN/component/menu1、修改侧边栏组件为侧边栏组件,添加导航菜单侧边栏组件:src/layout/components/Sidebar/index.vue<tem…

    2022年7月26日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号