CN111510156A - 一种基于分段的哈夫曼动态压缩及解压大文件的方法 - Google Patents

一种基于分段的哈夫曼动态压缩及解压大文件的方法 Download PDF

Info

Publication number
CN111510156A
CN111510156A CN202010492510.0A CN202010492510A CN111510156A CN 111510156 A CN111510156 A CN 111510156A CN 202010492510 A CN202010492510 A CN 202010492510A CN 111510156 A CN111510156 A CN 111510156A
Authority
CN
China
Prior art keywords
node
data
file
huffman
interval
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010492510.0A
Other languages
English (en)
Inventor
程敏
何文强
鲍康胜
樊高雁
谢飞
储修杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hefei No6 High School
Hefei Normal University
Original Assignee
Hefei No6 High School
Hefei Normal University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hefei No6 High School, Hefei Normal University filed Critical Hefei No6 High School
Priority to CN202010492510.0A priority Critical patent/CN111510156A/zh
Publication of CN111510156A publication Critical patent/CN111510156A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明公开了一种基于分段的哈夫曼动态压缩及解压大文件的方法,涉及文件压缩处理技术领域,该方法针对较大文件进行压缩传输时传统静态和动态哈夫曼编码算法压缩耗时都较长的技术问题,通过将文件拆分,在不影响哈夫曼树构建的情况下分段输出编码后数据。该方法相比较现有技术,能够明显减少静态和动态哈夫曼编码压缩大文件时耗时过长的技术问题。

Description

