《可视化计算》第6章信息论、哈夫曼编码与二叉树 (A).ppt

《可视化计算》第6章信息论、哈夫曼编码与二叉树 (A).ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用信息论进行编码分析(1) 计算英文字符(26字母加空格)为信息源的熵: 设所有字符等概率出现: H(X)=-∑p(x)log2p(x) {x∈X} = 27*{-1/27log21/27} = log227 =4.75 (bits/Letter) * 利用信息论进行编码分析(2) 假设英文字符的概率分布如下表: 解:H(X)=-∑p(xi)log2p(xi) {i=1~27} ≈4.02 (bits/Letter) 说明:考虑英文字符和空格实际出现的概率后,英文信源的平均不确定性,比把字符和空格看作等概率的情况要小 * 利用熵求最优编码的问题 有一个池塘里,有时非常平静,有时有青蛙叫,有时有蛤蟆叫,有时青蛙和蛤蟆一起叫,池塘的声响状态服从以下分布: 请定时记录池塘的声响状态,并编码发送。如何编码,可以使编码最短? 池塘状态 平静 青蛙叫 蛤蟆叫 青蛙和蛤蟆叫 概率 0.5 0.125 0.125 0.25 * 利用熵求最优编码 定长编码,需要两个二进制位; 变长编码:给小概率消息较长的编码,给大小概率消息较短的编码; 因为,随机变量 X服从概率分布P时,如果消息x的分布密度为p(x),则给其分配一个长度为[-log2p(x)]个二进制位的编码 则发送一个消息平均需要-∑p(x)log2p(x)个二进制位 所以,有变长的编码规则如下: * 利用熵求最优编码(3) 消息 编码 平静 0 青蛙叫 110 蛤蟆叫 111 青蛙和蛤蟆一起叫 10 编码的平均长度为: -∑p(x)log2p(x)=0.5*1+0.125*3+0.125*3+0.25*2 =1.75比特 * 基于有序频率二叉树编码 1951年哈夫曼和他在MIT信息论课程的同学需要选择是完成学期报告还是期末考试; 导师Robert M. Fano给他们的学期报告的题目是,寻找最有效的二进制编码 最终发现了基于有序频率二叉树(也称为最优二叉树)编码的想法 * 最优二叉树概念 1.树的路径长度 从树根到树中每一节点的路径长度之和 2.树的带权路径长度(Weighted Path Length of Tree,WPL) 节点的权:在一些应用中,赋予树中节点的一个有某种意义的实数(例如编码值) 节点的带权路径长度:节点到树根之间的路径长度与该节点上权的乘积 * 最优二叉树概念 树的带权路径长度:定义为树中所有叶节点的带权路径长度之和,通常记为: 其中: n表示叶子节点的数目 wi和li分别表示叶节点ki的权值和根到节点ki之间的路径长度 树的带权路径长度亦称为树的代价 * 最优二叉树或哈夫曼树 在权为wl,w2,…,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称为最优二叉树 (a)WPL=7*2+5*2+2*2+4*2=36 (b)WPL=7*3+5*3+2*1+4*2=46 (c)WPL=7*1+5*2+2*3+4*3=35 * 构造Huffman树 l)将信号源的符号按照出现概率递减的顺序排列2)将最下面的两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率 3)重复进行步骤1和2直到概率相加的结果等于1为止 4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示 5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码 * 例6-5:请编制哈夫曼编码 一串信号源S={Z, K, F, C, U, D, L, E}对应频率为p={2,7,24,32,37,42,42,120} * 例6-5:请编制哈夫曼编码 E=0 U=100 D=101 L=110 C=1110 Z=111100 K=111101 F=11111 每一码不会是另一码的前缀, 译码时可惟一复原 * 使用RAPTOR产生哈夫曼编码 1、编码的数据的准备:基本数据,通过文件(code_frequence.csv)输入给算法,并按以下字母、频率对的形式排列: “Z, 2,K, 7,F, 24,C, 32,U,37,D, 42,L,42,E, 120” * 使用RAPTOR产生哈夫曼编码 2、主要数据结构: 使用binlist数组保存带权二叉树 元素序号 1 2 3 4 5 6 作用 节点名 左子 右子 代码 频率 父节点 作为叶子的8个节点在代码字段,具有原始代码的值,其他节点则没有; 所有叶子节点的左子,右子字段为空,用“0”表示 * 哈夫曼编码main子图 * 主要子图和子程序 Init子图:binlist

文档评论(0)

精品文库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档