一种哈夫曼树保存方法及系统的制作方法

文档序号:8499824阅读:670来源:国知局
一种哈夫曼树保存方法及系统的制作方法
【技术领域】
[0001]本发明涉及数据压缩技术领域,尤其涉及一种哈夫曼树保存方法及系统。
【背景技术】
[0002]哈夫曼树经常用于数据压缩算法,实际压缩中,不仅要保存压缩编码,同时,为了解压缩,还需要保存哈夫曼树的树结构和节点总数等,目前,用来存储哈夫曼树的方法有以下三种:
[0003]1、直接记录编码表方法
[0004]2、存储原始统计信息方式代替存储哈夫曼编码表;
[0005]3、利用链表存储完整哈夫曼树的方法;
[0006]以上三种方法中,直接记录编码表方法需要N-1位存储每个节点,其中N为节点总数;存储原始统计信息方式代替存储哈夫曼编码表采用最大数所占位数或者数据综合决定存储代码的位数;利用链表存储完整哈夫曼树的方法一共需记录2N-1个固定长度的结构数据,其中,N为哈夫曼树的节点数。
[0007]这三种方式为防止存在树形极端的情况,均需要考虑溢出问题,所以,需要按照最多的存储位数存储哈夫曼树,这样,在哈夫曼树不满时,会造成严重浪费,且存储极不稳定,此外,利用链表存储完整哈夫曼树的方法还要存储链表指针,浪费更加严重。

【发明内容】

[0008]本发明所要解决的技术问题是,提供一种哈夫曼树保存方法及系统,以解决哈夫曼树存储冗余、浪费严重且存储不稳定的问题。
[0009]本发明解决上述技术问题所采用的技术方案是提供一种哈夫曼树保存方法,该方法包括步骤:
[0010]S1、根据树结构按层遍历每个节点,存储所述节点的总数N ;
[0011]S2、判断所述节点总数N ;
[0012]S3、若所述节点总数N < 2,不记录所述树结构;
[0013]S4、若所述节点总数N > 2,判断每个节点是否有子树,用I位存储。
[0014]优选地,步骤S4中,若有所述子树,该位存储为I ;若无所述子树,该位存储为O。
[0015]优选地,步骤S4中,还可以根据冗余需要增加到2-N位来存储对所述节点的子树状态。
[0016]优选地,根据所述树结构,对所述记录进行优化,除去根节点和最后两个叶节点,得到新的记录,所述新的记录含有一半叶节点,可根据之前的节点推断最后一个节点,除去所述最后一个节点,并存储为最终记录。
[0017]优选地,所述哈夫曼树或与所述哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历等方式进行遍历。
[0018]另一方面,本发明提供一种哈夫曼树保存系统,该系统包括:
[0019]遍历单元,用于根据树结构按层遍历每个节点,得到所述节点的总数N ;
[0020]第一判断单元,用于判断所述节点总数N,若N ( 2,则不记录所述树结构,若N >2,则将遍历结构传递到第二判断单元;
[0021]第二判断单元,用于判断每个所述节点是否有子树;
[0022]记录单元,用I位,或根据冗余需要,增加到2-N位,记录所述第二判断单元的判断结果;
[0023]存储单元,用于存储所述记录单元的记录和所述遍历单元的总数N。
[0024]优选地,根据所述第二判断单元的判断,若所述节点有所述子树,则记录为1,若所述节点没有所述子树,则记录为O。
[0025]优选地,所述记录单元还包括优化单元,用来优化所述记录,除去所述记录中代表所述树结构根节点的第一个记录、代表最后两个叶节点的最后两个记录以及根据之前节点可以推导出的倒数第三个节点的记录。
[0026]优选地,所述遍历单元还可以通过前序遍历、中序遍历和后序遍历等遍历方法对所述树结构进行遍历。
[0027]优选地,所述系统还可以保存与所述哈夫曼树树结构相似的结构。
【附图说明】
[0028]图1是本发明的一个优选实施例中哈夫曼树保存方法的流程图;
[0029]图2是本发明的一个优选实施例中哈夫曼树保存系统的结构图。
【具体实施方式】
[0030]以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。
[0031]下面结合附图和具体实施例对本发明做进一步详细说明。
[0032]如图1所示,为本发明的一个优选实施例,公开了一种哈夫曼树保存方法,该方法包含步骤:
[0033]S1、根据树结构按层遍历每个节点,存储节点的总数N ;
[0034]S2、判断节点总数N;
[0035]S3、若节点总数N ( 2,不记录树结构;
[0036]S4、若节点总数N > 2,判断每个节点是否有子树,用I位存储。
[0037]进一步地,步骤S4中,若有子树,该位存储为I ;若无子树,该位存储为O。
[0038]进一步地,步骤S4中,还可以根据冗余需要增加到2-N位来存储对节点的子树状
??τ O
[0039]本实施例中,通过按层遍历哈夫曼树节点的方法,仅需要2Ν-1位即可存储整个树结构,并且在节点总数不大于2时,不需记录树结构,这种方法能够节省存储哈夫曼树的空间,防止存储空间的浪费,并且不会造成存储长度不固定的问题,能够达到稳定高效进行压缩的目的;即使需要增加到2-Ν位来存储所述节点,对比其他存储方式仍旧更有优势。
[0040]进一步地,根据树结构,对记录进行优化,除去根节点和最后两个叶节点,得到新的记录,新的记录含有一半叶节点,可根据之前的节点推断最后一个节点,除去最后一个节点,并存储为最终记录。
[0041]本实施例中还可以对哈夫曼树的存储进行优化,哈夫曼树的根节点必定有子树,记录为1,可以除去;哈夫曼树的最后两个节点必定是叶节点,无子树,记录为0,可以除去;剩余节点中有一半是叶节点,因此,根据之前的节点可以推断出倒数第三个节点是否有子树,不需要存储,整个哈夫曼树的存储仅需要2N-5位即可,极大的节省了存储空间,杜绝了存储空间浪费等问题。
[0042]进一步地,哈夫曼树或与哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历等方式进行遍历。
[0043]本实施例中,哈夫曼树的存储方法还可用于特点相同的树上,节省存储空间,同时,遍历方法出按层遍历外还可以通过前序遍历、中序遍历和后续遍历等常用遍历方法,此夕卜,除压缩外,本方法还可用于其他需存储哈夫曼树的领域
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1