一种基于分段的哈夫曼动态压缩及解压大文件的方法
技术领域
本发明涉及文件压缩处理技术领域,具体涉及一种基于分段的哈夫曼动态压缩及解压大文件的方法。
背景技术
文本,动画,声音,图像,视频等多种媒体信息在经过数字化处理后数据量非常大。如果不进行数据压缩处理,使用这些文件对计算机的要求非常高,消耗的时间特别长。经过压缩之后可以适当减小文件大小,减少传输时长。
哈夫曼编码是熵编码法的一种,是Huffman于1952年提出的一种编码方法。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。树的带权路径长度就是树中所有的叶结点的权重乘以其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权重Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。
哈夫曼编码可分为静态哈夫曼编码和动态哈夫曼编码,其中:
静态哈夫曼编码是一种变长编码,它根据字符出现的概率来构造平均长度最短的编码。获取一段数据的哈夫曼编码,需要用到三个步骤:第1步,扫描需编码的数据,统计原数据中各字符出现的概率;第2步,利用得到的概率值创建哈夫曼树;第3步,对哈夫曼树进行编码,并把编码后得到的码字存储起来。静态解压缩算法需要已知一棵哈夫曼树,初始节点设为哈夫曼树的根节点,读入二进制文件。当读到二进制0时节点转化为当前节点的左子节点,如果不是叶子节点则继续读取下一位二进制,如果是叶子节点则输出该节点存储的字符后设置当前节点为根节点。当读到二进制1时节点转化为当前节点的右子节点,如果不是叶子节点则读取下一位二进制,如果是叶子节点则输出数据后设置节点为根节点。静态算法在压缩过程中的优点:实现简单,压缩时间短。静态压缩的优点是运行较快,但是需要将节点这个类序列化后储存根节点用于解压缩,也就是说,在文件较小时,压缩后的文件加上根节点序列化后的文件所占用的空间比原文件大,解压缩时必须先知道哈夫曼树具体构造。
动态哈夫曼编码(Dynamic Huffman coding)是基于哈夫曼编码的自适应编码技术,可以动态地收集和更新符号的概率(频率),可以对未出现的字节构建子树并与原来的树合并,输出编码和重构,并对已经出现的字节输出编码并重构树。原始的树为一个单独的NYT节点,读取由压缩后的文件转化成的二进制数据。二进制数字为0时,将节点设置为其左子节点,若左子节点为叶子节点(含有数据且有编码),则输出数据并从叶子节点进行重构以及将节点转化为树的根节点。若左子节点为NYT或空,则用包含新NYT和数据的子树替换原NYT,,然后将原NYT与新叶节点赋以频率一,改变当前节点为原NYT节点。之后判断当前节点是否是根节点,如果是,则结束,开始检查跳过一字节数据的下一位二进制。如果不是,从当前节点开始对部分树进行重构,并将当前节点设置为根节点。当二进制数字为1时,与0时相似,不多赘述。动态哈夫曼编码的优点是不需要哈夫曼树的根节点,只需压缩后的文件就能恢复源文件,缺点是运行较慢,时间成本和空间成本较高。
目前,较小的文件采用动态哈夫曼编码或静态哈夫曼编码进行压缩,耗时都较小,且差距不大。但是在实现静态哈夫曼编码和动态哈夫曼算法时,由于使用string储存哈夫曼编码的二进制,每个字节生成编码后都需要对string进行修改,如果字节数目过多,会造成string修改的时间过长。因此,在进行大文件压缩传输时,现有哈夫曼编码的静态压缩和动态压缩耗时都很长,且动态哈夫曼编码较静态哈夫曼编码的耗时更长。
发明内容
为了解决以上问题,本发明提供了一种基于分段的哈夫曼动态压缩及解压大文件的方法,以解决现有动态哈夫曼编码压缩大文件时耗时过长的技术问题。
本发明采用以下技术方案来实现:
一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,包括以下步骤:
步骤S11:事先设置好一个间隔的数据长度interval和文件分段的间隔长度L;
步骤S12:每间隔一长度L读取一段长度为interval的待压缩文件数据,获得若干数据段,利用动态哈夫曼编码算法,对各数据段分别进行逐字节编码,获得该数据段对应的二进制数据;剩下未编码的文件数据合并后,若长度不大于interval则作为一个数据段直接编码,若大于interval,则重复间隔分段的方法获得数据段后编码,直至所有文件数据都编码完成;
步骤S13:将编码后的二进制数据存入压缩文件中,并输出最后的不足八位的二进制数据,与下一段编码的不足八位的二进制数据一起进入下一循环;
步骤S14:重复步骤S12-S13,步骤S13输出的不足八位的二进制数据与步骤S12的新编码数据结合后存入压缩文件,直至最后一个循环,若最后一个循环编码后的二进制数据位数不是8的整数倍,则添零补足八位后将数据写入压缩文件中,完成压缩。
作为本发明的进一步优化方案,所述步骤S12中,动态哈夫曼编码算法的方法,步骤包括:
统计数据段中各字节出现的频率,构建仅含一个NYT(not yet transmmited)节点且权重为零的初始树;
判断当前字节是否是第一次出现,若是,用包含新NYT和数据节点的子树替换原NYT节点并且从原NYT的父节点开始重构哈夫曼树;若不是,则从该节点开始重构哈夫曼树。
作为本发明的进一步优化方案,所述重构哈夫曼树的方法为:
首先将相同频率的节点按照权重做排序,依次判断当前节点是不是同频率的节点中权重最高的,若是或者与权重最高的节点为父子节点的关系,则该节点的频率直接加一;若不是,则与权重最高的节点交换位置和权重,再进行频率加一;
更改节点为当前节点的父节点,直至重构到树顶。
作为本发明的进一步优化方案,所述interval的取值范围为100-500字节。
作为本发明的进一步优化方案,所述大文件指10兆字节以上的文件。
本发明还提供了一种基于上述分段的哈夫曼动态压缩大文件的解压方法,包括以下步骤:
步骤S21:事先设置好一个间隔的数据长度interval’和文件分段的间隔长度L’;
步骤S22:每间隔一长度L’读取一段长度为interval’的二进制数据,根据动态哈夫曼编码算法的解码方法,对二进制数据进行解码;
步骤S23:将解码后的二进制数据输出,并返回未能解码出数据的二进制数据到下一个循环;
步骤S24:重复步骤S22-S23,直至所有二进制数据都解码输出。
本发明的有益效果是:本发明提供了一种基于分段的哈夫曼动态压缩及解压大文件的方法,该方法通过将文件拆分,再在不影响哈夫曼树构建的情况下分段输出编码后数据,能够明显减少动态哈夫曼编码压缩大文件时耗时过长的技术问题。
附图说明
图1为分段哈夫曼动态压缩大文件的流程图;
图2为分段哈夫曼动态解压大文件的流程图;
图3为不同间隔下静态哈夫曼编码效率比较图;
图4为不同间隔下动态哈夫曼编码效率比较图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
实施例1
本实施例提供了一种基于分段的哈夫曼动态压缩大文件的方法,如图1所示,包括以下步骤:
步骤S11:事先设置好一个间隔的数据长度interval和文件分段的间隔长度L。
步骤S12:每间隔一长度L读取一段长度为interval的待压缩文件数据,获得若干数据段,利用动态哈夫曼编码算法,对各数据段分别进行逐字节编码,获得该数据段对应的二进制数据。其中:
动态哈夫曼编码算法的方法,步骤包括:
统计数据段中各字节出现的频率,构建仅含一个NYT节点且权重为零的初始树;
判断当前字节是否是第一次出现,若是,用包含新NYT和数据节点的子树替换原NYT节点并且从原NYT的父节点开始重构哈夫曼树;若不是,则从该节点开始重构哈夫曼树。
哈夫曼树的重构从当前节点开始,方法包括:
首先将相同频率的节点按照权重做排序,依次判断当前节点是不是同频率的节点中权重最高的,若是或者与权重最高的节点为父子节点的关系,则该节点的频率直接加一;若不是,则与权重最高的节点交换位置和权重,再进行频率加一;
更改节点为当前节点的父节点,直至重构到树顶。
为了实现重构,必须对树的所有节点进行统计,根据frequency作为分组依据形成一张二维数组,如表1所示:
表1:table表示意图
Figure BDA0002521603130000041
步骤S13:在遍历完最后一个字节后,将编码的二进制数据存入压缩文件中。由于一个字节占八位二进制数据,一般情况下,最后不足八位的二进制数据需要添零补足,本发明在存入压缩文件时,若最后几位的二进制数据不足一字节的,就暂存,与下一段编码的不足八位的二进制数据一起进入下一循环;
步骤S14:重复步骤S12-S13,步骤S13输出的不足八位的二进制数据与步骤S12的新编码数据结合后存入压缩文件,直至最后一个循环,若最后一个循环编码后的二进制数据位数不是8的整数倍,则添零补足八位后将数据写入压缩文件中,完成压缩。
本实施例还提供了一种基于上述分段的哈夫曼动态压缩大文件的解压方法,如图2所示,包括以下步骤:
步骤S21:事先设置好一个间隔的数据长度interval’和文件分段的间隔长度L’;
步骤S22:每间隔一长度L’读取一段长度为interval’的二进制数据,根据动态哈夫曼编码算法的解码方法,对二进制数据进行解码;
步骤S23:将解码后的二进制数据输出。在动态哈夫曼编码算法的解码过程中,根据压缩后数据的二进制来还原树,由于文件是分段还原,会出现末尾一段二进制数据不能解码出一个字节的情况,需要与下一段的二进制数据结合还原出文件数据,因此可以设置一个变量来记录没有解码出数据的二进制数据,并将这些未能解码的二进制数据合并一起进入下一个解码循环。
步骤S24:重复步骤S22-S23,直至所有二进制数据都解码输出。
为了验证本发明压缩效果,选取两个文件进行测试,文件1为10253955字节长度的文本文件,文件2为11837719字节长度的mp3文件,压缩过程均为单线程。通过设置不同的interval来观察分段对文件压缩时间的影响,当interval大于文件大小时即文件一次完成编码和输出数据。
不同间隔下静态哈夫曼编码效率和动态哈夫曼编码效率如图3、4所示,试验结果可以看出,合适的interval间隔可明显提高压缩的效率,其中动态哈夫曼编码压缩的interval取值最优为100-500个字节,静态哈夫曼编码压缩的interval取值为200-400个字节。当间隔过小或者过大都会影响文件的压缩效率。
以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (6)

