[发明专利]一种哈夫曼树保存方法及系统有效
申请号: | 201510258041.5 | 申请日: | 2015-05-20 |
公开(公告)号: | CN104821829B | 公开(公告)日: | 2018-06-26 |
发明(设计)人: | 王志强 | 申请(专利权)人: | 东方网力科技股份有限公司 |
主分类号: | H03M7/30 | 分类号: | H03M7/30 |
代理公司: | 北京市万慧达律师事务所 11111 | 代理人: | 代峰;李春晅 |
地址: | 100070 北京市朝阳区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 哈夫 树结构 记录 节点数 子树 数据压缩技术 存储空间 高效压缩 位存储 保存 遍历 无子 存储 | ||
本发明涉及数据压缩技术领域,公开了一种哈夫曼树保存方法,该方法包括:根据哈夫曼树的树结构,按层遍历,每个节点用1位记录,0表示无子树,1表示有子树;所述树结构的节点数N≤2时,不记录所述树结构;所述树结构的节点数N>2时,除去记录值确定的节点,按层记录每个所述节点。本发明根据所述哈夫曼树的结构特点,按位存储所述节点的子树状态,这种方法能够完成数据的稳定高效压缩,用最少的存储空间完成对所述哈夫曼树的存储。
技术领域
本发明涉及数据压缩技术领域,尤其涉及一种哈夫曼树保存方法及系统。
背景技术
哈夫曼树经常用于数据压缩算法,实际压缩中,不仅要保存压缩编码,同时,为了解压缩,还需要保存哈夫曼树的树结构和节点总数等,目前,用来存储哈夫曼树的方法有以下三种:
1、直接记录编码表方法
2、存储原始统计信息方式代替存储哈夫曼编码表;
3、利用链表存储完整哈夫曼树的方法;
以上三种方法中,直接记录编码表方法需要N-1位存储每个节点,其中N为节点总数;存储原始统计信息方式代替存储哈夫曼编码表采用最大数所占位数或者数据综合决定存储代码的位数;利用链表存储完整哈夫曼树的方法一共需记录2N-1个固定长度的结构数据,其中,N为哈夫曼树的节点数。
这三种方式为防止存在树形极端的情况,均需要考虑溢出问题,所以,需要按照最多的存储位数存储哈夫曼树,这样,在哈夫曼树不满时,会造成严重浪费,且存储极不稳定,此外,利用链表存储完整哈夫曼树的方法还要存储链表指针,浪费更加严重。
发明内容
本发明所要解决的技术问题是,提供一种哈夫曼树保存方法及系统,以解决哈夫曼树存储冗余、浪费严重且存储不稳定的问题。
本发明解决上述技术问题所采用的技术方案是提供一种哈夫曼树保存方法,该方法包括步骤:
S1、根据树结构按层遍历每个节点,存储所述节点的总数N;
S2、判断所述节点总数N;
S3、若所述节点总数N≤2,不记录所述树结构;
S4、若所述节点总数N>2,判断每个节点是否有子树,用1位存储。
优选地,步骤S4中,若有所述子树,该位存储为1;若无所述子树,该位存储为0。
优选地,步骤S4中,还可以根据冗余需要增加到2-N位来存储对所述节点的子树状态。
优选地,根据所述树结构,对所述记录进行优化,除去根节点和最后两个叶节点,得到新的记录,所述新的记录含有一半叶节点,可根据之前的节点推断最后一个节点,除去所述最后一个节点,并存储为最终记录。
优选地,所述哈夫曼树或与所述哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历等方式进行遍历。
另一方面,本发明提供一种哈夫曼树保存系统,该系统包括:
遍历单元,用于根据树结构按层遍历每个节点,得到所述节点的总数N;
第一判断单元,用于判断所述节点总数N,若N≤2,则不记录所述树结构,若N>2,则将遍历结构传递到第二判断单元;
第二判断单元,用于判断每个所述节点是否有子树;
记录单元,用1位,或根据冗余需要,增加到2-N位,记录所述第二判断单元的判断结果;
存储单元,用于存储所述记录单元的记录和所述遍历单元的总数N。
优选地,根据所述第二判断单元的判断,若所述节点有所述子树,则记录为1,若所述节点没有所述子树,则记录为0。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东方网力科技股份有限公司,未经东方网力科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510258041.5/2.html,转载请声明来源钻瓜专利网。