数据压缩方法及系统、解压缩方法及系统的制作方法

文档序号:10572375阅读:391来源:国知局
数据压缩方法及系统、解压缩方法及系统的制作方法
【专利摘要】本发明公开了一种基于哈夫曼编码的数据压缩方法,包括:从原始数据中选取目标数据;利用动态哈夫曼编码算法,生成与目标数据的各个字符相对应的局部动态编码表;检测原始数据中待编码的字符是否位于局部动态编码表中;若是,则利用局部动态编码表对字符进行编码;若否,则利用固定编码表对字符进行编码;将编码后的数据文件与局部动态编码表一同保存为原始数据的压缩文件;可见,本方案与静态哈夫曼编码相比,具有更好的压缩率;与传统动态哈夫曼编码相比,本方案具有更快的压缩速度和更低的编码表存储开销。本发明还提供一种基于哈夫曼编码的数据压缩系统、数据解压缩方法及系统,同样能达到上述技术效果。
【专利说明】
数据压缩方法及系统、解压缩方法及系统
技术领域
[0001 ]本发明涉及数据压缩技术领域,更具体地说,涉及一种数据压缩方法及系统、解压 缩方法及系统。
【背景技术】
[0002] 哈夫曼(Huffman)编码是一种一致性编码法(又称"熵编码法"),用于数据的无损 耗压缩。它根据每一个字符出现的概率建立起来编码表,出现概率高的字符使用较短的编 码,反之出现概率低的则使用较长的编码,使得编码后的字符串的平均期望长度降低,从而 达到无损压缩数据的目的。
[0003] 哈夫曼编码的实现分为静态哈夫曼编码和动态哈夫曼编码两种。静态哈夫曼编码 使用预先定义的固定编码表进行编码,不需要保存编码表信息,但由于编码表固定,并不一 定适用于当前待编码数据,压缩能力有限。动态哈夫曼编码先扫描待压缩文件,统计文件各 字符的出现频率,建立哈夫曼树,生成编码表。由于其编码表是根据待编码数据的特点自适 应生成的,所以动态哈夫曼编码具有更强的压缩能力。但存在以下缺陷:1)需要在编码前扫 描待压缩文件以得到字符出现频率,该过程比较耗时,特别是对于大文件,压缩时间较长; 2)需要传递额外的编码表信息,当压缩数据比较少或遇到特殊数据时,动态Huffman编码的 输出内容的长度会比静态Huffman编码的输出内容要长,极端的情况下可能会比未经压缩 的原始数据内容长度还要长。
[0004] 因此,如何通过哈夫曼编码进行数据压缩,是本领域技术人员需要解决的问题。

【发明内容】