1.一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,包括以下步骤:
步骤S11:事先设置好一个间隔的数据长度interval和文件分段的间隔长度L;
步骤S12:每隔一长度L读取一段长度为interval的待压缩文件数据,获得若干数据段,利用动态哈夫曼编码算法,对各数据段分别进行逐字节编码,获得该数据段对应的二进制数据;
步骤S13:将编码后的二进制数据存入压缩文件中,并输出最后的不足八位的二进制数据,与下一段编码的不足八位的二进制数据一起进入下一循环;
步骤S14:重复步骤S12-S13,步骤S13输出的不足八位的二进制数据与步骤S12的新编码数据结合后存入压缩文件,直至最后一个循环,若最后一个循环编码后的二进制数据位数不是8的整数倍,则添零补足八位后将数据写入压缩文件中,完成压缩。
2.根据权利要求1所述的一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,所述步骤S12中,动态哈夫曼编码算法的方法,步骤包括:
统计数据段中各字节出现的频率,构建仅含一个NYT节点且权重为零的初始树;
判断当前字节是否是第一次出现,若是,用包含新NYT和数据节点的子树替换原NYT节点并且从原NYT的父节点开始重构哈夫曼树;若不是,则从该节点开始重构哈夫曼树。
3.根据权利要求2所述的一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,所述重构哈夫曼树的方法为:
判断当前节点是不是同频率的节点中权重最高的,若是或者与权重最高的节点为父子节点的关系,则该节点的频率直接加一;若不是,则与权重最高的节点交换位置和权重,再进行频率加一;
更改节点为当前节点的父节点,直至重构到树顶。
4.根据权利要求1所述的一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,所述interval的取值范围为100-500字节。
5.根据权利要求1所述的一种基于分段的哈夫曼动态压缩大文件的方法,其特征在于,所述大文件指10兆字节以上的文件。
6.一种基于权利要求1-5任一所述的分段的哈夫曼动态压缩大文件的解压方法,其特征在于,包括以下步骤:
步骤S21:事先设置好一个间隔的数据长度interval’和文件分段的间隔长度L’;
步骤S22:每间隔一长度L’读取一段长度为interval’的二进制数据,根据动态哈夫曼编码算法的解码方法,对二进制数据进行解码;
步骤S23:将解码后的二进制数据输出,并返回未能解码出数据的二进制数据到下一个循环;
步骤S24:重复步骤S22-S23,直至所有二进制数据都解码输出。
CN202010492510.0A 2020-06-03 2020-06-03 一种基于分段的哈夫曼动态压缩及解压大文件的方法 Pending CN111510156A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010492510.0A CN111510156A (zh) 2020-06-03 2020-06-03 一种基于分段的哈夫曼动态压缩及解压大文件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010492510.0A CN111510156A (zh) 2020-06-03 2020-06-03 一种基于分段的哈夫曼动态压缩及解压大文件的方法

