保存范式哈夫曼树的方法及装置的制造方法_2

文档序号:9729831阅读:来源:国知局
加清楚明白,下面结合实施例和附图,对本 发明进一步详细说明。
[0048] 参见图2,为本发明保存范式哈夫曼树的方法示意性流程图,其包括W下步骤:
[0049] 步骤201,对范式哈夫曼树的节点进行标记,用Μ标记节点有子树,用Ν标记节点无 子树;对范式哈夫曼树每层节点的标记依次进行记录,具体地:采用从左至右的顺序,从第 一个节点开始记录,只记录到第一个不为Ν的节点。
[0050] 其中,Μ和Ν可根据需要选取,可W是1位,也可W是2位或更多位。运里位为例,Μ 取值为1,Ν取值为0。需要保存的范式哈夫曼树仍W图1所示的实例进行说明,对各节点进行 标记后为图3所示:第一层:1,第二层:01,第Ξ层11,第四层:0000。
[0051] 为了减少存储数据,本申请中,对每层节点的标记进行记录时,从第一个节点开始 记录,只记录到第一个不为Ν的节点,后续不再记录。
[0052] 针对图3的实例,对各层进行记录:
[005;3]第一层山
[0054] 第二层:01;
[0055] 第Ξ层:1(因每层只记录到第一个不为0的节点);
[0化6] 第四层:〇〇〇〇;
[0057] 最终记录结果:10110000。
[005引步骤202,将记录的节点标记作为最终记录结果,保存最终记录结果。
[0059] 可选地,还可W对范式哈夫曼树中的叶节点数目进行统计,得到叶节点总数,将叶 节点总数添加到最终记录结果中。
[0060] 图3的实例中,叶节点总数为5。本发明采用从左至右或从右至左的顺序对每层节 点的标记进行记录,从第一个节点开始记录,记录到第一个不为N或不为Μ的节点。具体地, 采用从左至右对每层节点的标记进行记录时,从第一个节点开始记录,只记录到第一个不 为Ν的节点,后续节点不再进行记录;类似地,采用从右至左对每层节点的标记进行记录时, 从第一个节点开始记录,只记录到第一个不为Μ的节点,后续节点不再记录。本申请一改惯 有的记录码长方式和二次压缩方式,提供了更加简便的记录方式,也减少了存储数据,从而 提高了存储效率。
[0061] 保存最终记录结果后,需要时,可对其进行解码,W获知范式哈夫曼树的结构。解 码具体过程包括:
[0062] 从上至下对各层依次进行解码:
[0063] 统计当前层的上一层中标记为Μ的节点数,将统计出的节点数乘W2,将得到的乘 积值作为当前层的节点数Ρ;若当前层为第一层时,Ρ为1;
[0064] 从最终记录结果中依次读取标记位,直至遇到标记为Μ或读取的标记位数目达到Ρ 个时停止,为读取的标记填充后续标记Μ,直到标记位总数达到Ρ位,将填充后的标记作为当 前层的标记结果。下面结合图3的实例进行说明,其解码过程巧个叶节点,记录为10110000) 为:
[0065] 对各层采用前述流程进行解码,具体地:
[0066] 第一层:1;解码:1。
[0067] 此时,Ρ为1;从最终记录结果中依次读取标记位,直至遇到标记为Μ或读取的标记 位数目达到Ρ个时停止,为读取的标记填充后续标记Μ,直到标记位总数达到Ρ位,将填充后 的标记作为当前层的标记结果,则得到的第一层的标记结果为1。
[006引第二层:01,解码:01;
[0069] 此时,Ρ为2;从最终记录结果中依次读取标记位,直至遇到标记为Μ或读取的标记 位数目达到Ρ个时停止,为读取的标记填充后续标记Μ,直到标记位总数达到Ρ位,将填充后 的标记作为当前层的标记结果,则得到的第二层的标记结果为01。
[0070] 第;层:1,解码:11;
[0071] 此时,Ρ为2;从最终记录结果中依次读取标记位(前面已经读到10110000中的第3 位,运里从第四位开始读取),直至遇到标记为Μ或读取的标记位数目达到Ρ个时停止(运里, 读取一位,即1 ),为读取的标记填充后续标记Μ,直到标记位总数达到Ρ位,将填充后的标记 作为当前层的标记结果,则得到的第Ξ层的标记结果为11。
[0072] 第四层:0000,解码为:0000。
[0073] 此时,Ρ为4;从最终记录结果中依次读取标记位(前面已经读到10110000中的第4 位,运里从第5位开始读取),直至遇到标记为Μ或读取的标记位数目达到Ρ个时停止(运里, 读取4位,即0000),则得到的第四层的标记结果为0000。
[0074] 解码结束。
[0075] 此时,P = 0;解码结束。
[0076] 为了采用尽量少的数据来保存范式哈夫曼树,在编码保存时,因最后一层各节点 都标记为0,可W不对最后一层进行记录。进一步地,在编码保存时,还可W不对每层的最后 一个节点进行记录。
[0077] 对应地,解码将相应进行调整。举例说明,如果编码保存时,采用从左至右的顺序, 从第一个节点开始记录,只记录到第一个不为N的节点,并且,不对最后一层进行记录,也不 对每层的最后一个节点进行记录;解码具体为:
[0078] 将第一层节点的标记设置为M;
[0079] 从上至下对后续各层依次进行解码:
[0080] 统计当前层的上一层中标记为Μ的节点数,将统计出的节点数乘W2,将得到的乘 积值作为当前层的节点数Ρ;
[0081] 从最终记录结果中读取叶节点总数,统计出当前层之前所有层标记为Ν的叶节点 数,计算出剩余叶节点数Q;
[0082] 判断Ρ是否等于Q,如果是,则当前层为最后一层,Ρ个节点全部为叶节点,标记为Ν; 否则,从最终记录结果中依次读取标记位,直至遇到标记为Μ或读取的标记位数目达到Ρ-1 个时停止,为读取的标记填充后续标记Μ,直到标记位数达到Ρ位,将填充后的标记作为当前 层的标记结果。
[0083] 下面针对图3的实例进行详细说明。对各层进行记录:
[0084] 第一层:不记录(因每层的最后一个节点不记录);
[0085] 第二层:0(因每层的最后一个节点不记录);
[0086] 第Ξ层:1(因每层的最后一个节点不记录且仅记录到第一个不为0的节点);
[0087] 第四层:不记录(因为最后一层不记录);
[0088] 最终记录结果:01。
[0089] 运样,一共用2位便可存储上面例子中的范式哈弗曼树的结构,其效率显而易见, 比现有记录码长方式及进行二次压缩方式的效率提高很多。
[0090] 图3的实例中,叶节点总数为5。
[0091] 下面结合图3的实例进行说明,其解码过程(5个叶节点,记录为01)为:
[0092] 第一层:不记录,解码:1(因每层的最后一个节点不记录,一定为1)。
[0093] 对第二层W后的各层采用如下方式进行解码:当前层节点数(Ρ)=上一层为1的节 点数*2;当剩余叶节点数=Q时,当前层全部节点全部为叶节点,也即全部为0;按位读取压 缩位,直至遇到压缩位为1(假定第T位,读取至第T位)或个数达到P-1个停止;当读取的压缩 位为加寸,叶节点计数+1;从T+1至P位全部填充为1。
[0094] 本实例中,后续各层解码后依次为:
[00M]第二层:0,解码:01 (共2个节点,最
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1