[0005] 本发明的目的在于提供一种数据压缩方法及系统、解压缩方法及系统,以增加压 缩及解压缩速度,降低编码表的存储开销。
[0006] 为实现上述目的,本发明实施例提供了如下技术方案:
[0007] -种基于哈夫曼编码的数据压缩方法,包括:
[0008] 从原始数据中选取目标数据;
[0009] 利用动态哈夫曼编码算法,生成与所述目标数据的各个字符相对应的局部动态编 码表;
[0010] 检测所述原始数据中待编码的字符是否位于所述局部动态编码表中;
[0011] 若是,则利用所述局部动态编码表对字符进行编码;若否,则利用固定编码表对字 符进行编码;
[0012] 将编码后的数据文件与所述局部动态编码表一同保存为所述原始数据的压缩文 件。
[0013] 其中,所述从原始数据中选取目标数据,包括:
[0014] 获取所述原始数据的数据大小;
[0015] 根据所述数据大小,确定相应的目标数据选取规则;
[0016]利用所述目标数据选取规则,从原始数据的预定位置开始选取目标数据。
[0017]其中,利用所述目标数据选取规则,从原始数据的预定位置开始选取目标数据,包 括:
[0018] 利用所述目标数据选取规则,从原始数据的数据头部开始选取目标数据。
[0019] 其中,若检测到所述原始数据中待编码的字符不在所述局部动态编码表,且待编 码的字符的静态编码与所述局部动态编码表中目标字符的动态编码相同,则用所述目标字 符的静态编码替换所述待编码字符的静态编码;
[0020] 将所述待编码的字符和所述待编码字符替换后的静态编码存入所述局部动态编 码表。
[0021] -种基于哈夫曼编码的数据压缩系统,包括:
[0022]目标数据选取模块,用于从原始数据中选取目标数据;
[0023] 局部动态编码表生成模块,用于利用动态哈夫曼编码算法,生成与所述目标数据 的各个字符相对应的局部动态编码表;
[0024] 第一检测模块,用于检测所述原始数据中待编码的字符是否位于所述局部动态编 码表中;若是,则触发第一编码模块;若否,则触发第二编码模块;
[0025] 所述第一编码模块,用于利用所述局部动态编码表对字符进行编码;
[0026] 所述第二编码模块,用于利用固定编码表对字符进行编码;
[0027] 第一保存模块,用于将编码后的数据文件与所述局部动态编码表一同保存为所述 原始数据的压缩文件。
[0028]其中,所述目标数据选取模块包括:
[0029]数据大小获取单元,用于获取所述原始数据的数据大小;
[0030]选取规则确定单元,用于根据所述数据大小,确定相应的目标数据选取规则;
[0031]目标数据选取单元,用于利用所述目标数据选取规则,从原始数据的预定位置开 始选取目标数据。
[0032]其中,所述目标数据选取单元利用所述目标数据选取规则,从原始数据的数据头 部开始选取目标数据。
[0033] 其中,本方案还包括:
[0034] 替换模块,用于在检测到所述原始数据中待编码的字符不在所述局部动态编码 表,且待编码的字符的静态编码与所述局部动态编码表中目标字符的动态编码相同时,用 所述目标字符的静态编码替换所述待编码字符的静态编码;
[0035] 写入模块,用于将所述待编码的字符和所述待编码字符替换后的静态编码存入所 述局部动态编码表。
[0036] -种基于哈夫曼编码的数据解压缩方法,包括:
[0037] 检测压缩文件中待解压的压缩码是否位于局部动态编码表中;
[0038] 若是,则利用所述局部动态编码表对待解压的压缩码进行解码;
[0039] 若否,则利用固定编码表对待解压的压缩码进行解码;
[0040] 将解码后的数据文件保存为原始数据。
[0041] -种基于哈夫曼编码的数据解压缩系统,包括:
[0042] 第二检测模块,用于检测压缩文件中待解压的压缩码是否位于局部动态编码表 中;若是,则触发第一解压缩模块;若否,则触发第二解压缩模块;
[0043] 所述第一解压缩模块,用于利用所述局部动态编码表对待解压的压缩码进行解 码;
[0044] 所述第二解压缩模块,用于利用固定编码表对待解压的压缩码进行解码;
[0045] 第二保存模块,用于将解码后的数据文件保存为原始数据。
[0046] 通过以上方案可知,本发明实施例提供的一种基于哈夫曼编码的数据压缩方法, 包括:从原始数据中选取目标数据;利用动态哈夫曼编码算法,生成与所述目标数据的各个 字符相对应的局部动态编码表;检测所述原始数据中待编码的字符是否位于所述局部动态 编码表中;若是,则利用所述局部动态编码表对字符进行编码;若否,则利用固定编码表对 字符进行编码;将编码后的数据文件与所述局部动态编码表一同保存为所述原始数据的压 缩文件;可见,本方案与静态哈夫曼编码相比,具有更好的压缩率;与传统动态哈夫曼编码 相比,本方案具有更快的压缩速度和更低的编码表存储开销。本发明还提供一种基于哈夫 曼编码的数据压缩系统、数据解压缩方法及系统,同样能达到上述技术效果。
【附图说明】
[0047] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0048] 图1为本发明实施例公开的一种基于哈夫曼编码的数据压缩方法流程示意图;
[0049] 图2(a)为本发明实施例公开的目标数据哈夫曼树的生成过程示意图;
[0050] 图2(b)为本发明实施例公开的目标数据哈夫曼树的生成过程示意图;
[0051] 图2(c)为本发明实施例公开的目标数据哈夫曼树的生成过程示意图;
[0052] 图3为本发明实施例公开的一种基于哈夫曼编码的数据压缩系统结构框图;
[0053] 图4为本发明实施例公开的一种基于哈夫曼编码的数据解压缩方法流程示意图;
[0054] 图5为本发明实施例公开的一种基于哈夫曼编码的数据解压缩系统结构框图。
【具体实施方式】
[0055] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0056] 本发明实施例公开了一种数据压缩方法及系统、解压缩方法及系统,以增加压缩 及解压缩速度,降低编码表的存储开销。
[0057] 参见图1,本发明实施例提供一种基于哈夫曼编码的数据压缩方法,其特征在于, 包括:
[0058] S101、从原始数据中选取目标数据;
[0059] 其中,所述从原始数据中选取目标数据,包括:
[0060] 获取所述原始数据的数据大小;
[0061] 根据所述数据大小,确定相应的目标数据选取规则;
[0062] 利用所述目标数据选取规则,从原始数据的预定位置开始选取目标数据。
[0063]具体的,本实施例中选取的目标数据是原始数据的局部数据,目标数据的选取规 则是指选取比例,即从原始数据中选取目标数据的比例。且在本实施例中,目标数据的选取 规则可以根据原始数据的数据大小进行选择;例如,若原始数据的数据大小为1GB,则选取 的目标数据可以为250MB。
[0064] 其中,利用所述目标数据选取规则,从原始数据的预定位置开始选取目标数据,包 括:
[0065] 利用所述目标数据选取规则,从原始数据的数据头部开始选取目标数据。
[0066] 具体的,在确定目标数据的数据大小后,要确定从原始数据的那里开始选取目标 数据。一般情况下,默认从原始数据的头部即开始,选取目标数据,但是也可以根据实际情 况改变选取位置,例如改为从原始数据的中间位置选取目标数据。
[0067] S102、利用动态哈夫曼编码算法,生成与所述目标数据的各个字符相对应的局部 动态编码表;
[0068] 其中,所述利用动态哈夫曼编码算法,生成与所述目标数据的各个字符相对应的 局部动态编码表,包括:
[0069] 扫描所述目标数据,统计所述目标数据中每个字符的频率,建立哈夫曼树,并生成 与所述目标数据的各个字符相对应的局部动态编码表。
[0070] S103、检测所述原始数据中待编码的字符是否位于所述局部动态编码表中;
[0071]若是,则执行S104、利用所述局部动态编码表对字符进行编码;
[0072]若否,则执行S105、利用固定编码表对字符进行编码;
[0073] 具体的,若待编码字符位于预先生成的局部动态编码表中,即该字符在扫描的部 分数据中曾经出现,此时,直接根据生成的编码表对该字符进行编码;若待编码字符不在预 先生成的编码表中,即该字符在扫描的部分数据中未出现过,此时,直接根据固定编码表进 行编码对该字符进行编码,即进行静态哈夫曼编码。
[0074] S106、将编码后的数据文件与所述局部动态编码表一同保存为所述原始数据的压 缩文件。
[0075]具体的,假设待压缩数据即原始数据为"beep beer",且选取的目标数据为 "be印",那么利用动态哈夫曼编码算法,生成局部动态编码表包括如下步骤:
[0076] 1、统计目标数据中b、e、p这三个字符出现的次数,统计结构如表1所示:
[0077] 表 1
[0078]
?〇〇79?~2、按照图2(&)、2(13)、2((3)所示,构造哈夫曼树,假设树的左支编码为0,右支编码_ 为1,得到各字符编码如表2:
[0080] 表 2
[0081]

[0082] 3、依次读入字符"beep",按表2对其进行编码,结果为:00 1 1 01;
[0083] 4、读入字符(空格),表2中不存在该字符,则按固定编码表进行编码,假设为 011;
[0084] 5、依次读入字符"bee",按表2对其进行编码,结果为:00 1 1;
[0085] 6、读入字符"r",表2中不存在该字符,则按固定编码表进行编码,假设为101;
[0086] 7、数据处理完毕,得到"beep beer"的压缩编码:00 1 1 01 011 00 1 1 101 〇 [0087] 最后将保存压缩编码:00 1 1 01 011 00 1 1 101的文件和局部动态编码表一同 保存为所述原始数据的压缩文件。
[0088] 其中,若检测到所述原始数据中待编码的字符不在所述局部动态编码表,且待编 码的字符的静态编码与所述局部动态编码表中目标字符的动态编码相同,则用所述目标字 符的静态编码替换所述待编码字符的静态编码;
[0089] 将所述待编码的字符和所述待编码字符替换后的静态编码存入所述局部动态编 码表。
[0090] 具体的,参见表3,为字符"r"和"p"静态哈夫曼编码:
[0091] 表3
[0092]
[0093] 可以看出,字符"r"不在表2的局部动态编码表,但是"r"的静态哈夫曼编码01与 "P"的动态哈夫曼编码01发生冲突,需要进行替换,因此将"r"的哈夫曼编码替换01为"p"的 静态哈夫曼编码101,并将替换后的"r"的哈夫曼编码加入文件的局部动态哈夫曼编码表, 得到更新后的局部动态哈夫曼编码表如表4所示,相应的在对压缩数据进行解码时,则是根 据更新后的表4所示的局部动态编码表对其进行解码。
[0094] 表 4
[0095]
[0096] 下面对本发明实施例提供的数据压缩系统进行介绍,下文描述的数据压缩系统与 上文描述的数据压缩方法可以相互参照。
[0097] 参见图3,本发明实施例提供的一种基于哈夫曼编码的数据压缩系统,包括:
[0098] 目标数据选取模块101,用于从原始数据中选取目标数据;
[0099] 局部动态编码表生成模块102,用于利用动态哈夫曼编码算法,生成与所述目标数 据的各个字符相对应的局部动态编码表;
[0100] 第一检测模块103,用于检测所述原始数据中待编码的字符是否位于所述局部动 态编码表中;若是,则触发第一编码模块104;若否,则触发第二编码模块105;
[0101]所述第一编码模块104,用于利用所述局部动态编码表对字符进行编码;
[0102] 所述第二编码模块105,用于利用固定编码表对字符进行编码;
[0103] 第一保存模块106,用于将编码后的数据文件与所述局部动态编码表一同保存为 所述原始数据的压缩文件。
[0104] 基于上述技术方案,所述目标数据选取模块101包括:
[0105] 数据大小获取单元,用于获取所述原始数据的数据大小;
[0106] 选取规则确定单元,用于根据所述数据大小,确定相应的目标数据选取规则;
[0107] 目标数据选取单元,用于利用所述目标数据选取规则,从原始数据的预定位置开 始选取目标数据。
[0108] 基于上述技术方案,所述目标数据选取单元利用所述目标数据选取规则,从原始 数据的数据头部开始选取目标数据。
[0109] 基于上述技术方案,所述局部动态编码表生成模块102通过扫描所述目标数据,统 计所述目标数据中每个字符的频率,建立哈夫曼树,并生成与所述目标数据的各个字符相 对应的局部动态编码表。
[0110] 基于上述技术方案,本方案还包括:
[0111] 替换模块,用于在检测到所述原始数据中待编码的字符不在所述局部动态编码 表,且待编码的字符的静态编码与所述局部动态编码表中目标字符的动态编码相同时,用 所述目标字符的静态编码替换所述待编码字符的静态编码;
[0112] 写入模块,用于将所述待编码的字符和所述待编码字符替换后的静态编码存入所 述局部动态编码表。
[0113] 本发明实施例提供的一种基于哈夫曼编码的数据压缩方法及系统,包括:从原始 数据中选取目标数据;利用动态哈夫曼编码算法,生成与所述目标数据的各个字符相对应 的局部动态编码表;检测所述原始数据中待编码的字符是否位于所述局部动态编码表中; 若是,则利用所述局部动态编码表对字符进行编码;若否,则利用固定编码表对字符进行编 码;将编码后的数据文件与所述局部动态编码表一同保存为所述原始数据的压缩文件;可 见,本方案与静态哈夫曼编码相比,具有更好的压缩率;与传统动态哈夫曼编码相比,本方 案具有更快的压缩速度和更低的编码表存储开销。
[0114] 参见图4,本发明实施例提供一种基于哈夫曼编码的数据解压缩方法,包括:
[0115] S201、检测压缩文件中待解压的压缩码是否位于局部动态编码表中;
[0116] 若是,则执行S202、利用所述局部动态编码表对待解压的压缩码进行解码;
[0117] 若否,则执行S203、利用固定编码表对待解压的压缩码进行解码;
[0118] 具体的,基于哈夫曼编码的解压缩过程就是通过查表,将哈夫曼编码解码为原字 符编码的过程。若待解压缩编码位于压缩文件保存的动态编码表中,直接查表进行解码;待 解压缩编码不在压缩文件保存的动态编码表,根据固定编码表查表进行解码。
[0119] S204、将解码后的数据文件保存为原始数据。
[0120] 具体的,基于上述实施例,对压缩文件中的压缩编码进行解压码包括如下步骤:
[0121] 1、依次读入编码"00 1 1 01",按表2对其进行解码,结果为:beep;
[0122] 2、读入编码"011",表2中没有该编码,则按固定编码表进行解码,得到字符'(空 格);
[0123] 3、依次读入编码"00 1 1",按表2对其进行解码,结果为:bee;
[0124] 4、读入编码"101",表2中没有该编码,则按固定编码表进行解码,得到字符"r" ;
[0125] 5、数据处理完毕,得到解压缩后的原始数据为:beep beer。
[0126] 需要说明的是,在上述实施例中通过将"r"的哈夫曼编码替换01为"p"的静态哈夫 曼编码101,并将"r"的哈夫曼编码加入文件的局部动态哈夫曼编码表后生成的压缩文件 的解码方式与本实施例提供的解码方式相同,再此就不再赘述。
[0127] 下面对本发明实施例提供的数据解压缩系统进行介绍,下文描述的数据解压缩系 统与上文描述的数据解压缩方法可以相互参照。
[0128] 参见图5,本发明实施例提供的一种基于哈夫曼编码的数据解压缩系统,包括:
[0129] 第二检测模块201,用于检测压缩文件中待解压的压缩码是否位于局部动态编码 表中;若是,则触发第一解压缩模块202;若否,则触发第二解压缩模块203;
[0130] 所述第一解压缩模块202,用于利用所述局部动态编码表对待解压的压缩码进行 解码;
[0131]所述第二解压缩模块203,用于利用固定编码表对待解压的压缩码进行解码;
[0132] 第二保存模块204,用于将解码后的数据文件保存为原始数据。
[0133] 本发明实施例提供的一种基于哈夫曼编码的数据解压缩方法及系统,包括:检测 压缩文件中待解压的压缩码是否位于局部动态编码表中;若是,则利用所述局部动态编码 表对待解压的压缩码进行解码;若否,则利用固定编码表对待解压的压缩码进行解码;将解 码后的数据文件保存为原始数据。可见,本方案与静态哈夫曼编码相比,具有更好的压缩 率;与传统动态哈夫曼编码相比,本方案具有更快的压缩速度。
[0134] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他 实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0135] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的 一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明 将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一 致的最宽的范围。
【主权项】
1. 一种基于哈夫曼编码的数据压缩方法,其特征在于,包括: 从原始数据中选取目标数据; 利用动态哈夫曼编码算法,生成与所述目标数据的各个字符相对应的局部动态编码 表; 检测所述原始数据中待编码的字符是否位于所述局部动态编码表中; 若是,则利用所述局部动态编码表对字符进行编码;若否,则利用固定编码表对字符进 行编码; 将编码后的数据文件与所述局部动态编码表一同保存为所述原始数据的压缩文件。2. 根据权利要求1所述的数据压缩方法,其特征在于,所述从原始数据中选取目标数 据,包括: 获取所述原始数据的数据大小; 根据所述数据大小,确定相应的目标数据选取规则; 利用所述目标数据选取规则,从原始数据的预定位置开始选取目标数据。3. 根据权利要求1所述的数据压缩方法,其特征在于,利用所述目标数据选取规则,从 原始数据的预定位置开始选取目标数据,包括: 利用所述目标数据选取规则,从原始数据的数据头部开始选取目标数据。4. 根据权利要求1-3中任意一项所述的数据压缩方法,其特征在于, 若检测到所述原始数据中待编码的字符不在所述局部动态编码表,且待编码的字符的 静态编码与所述局部动态编码表中目标字符的动态编码相同,则用所述目标字符的静态编 码替换所述待编码字符的静态编码; 将所述待编码的字符和所述待编码字符替换后的静态编码存入所述局部动态编码表。5. -种基于哈夫曼编码的数据压缩系统,其特征在于,包括: 目标数据选取模块,用于从原始数据中选取目标数据; 局部动态编码表生成模块,用于利用动态哈夫曼编码算法,生成与所述目标数据的各 个字符相对应的局部动态编码表; 第一检测模块,用于检测所述原始数据中待编码的字符是否位于所述局部动态编码表 中;若是,则触发第一编码模块;若否,则触发第二编码模块; 所述第一编码模块,用于利用所述局部动态编码表对字符进行编码; 所述第二编码模块,用于利用固定编码表对字符进行编码; 第一保存模块,用于将编码后的数据文件与所述局部动态编码表一同保存为所述原始 数据的压缩文件。6. 根据权利要求5所述的数据压缩系统,其特征在于,所述目标数据选取模块包括: 数据大小获取单元,用于获取所述原始数据的数据大小; 选取规则确定单元,用于根据所述数据大小,确定相应的目标数据选取规则; 目标数据选取单元,用于利用所述目标数据选取规则,从原始数据的预定位置开始选 取目标数据。7. 根据权利要求6所述的数据压缩系统,其特征在于,所述目标数据选取单元利用所述 目标数据选取规则,从原始数据的数据头部开始选取目标数据。8. 根据权利要求5-6中任意一项所述的数据压缩系统,其特征在于,还包括: 替换模块,用于在检测到所述原始数据中待编码的字符不在所述局部动态编码表,且 待编码的字符的静态编码与所述局部动态编码表中目标字符的动态编码相同时,用所述目 标字符的静态编码替换所述待编码字符的静态编码; 写入模块,用于将所述待编码的字符和所述待编码字符替换后的静态编码存入所述局 部动态编码表。9. 一种基于哈夫曼编码的数据解压缩方法,其特征在于,包括: 检测压缩文件中待解压的压缩码是否位于局部动态编码表中; 若是,则利用所述局部动态编码表对待解压的压缩码进行解码; 若否,则利用固定编码表对待解压的压缩码进行解码; 将解码后的数据文件保存为原始数据。10. -种基于哈夫曼编码的数据解压缩系统,其特征在于,包括: 第二检测模块,用于检测压缩文件中待解压的压缩码是否位于局部动态编码表中;若 是,则触发第一解压缩模块;若否,则触发第二解压缩模块; 所述第一解压缩模块,用于利用所述局部动态编码表对待解压的压缩码进行解码; 所述第二解压缩模块,用于利用固定编码表对待解压的压缩码进行解码; 第二保存模块,用于将解码后的数据文件保存为原始数据。
【文档编号】H03M7/30GK105933009SQ201610339070
【公开日】2016年9月7日
【申请日】2016年5月19日
【发明人】赵雅倩
【申请人】浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1