Publications (1)

Publication Number Publication Date
CN111510156A true CN111510156A (zh) 2020-08-07

Family

ID=71864495

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010492510.0A Pending CN111510156A (zh) 2020-06-03 2020-06-03 一种基于分段的哈夫曼动态压缩及解压大文件的方法

Country Status (1)

Country Link
CN (1) CN111510156A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113381768A (zh) * 2021-08-11 2021-09-10 苏州浪潮智能科技有限公司 一种哈夫曼校正编码方法、系统及相关组件
CN113612516A (zh) * 2021-07-13 2021-11-05 深圳震有科技股份有限公司 一种卫星通信数据包的压缩测试方法、系统及设备
CN116346482A (zh) * 2023-04-04 2023-06-27 扬州万方科技股份有限公司 一种基于前缀编码的数据压缩和加密方法
CN117040542A (zh) * 2023-10-08 2023-11-10 广东佰林电气设备厂有限公司 一种智能综合配电箱能耗数据处理方法
CN117375631A (zh) * 2023-12-07 2024-01-09 深圳市丽台电子有限公司 一种基于哈夫曼编码的快速编码方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080144728A1 (en) * 2003-03-28 2008-06-19 Tarari, Inc. Parallelized Dynamic Huffman Decoder
CN102970043A (zh) * 2012-11-14 2013-03-13 无锡芯响电子科技有限公司 一种基于gzip的压缩硬件系统及其加速方法
CN108628898A (zh) * 2017-03-21 2018-10-09 中国移动通信集团河北有限公司 数据入库的方法、装置和设备
CN109120272A (zh) * 2018-07-16 2019-01-01 南京航空航天大学 一种面向离散制造车间的rfid标签数据压缩方法
CN110728725A (zh) * 2019-10-22 2020-01-24 苏州速显微电子科技有限公司 一种硬件友好的面向实时系统无损纹理压缩算法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080144728A1 (en) * 2003-03-28 2008-06-19 Tarari, Inc. Parallelized Dynamic Huffman Decoder
CN102970043A (zh) * 2012-11-14 2013-03-13 无锡芯响电子科技有限公司 一种基于gzip的压缩硬件系统及其加速方法
CN108628898A (zh) * 2017-03-21 2018-10-09 中国移动通信集团河北有限公司 数据入库的方法、装置和设备
CN109120272A (zh) * 2018-07-16 2019-01-01 南京航空航天大学 一种面向离散制造车间的rfid标签数据压缩方法
CN110728725A (zh) * 2019-10-22 2020-01-24 苏州速显微电子科技有限公司 一种硬件友好的面向实时系统无损纹理压缩算法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
文国知: "基于C语言的自适应Huffman编码算法分析及实现研究", 《武汉工业学院学报》 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113612516A (zh) * 2021-07-13 2021-11-05 深圳震有科技股份有限公司 一种卫星通信数据包的压缩测试方法、系统及设备
CN113381768A (zh) * 2021-08-11 2021-09-10 苏州浪潮智能科技有限公司 一种哈夫曼校正编码方法、系统及相关组件
CN113381768B (zh) * 2021-08-11 2021-11-09 苏州浪潮智能科技有限公司 一种哈夫曼校正编码方法、系统及相关组件
WO2023015831A1 (zh) * 2021-08-11 2023-02-16 苏州浪潮智能科技有限公司 一种哈夫曼校正编码方法、系统及相关组件
US11881873B1 (en) 2021-08-11 2024-01-23 Inspur Suzhou Intelligent Technology Co., Ltd. Huffman correction encoding method and system, and relevant components
CN116346482A (zh) * 2023-04-04 2023-06-27 扬州万方科技股份有限公司 一种基于前缀编码的数据压缩和加密方法
CN117040542A (zh) * 2023-10-08 2023-11-10 广东佰林电气设备厂有限公司 一种智能综合配电箱能耗数据处理方法
CN117040542B (zh) * 2023-10-08 2024-01-12 广东佰林电气设备厂有限公司 一种智能综合配电箱能耗数据处理方法
CN117375631A (zh) * 2023-12-07 2024-01-09 深圳市丽台电子有限公司 一种基于哈夫曼编码的快速编码方法
CN117375631B (zh) * 2023-12-07 2024-02-06 深圳市丽台电子有限公司 一种基于哈夫曼编码的快速编码方法

