哈夫曼树的存储方法及利用数组进行数据解码的方法技术

技术编号:6955887 阅读:467 留言:0更新日期:2012-04-11 18:40
一种哈夫曼树的存储方法及利用数组进行数据解码的方法,该存储方法包括如下步骤:根据广度优先搜索算法,依序建立哈夫曼树中每个节点的索引值,其中,每个节点都包含有一个回传值;从根节点开始,根据该索引值的顺序,依次读取该哈夫曼树中的每个节点;将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中。利用本发明专利技术可以节省存储空间,提高哈夫曼编码的效率。

【技术实现步骤摘要】

本专利技术涉及一种数据编解码方法,尤其涉及一种。
技术介绍
传统的哈夫曼编码(Huffman Coding)采用哈夫曼表格来存储哈夫曼树的节点信息,其中,每个节点通常具备以下三种信息回传值(Value)、编码(Code)和编码长度(Code Length)。当解码时,便可根据编码值,从哈夫曼表格中查找到对应到的回传值。由于每个节点包含三种信息,所以哈夫曼表格中的每一笔资料都需要三个字段来储存,不利于节省存储空间。
技术实现思路
鉴于以上内容,有必要提供一种哈夫曼树的存储方法,其可利用数组来存储哈夫曼树的节点信息。鉴于以上内容,还有必要提供一种利用数组进行数据解码的方法,其可利用数组来查找哈夫曼树节点的回传值,对数据进行解码。一种哈夫曼树的存储方法,该方法包括如下步骤根据广度优先搜索算法,依序建立哈夫曼树中每个节点的索引值,其中,每个节点都包含有一个回传值;从根节点开始,根据该索引值的顺序,依次读取该哈夫曼树中的每个节点;及将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中。一种利用数组进行数据解码的方法,该数组存储有哈夫曼树中每个节点的信息, 每个节点的信息分为第一部分信息和第二部分信息,该方法包括如下步骤(a)获取待解码的比特流;(b)从哈夫曼树中读取第一个节点;(c)判断该节点是否为叶子节点;(d)如果该节点不是叶子节点,则依次从该比特流中读取一比特,根据该比特的数值确定下一个搜寻的节点,然后返回步骤(C),继续判断该下一个搜寻的节点是否为叶子节占.(e)如果该节点是叶子节点,则根据该节点的索引值,从该数组中查找该节点的存储值,从该节点的存储值中获取该节点的第一部分信息的值,作为该节点的回传值;(f)判断该比特流是否读取完毕;(g)如果该比特流没有读取完毕,则返回步骤(b);(h)如果该比特流读取完毕,输出步骤(e)中获取的每个节点的回传值,以完成该比特流的解码过程。相较于现有技术,所述的,其可利用数组来存储哈夫曼树的节点信息,当解码时,再利用该数组来查找哈夫曼树节点的回传值,节省了存储空间,提高了哈夫曼编码的效率。附图说明图1是本专利技术存储模块和解码模块的应用环境图。图2是本专利技术哈夫曼树存储方法的较佳实施例的流程图。图3是现有技术中的一个哈夫曼表格的示意图。图4是根据图3中的哈夫曼表格得出的哈夫曼树。图5是根据图4中的哈夫曼树进行索引值编号的示意图。图6是本专利技术存储每个节点信息的数据结构示意图。图7是本专利技术利用数组进行数据解码的方法的较佳实施例的流程图。主要元件符号说明权利要求1.一种哈夫曼树的存储方法,其特征在于,该方法包括如下步骤根据广度优先搜索算法,依序建立哈夫曼树中每个节点的索引值,其中,每个节点都包含有一个回传值;从根节点开始,根据该索引值的顺序,依次读取该哈夫曼树中的每个节点;及将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中。2.如权利要求1所述的哈夫曼树的存储方法,其特征在于,所述将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中的步骤包括将每个节点的第一部分信息的二进制数值和第二部分信息的二进制数值合并在一起;及将该合并后的二进制数值对应的十进制数值存储在一个数组中。3.如权利要求2所述的哈夫曼树的存储方法,其特征在于,所述将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中的步骤包括如果目前节点为内部节点,则目前节点第一部分信息的值为目前节点的左子节点的索引值与目前节点的索引值之差,第二部分信息的值为1 ;及如果目前节点为外部节点,则目前节点第一部分信息的值为目前节点的回传值,第二部分信息的值为0。4.如权利要求2所述的哈夫曼树的存储方法,其特征在于,所述第一部分信息的存储长度为7bits,所述第二部分信息的存储长度为lbit。5.一种利用数组进行数据解码的方法,其特征在于,该数组存储有哈夫曼树中每个节点的信息,每个节点的信息包括第一部分信息和第二部分信息,该方法包括如下步骤(a)获取待解码的比特流;(b)从哈夫曼树中读取第一个节点;(c)判断该节点是否为叶子节点;(d)如果该节点不是叶子节点,则依次从该比特流中读取一比特,根据该比特的数值确定下一个搜寻的节点,然后返回步骤(c),继续判断该下一个搜寻的节点是否为叶子节点;(e)如果该节点是叶子节点,则根据该节点的索引值,从该数组中查找该节点的存储值,并从该节点的存储值中获取该节点的第一部分信息的值,作为该节点的回传值;(f)判断该比特流是否读取完毕;(g)如果该比特流没有读取完毕,则返回步骤(b);(h)如果该比特流读取完毕,输出步骤(e)中获取的每个节点的回传值,以完成该比特流的解码过程。6.如权利要求5所述的利用数组进行数据解码的方法,其特征在于,所述数组存储每个节点的第一部分信息和第二部分信息包括将每个节点的第一部分信息的二进制数值和第二部分信息的二进制数值合并在一起;及将该合并后的二进制数值对应的十进制数值存储在一个数组中。7.如权利要求6所述的利用数组进行数据解码的方法,其特征在于,所述数组存储每个节点的第一部分信息和第二部分信息包括如果目前节点为内部节点,则目前节点第一部分信息的值为目前节点的左子节点的索引值与目前节点的索引值之差,第二部分信息的值为1 ;及如果目前节点为外部节点,则目前节点第一部分信息的值为目前节点的回传值,第二部分信息的值为0。8.如权利要求7所述的利用数组进行数据解码的方法,其特征在于,所述判断该节点是否为叶子节点的步骤包括如果该节点的第二部分信息的值为1,则判定该节点为内部节点;及如果该节点的第二部分信息的值为0,则判定该节点为叶子节点。9.如权利要求7所述的利用数组进行数据解码的方法,其特征在于,所述根据该比特的数值确定下一个搜寻的节点的步骤包括如果该比特的数值为0,则下一个搜寻的节点的索引值为(目前节点的索引值+目前节点的第一部分信息的值);及如果该比特的数值为1,则下一个搜寻的节点的索引值为(目前节点索引值+目前节点的第一部分信息的值+1)。10.如权利要求9所述的利用数组进行数据解码的方法,其特征在于,所述目前节点的第一部分信息的值由以下规则确定将目前节点的存储值对应的二进制数值右移一位,得到一个右移后的二进制数值;及将该右移后的二进制数值转换成十进制数值即得到目前节点第一部分信息的值。全文摘要一种,该存储方法包括如下步骤根据广度优先搜索算法,依序建立哈夫曼树中每个节点的索引值,其中,每个节点都包含有一个回传值;从根节点开始,根据该索引值的顺序,依次读取该哈夫曼树中的每个节点;将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中。利用本专利技术可以节省存储空间,提高哈夫曼编码的效率。文档编号H03M7/42GK102255617SQ20101017672公开日2011年11月23日 申请日期2010年5月19日 优先权日2010年5月19日专利技术者卢秋桦, 叶建发, 李忠一, 简裕峰, 蔡程丰, 郑山川, 颜宗信 申请人:鸿富锦精密工业(深圳)有限公司, 鸿海精密工业股份有限公司本文档来自技高网...

【技术保护点】
1.一种哈夫曼树的存储方法,其特征在于,该方法包括如下步骤:根据广度优先搜索算法,依序建立哈夫曼树中每个节点的索引值,其中,每个节点都包含有一个回传值;从根节点开始,根据该索引值的顺序,依次读取该哈夫曼树中的每个节点;及将每个节点的信息分成第一部分信息和第二部分信息,存储在一个数组中。

【技术特征摘要】

【专利技术属性】
技术研发人员:李忠一叶建发卢秋桦蔡程丰郑山川简裕峰颜宗信
申请(专利权)人:鸿富锦精密工业深圳有限公司鸿海精密工业股份有限公司
类型:发明
国别省市:94

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1