网站大量收购闲置独家精品文档,联系QQ:2885784924

数字图像处理课程设计-- Huffman编码理论及算法实现.doc

数字图像处理课程设计-- Huffman编码理论及算法实现.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字图像处理课程设计-- Huffman编码理论及算法实现

数字图像处理课程设计 课程题目 Huffman编码原理及算法实现 Huffman编码理论及算法实现 基本介绍 霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。 霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln) N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明霍夫曼树的WPL是最小的。 输入 符号集合S={s1,s2,···,Sn},其S集合的大小为n。 权重集合W={w1,w2,···,Wn},其W集合不为负数且Wi=weight(Si), 1 ≤ i ≤ n。 输出 一组编码C(S,W)={c1,c2,···Cn},其C集合是一组二进制编码且Ci为Si相对应的编码,1 ≤ i ≤ n。 霍夫曼树常处理符号编写工作。根据整组数据中符号出现的频率高低,决定如何给符号编码。如果符号出现的频率太高,则给符号的码越短,相反符号的号码越长。假设我们要给一个英文单字F O R G E T进行霍夫曼编码,而每个英文字母出现的频率。 演算过程 (一)进行霍夫曼编码前,我们先创建一个霍夫曼树。 ⒈将每个英文霍夫曼树字母依照出现频率由小排到大,最小在左。 ⒉每个字母都代表一个终端节点(叶节点),比较F.O.R.G.E.T五个字母中每个字母的出现频率,将最小的两个字母频率相加合成一个新的节点。如Fig.1所示,发现F与O的频率最小,故相加2+3=5。 ⒊比较5.R.G.E.T,发现R与G的频率最小,故相加4+4=8。 ⒋比较5.8.E.T,发现5与E的频率最小,故相加5+5=10。 ⒌比较8.10.T,发现8与T的频率最小,故相加8+7=15。 ⒍最后剩10.15,没有可以比较的对象,相加10+15=25。 (二)进行编码 1.给霍夫曼树的所有左链结0与霍夫曼树右链结1。 2.从树根至树叶依序记录所有字母的编码,如Fig.2。 三、实现方法 实现霍夫曼编码的方式主要是创建一个二叉树和其节点。这些树的节点可以存储在数组里,数组的大小为符号(symbols)数的大小n,而节点分为是终端节点(叶节点)与非终端节点(内部节点)。 一开始,所有的节点都是终端节点,节点内有三个字段: 1.符号(Symbol) 2.权重(Weight、Probabilities、Frequency) 3.指向父节点的链结(Link to its parent node) 而非终端节点内有四个字段: 1.权重(Weight、Probabilities、Frequency) 2.指向两个子节点的 链结(Links to two child node) 3.指向父节点的链结(Link to its parent node) 基本上,我们用0与1分别代表指向左子节点与右子节点,最后为完成的二叉树共有n个终端节点与n-1个非终端节点,去除了不必要的符号并产生最佳的编码长度。 过程中,每个终端节点都包含着一个权重(Weight、Probabilities、Frequency),两两终端节点结合会产生一个新节点,新节点的权重是由两个权重最小的终端节点权重之总和,并持续进行此过程直到只剩下一个节点为止。 实现霍夫曼树的方式有很多种,可以使用优先队列(Priority Queue)简单达成这个过程,给与权重较低的符号较高的优先级(Priority),算法如下: ⒈把n个终端节点加入优先队列,则n个节点都有一个优先权Pi,1 ≤ i ≤ n ⒉如果队列内的节点数1,则: ⑴从队列中移除两个最大的Pi节点,即连续做两次remove(max(Pi), Priority_Queue) ⑵产生一个新节点,此节点为(1)之移除节点之父节点,而此节点的权重值为(1)两节点之权重和 ⑶把(2)产生之节点加入优先队列中 ⒊最后在优先队列里的点为树的根节点(root) 而此算法的时间复杂度( Time Complexity)为O(n log n);因为有n个终端节点,所以树总共有2n-1个节点,使用优先队列每个循环须O(log n)。 此外,有一个更快的方式使时间复杂度降至线性时

文档评论(0)

2017meng + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档