Similar Documents

Publication Publication Date Title
CN111510156A (zh) 一种基于分段的哈夫曼动态压缩及解压大文件的方法
EP1147612B1 (en) Code book construction for variable to variable length entropy encoding
US6100825A (en) Cluster-based data compression system and method
CN107483059B (zh) 一种基于动态霍夫曼树的多路数据编解码方法及装置
US11677416B2 (en) Hardware implementable data compression/decompression algorithm
US9698819B1 (en) Huffman code generation
US6573847B1 (en) Multi-table mapping for huffman code decoding
CN116527775A (zh) 使用分区和无关位消除的数据压缩技术
CN112685404A (zh) 应用于键树的编码方法、应用于键树的解码方法与电子装置
Niemi et al. Burrows‐Wheeler post‐transformation with effective clustering and interpolative coding
CN113346913A (zh) 使用减量的出现次数的数据压缩
CN112101548A (zh) 数据压缩方法及装置、数据解压方法及装置、电子设备
US6794999B1 (en) Resilient parameterized prefix codes for adaptive coding
US20240137045A1 (en) Noniterative entropy coding
CN112865804B (zh) 三值神经网络稀疏性权重的压缩计算单元
CN114095036B (zh) 一种动态哈夫曼编码的码长生成装置
US12019921B2 (en) Apparatus for processing received data
WO2024113382A1 (zh) 图像数据dna存储方法、系统、电子设备及存储介质
US20240319923A1 (en) Apparatus for processing received data
CA2998336A1 (en) Method of data compression
CN115865098A (zh) 基于Huffman编码的数据压缩方法
Gillis A Method for Recursive Data Compression
KR101270633B1 (ko) 복수 호프만 테이블을 적용하여 고속 처리가 가능한 멀티미디어용 호프만 디코딩 방법 및 장치
JPH0377708B2 (zh)
CN112615627A (zh) 基于改进行程长度编码的动态压缩方法及动态压缩系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20200807

RJ01 Rejection of invention patent application after publication