CN116505954B - 一种霍夫曼编码方法、系统、装置及介质 - Google Patents

一种霍夫曼编码方法、系统、装置及介质 Download PDF

Info

Publication number
CN116505954B
CN116505954B CN202310769907.3A CN202310769907A CN116505954B CN 116505954 B CN116505954 B CN 116505954B CN 202310769907 A CN202310769907 A CN 202310769907A CN 116505954 B CN116505954 B CN 116505954B
Authority
CN
China
Prior art keywords
binary tree
nodes
layer
depth value
initial
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.)
Active
Application number
CN202310769907.3A
Other languages
English (en)
Other versions
CN116505954A (zh
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.)
Shenzhen Dapu Microelectronics Co Ltd
Original Assignee
Shenzhen Dapu Microelectronics Co Ltd
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 Shenzhen Dapu Microelectronics Co Ltd filed Critical Shenzhen Dapu Microelectronics Co Ltd
Priority to CN202310769907.3A priority Critical patent/CN116505954B/zh
Publication of CN116505954A publication Critical patent/CN116505954A/zh
Application granted granted Critical
Publication of CN116505954B publication Critical patent/CN116505954B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Abstract

本发明公开了一种霍夫曼编码方法、系统、装置及介质,适用于数据压缩技术领域。应用于霍夫曼编码电路,在构建二叉树、调整二叉树的过程中充分利用硬件的并行运算,将二叉树的深度值进行约束得到预设二叉树深度值,以此限定字符编码最大长度,并在较短的时间内完成二叉树的树结构调整以此实现霍夫曼编码。整个编码过程不需要引入额外的时间开销;由于对二叉树的深度进行约束,在超出预设二叉树深度值的情况下,先确定初始二叉树的待调整节点的数量;根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略调整初始二叉树,降低霍夫曼解码的复杂度,以提高霍夫曼解码效率,节省硬件资源。

Description

一种霍夫曼编码方法、系统、装置及介质
技术领域
本发明涉及数据压缩技术领域,特别是涉及一种霍夫曼编码方法、系统、装置及介质。
背景技术
霍夫曼(huffman)编码是一种基于最小冗余编码的压缩算法,如果一组数据中字符出现的概率以一种编码方式表示该字符,从而减少数据需要的存储空间。这种特殊的编码方式规则为:用较少的位对出现频率高的符号编码,用较多的位对出现频率低的符号编码。
整个huffman编码压缩数据,需要根据字符出现频率构建标准的二叉树,其二叉树的深度可以到255层,字符最长编码会到255,同时会使得硬件编码实现过程中导致硬件资源开销较大,也会增加huffman编码的复杂度,进而影响huffman解码的效率和资源消耗问题。
因此,如何节省硬件资源的开销以及降低huffman编码的复杂度是本领域技术人员亟需要解决的。
发明内容
本发明的目的是提供一种霍夫曼编码方法、系统、装置及介质,利用硬件的并行运算,限定字符编码最大长度,降低霍夫曼解码的复杂度,以提高霍夫曼解码效率,节省硬件资源。
为解决上述技术问题,本发明提供一种霍夫曼编码方法,应用于霍夫曼编码电路,所述方法包括:
获取目标数据和预设二叉树深度值;
基于频率分布对所述目标数据构建初始二叉树,并获取所述初始二叉树的初始深度值;
在所述初始深度值超出所述预设二叉树深度值的情况下,根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量;
根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,并根据所述二叉树调整策略调整所述初始二叉树;
其中,所述空洞节点是将所述初始二叉树的第一层至所述预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至所述预设二叉树深度值所在层后额外产生的节点。
优选地,所述预设二叉树深度值至少由霍夫曼编码的压缩率确定得到。
优选地,所述根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量,包括:
获取超出所述预设二叉树深度值所在层之外对应的父节点和字符节点;
将所述父节点和所述字符节点的数量和作为所述初始二叉树的所述待调整节点的数量。
优选地,所述空洞节点包括理论空洞节点和实际空洞节点,所述根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,包括:
将所述待调整节点的数量除以2以确定所述理论空洞节点的数量;
自所述预设二叉树深度值所在层的前一层开始至所述初始二叉树的第一层中的各叶子节点,分别移动至所述预设二叉树深度值所在层,并在所述预设二叉树深度值所在层产生所述实际空洞节点以确定所述实际空洞节点的数量;
根据所述待调整节点的数量、所述理论空洞节点的数量和所述实际空洞节点的数量的关系确定所述二叉树调整策略。
优选地,所述实际空洞节点的数量的确定过程,包括:
将所述预设二叉树深度值分别与所述初始二叉树的各层序号作差得到各层对应的层差值;
将各所述层对应的层差值作为幂指数,2作为变量以得到各所述层在所述预设二叉树深度值所在层构造的初始实际空洞节点的数量;
将各所述层的所述初始实际空洞节点的数量减1得到各所述层在所述预设二叉树深度值所在层构造的各层实际空洞节点的数量;
将各所述层实际空洞节点的数量进行加和处理得到所述实际空洞节点的数量。
优选地,所述根据所述待调整节点的数量、所述理论空洞节点的数量和所述实际空洞节点的数量的关系确定所述二叉树调整策略,包括:
判断所述实际空洞节点的数量是否大于所述理论空洞节点的数量;
若是,则将所述实际空洞节点的数量与所述理论空洞节点的数量进行作差处理得到空洞节点差值;
将所述空洞节点差值作为调整的叶子节点个数;
根据所述调整的叶子节点个数对所述待调整节点对应的叶子节点移动至所述预设二叉树深度值所在层的前一层以确定初始二叉树调整策略;
根据所述初始二叉树调整策略对所述初始二叉树进行调整得到调整后的所述初始二叉树;
根据调整后的所述初始二叉树与当前空洞节点个数的关系确定所述二叉树调整策略。
优选地,所述根据调整后的所述初始二叉树与当前空洞节点个数的关系确定所述二叉树调整策略,包括:
在调整后的所述初始二叉树中确定所述当前空洞节点个数;
若所述当前空洞节点个数不为0,将当前空洞节点所在层对应的字符节点移动至所述当前空洞节点所在层的前一层;
根据频率从大到小排序顺序对所述预设二叉树深度值所在层内的所述目标数据的频率进行排序,并选取目标频率对应的所述目标数据的字符节点作为目标移动字符节点;
将所述目标移动字符节点移动至所述预设二叉树深度值所在层的前一层以确定最终二叉树;
若所述当前空洞个数为0,则确定所述初始二叉树调整策略为所述二叉树调整策略。
为解决上述技术问题,本发明还提供一种基于硬件资源的霍夫曼编码系统,应用于霍夫曼编码电路,包括:
获取模块,用于获取目标数据和预设二叉树深度值;
构建模块,用于基于频率分布对所述目标数据构建初始二叉树,并获取所述初始二叉树的初始深度值;
确定模块,用于在所述初始深度值超出所述预设二叉树深度值的情况下,根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量;
调整模块,用于根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,并根据所述二叉树调整策略调整所述初始二叉树;
其中,所述空洞节点是将所述初始二叉树的第一层至所述预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至所述预设二叉树深度值所在层后额外产生的节点。
为解决上述技术问题,本发明还提供一种霍夫曼编码装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述所述的霍夫曼编码方法的步骤。
为解决上述技术问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述所述的霍夫曼编码方法的步骤。
本发明提供的一种霍夫曼编码方法,应用于霍夫曼编码电路,在构建二叉树、调整二叉树的过程中充分利用硬件的并行运算,将二叉树的深度值进行约束得到预设二叉树深度值,以此限定字符编码最大长度,并在较短的时间内完成二叉树的树结构调整以此实现霍夫曼编码。整个编码过程不需要引入额外的时间开销;由于对二叉树的深度进行约束,在超出预设二叉树深度值的情况下,根据预设二叉树深度值与初始深度值确定初始二叉树的待调整节点的数量;根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略,根据该策略调整初始二叉树,降低霍夫曼解码的复杂度,以提高霍夫曼解码效率,节省硬件资源。
另外,本发明还提供了一种霍夫曼编码系统、装置及介质,具有如上述霍夫曼编码方法相同的有益效果。
附图说明
为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有霍夫曼编码构建的二叉树示意图;
图2为本发明实施例提供的一种霍夫曼编码方法的流程图;
图3为本发明实施例提供的一种霍夫曼编码电路的硬件结构图;
图4为本发明实施例提供的一种待调整二叉树的示意图;
图5为本发明实施例提供的一种实际空洞节点的示意图;
图6为本发明实施例提供的一种调整后二叉树的示意图;
图7为本发明实施例提供的一种最终二叉树结构的示意图;
图8为本发明实施例提供的一种霍夫曼编码系统的结构图;
图9为本发明实施例提供的一种霍夫曼编码装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。
本发明的核心是提供一种霍夫曼编码方法、系统、装置及介质,利用硬件的并行运算,限定字符编码最大长度,降低霍夫曼解码的复杂度,以提高霍夫曼解码效率,节省硬件资源。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。
需要说明的是,霍夫曼编码压缩数据,先根据字符出现频率,构建标准二叉树,二叉树构建完成后,开始对每个字符进行编码,编码长度由字符在二叉树的位置决定,编码规则是从父节点到每个叶子节点进行遍历,路径如果位于父节点左侧,则编码为0,路径位于父节点右侧,编码为1,图1为现有霍夫曼编码构建的二叉树示意图,如图1所示,最终编码为:字符a:2’b00;字符b:2’b01;字符f:2’b11;字符c:3’b100;字符d:4’b1010;字符e:4’b1011;压缩前每个字符需要用来标识,整个信息需要/>表示,其公式为,压缩后信息相比原原来的信息较少,需要用表示,其公式为/>。采用霍夫曼编码虽然节省了字符数,但是二叉树深度最大可以达到255,其字符最长编码可以到255,与此同时,导致硬件实现过程中占用的硬件资源开销过大,也会增加后续huffman解码模块的复杂度,影响huffman解码效率和增加huffman解码模块资源消耗。本发明提供的霍夫曼编码方法,可以解决上述技术问题。
图2为本发明实施例提供的一种霍夫曼编码方法的流程图,如图2所示,该方法应用于霍夫曼编码电路,包括:
S11:获取目标数据和预设二叉树深度值。
可以理解的是,目标数据来自于目标文件,目标文件可以是任何明文数据,对于明文来源不做约束,可以是网络数据、具体应用场景的数据,如电商数据等,或者流量数据等,同时,对于明文数据也可以是之前加密文件,经过解密算法后生成的该明文文件作为目标文件。
将目标文件中出现的字符数据作为目标数据,这里可以是针对目标文件进行数据分析处理得到目标数据,也可以是直接获取等,不做限定。预设二叉树深度值的设置依据可以是依据产品规格保持硬件资源的平衡,设置的最大约束性数据,也可以是基于当前经验值设置,还可以根据编码压缩率确定。
作为一种实施例,预设二叉树深度值至少由霍夫曼编码的压缩率确定得到。
霍夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法,其压缩率通常在20%-90%之间,是一种不失真的压缩方法。
需要说明的是,本发明提供的编码方法应用于霍夫曼编码电路,图3为本发明实施例提供的一种霍夫曼编码电路的硬件结构图,如图3所示,霍夫曼编码电路1内包括字符频次统计模块、数据并行排序模块、建树模块、叶节点管理模块、树调整模块和编码模块。字符频次统计模块与数据并行排序模块相连,字符频次统计后将数据发送至数据并行排序模块进行数据并行排序,字符频次统计模块主要功能是对输入的明文文件(plain text)中每个字符出现次数做统计。数据并行排序模块主要功能是对明文文件中的字符按照字符次数从小到大进行排序。当字符次数相同时,按照字符本身大小进行排序。并行排序后的数据发送至建树模块,进行构建二叉树,建树模块主要功能是根据数据并行排序模块,将明文文件中出现的字符,构建成标准二叉树;树调整模块主要功能是当建树模块完成时,如果标准二叉树最大深度超过最大深度,调整叶子节点在二叉树中的位置,最终产生一个深度不超过的标准二叉树,建树模块与叶节点管理模块进行调整得到调整后的二叉树,再输入至编码模块实现霍夫曼编码以输出密文文件,叶节点管理模块记录了明文文件中每个字符在二叉树中的深度信息和字符编码信息;编码模块是指根据叶节点管理模块中字符编码信息,用字符编码替代明文文件中的字符,产生密文文件的过程。
S12:基于频率分布对目标数据构建初始二叉树,并获取初始二叉树的初始深度值。
基于霍夫曼编码的编码原理,将各字符出现的次数频率进行统计,以根据频率分布,从小到大排序,当字符次数相同时,按照字符本身大小进行排序,在此不做限定,可以基于现有的霍夫曼编码过程进行参考。对目标数据构建的二叉树为初始二叉树。由于本发明考虑到硬件资源的开销问题,需要获取初始二叉树的初始深度值以便于与预设二叉树深度值比较。
S13:判断初始深度值是否超出预设二叉树深度值,若是,则进入步骤S14,若否,则进入步骤S16。
若初始深度值未超出预设二叉树深度值,说明当前构建的初始二叉树不会占用较多的硬件资源的消耗,保持当前的初始二叉树,无需调整。若初始深度值超出预设二叉树深度值,为了避免占用较多硬件资源消耗以及解码过程中复杂度,对其初始二叉树进行调整。
S14:根据预设二叉树深度值与初始深度值确定初始二叉树的待调整节点的数量。
S15:根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略,并根据二叉树调整策略调整初始二叉树;
其中,空洞节点是将初始二叉树的第一层至预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至预设二叉树深度值所在层后额外产生的节点。
可以理解的是,空洞节点是将初始二叉树的第一层至预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至预设二叉树深度值所在层后额外产生的节点,也可以是初始二叉树中还可以挂载的叶子节点,未被当前目标数据所对应的字符进行占用的节点。具体的,如果移动一个叶子节点后额外产生的节点够用,就移动该一个叶子节点即可,如果移动一个叶子节点后额外产生的节点不够用,就继续移动同层的其他叶子节点,如果同层没有其他叶子节点,就移动往上一层的叶子节点,直至额外产生的节点够用。如图1所示,其空洞节点可以是a、b、f、c、d、e,其属性是在考虑预设二叉树深度值范围内,可以扩展叶子节点的节点。图1仅是说明空洞节点的示意图,并不是本发明中需要建立的空洞节点。
由于考虑到调整后的二叉树深度值不超过预设二叉树深度值,因此,其空洞节点建立的范围是将初始二叉树的第一层至预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至预设二叉树深度值所在层后额外产生的节点。
本发明主要针对初始二叉树内超出预设二叉树深度值的所在层之外的叶子节点进行调整,以满足在预设二叉树深度值之内且包括预设二叉树深度值所在层,使得最终调整的二叉树的深度值不至于过深。
先确定待调整节点的数量,再将该待调整节点与空洞节点之间的数量关系确定二叉树调整策略。在此,本实施例中不考虑霍夫曼编码的最小频率对应的两个字符排序问题,仅是考虑深度值小于或者等于预设二叉树深度值这一条件,确定二叉树的调整策略。对于如何调整,可以基于具体的算法,也可以基于调整路径进行考虑以使得调整路径简便等,在此不做限定,根据实际情况设定即可。
作为一种实施例,确定待调整节点的数量,包括:
获取超出预设二叉树深度值所在层之外对应的父节点和字符节点;
将父节点和字符节点的数量和作为初始二叉树的待调整节点的数量。
具体地,本实施例的前提是在初始深度值超出预设二叉树深度值的情况下进行,故需要获取预设二叉树深度值所在的层之外对应的父节点和字符节点,即获取初始二叉树超过预设二叉树深度值所在层之外的层所对应的父节点和字符节点,将父节点和字符节点作为待调整节点,其待调整节点的数量便是父节点和字符节点的数量。
最后根据确定的二叉树调整策略对初始二叉树进行调整即可。
S16:将初始二叉树作为最终的二叉树。
在二叉树初始深度值未超出预设二叉树深度值的情况下,其初始二叉树无需调整,直接作为最终的二叉树即可。
本发明实施例提供的一种霍夫曼编码方法,应用于霍夫曼编码电路,在构建二叉树、调整二叉树的过程中充分利用硬件的并行运算,将二叉树的深度值进行约束得到预设二叉树深度值,以此限定字符编码最大长度,并在较短的时间内完成二叉树的树结构调整以此实现霍夫曼编码。整个编码过程不需要引入额外的时间开销;由于对二叉树的深度进行约束,在超出预设二叉树深度值的情况下,根据预设二叉树深度值与初始深度值确定初始二叉树的待调整节点的数量;根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略,根据该策略调整初始二叉树,降低霍夫曼解码的复杂度,以提高霍夫曼解码效率,节省硬件资源。
需要说明的是,空洞节点包括理论空洞节点和实际空洞节点,基于两种空洞节点的对比过程,可以确保最后调整的二叉树不会存在多余的空洞节点,本实施例中设置的空洞节点是方便叶子节点的调整过程。步骤S14中的根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略,包括:
将待调整节点的数量除以2以确定理论空洞节点的数量;
自预设二叉树深度值所在层的前一层开始至初始二叉树的第一层中的各叶子节点,分别移动至预设二叉树深度值所在层,并在预设二叉树深度值所在层产生实际空洞节点以确定实际空洞节点的数量;
根据理论空洞节点的数量和实际空洞节点的数量的关系确定二叉树调整策略。
具体地,先计算理论空洞节点的数量,也就是理论可以实现的调整策略对应的空洞节点的数量。根据初始二叉树和预设二叉树深度值的关系,统计需要在预设二叉树深度值所在层额外可以产生的理论空洞节点的数量。本实施例中主要基于参与减数的字符总数以及每层中字符占用的叶子节点和父节点的总数的关系确定,即将待调整节点的数量除以2得到理论空洞节点的数量。
需要说明的是,本实施例是在待调整节点的基础上获取理论空洞节点的数量,也可以基于初始二叉树的各层字符叶子节点和父节点得到,作为一种实施例,理论空洞节点的数量的确定过程,包括:
获取初始二叉树的各层字符叶子节点和父节点的数量以及初始二叉树的节点总数;
将初始二叉树的节点总数减各层字符叶子节点和父节点的数量得到初始理论空洞节点的数量;
将初始理论空洞节点的数量除以2得到理论空洞节点的数量。
具体地,一个完整的二叉树节点总数为,其/>为字符个数。在初始二叉树的节点总数基础上,减去各层的叶子节点,本实施例中的各层的叶子节点包括第0层至第/>层的叶子节点,得到初始理论空洞节点的数量,由于一个节点可以作为父节点,其父节点上可以挂在两个叶子节点,计算完所有可以挂载的叶子节点对应的空洞节点后,这里重复计算了一次,需要除以2进行重复空洞节点处理,得到最后的理论空洞节点的数量,其公式如下:
其中,表示参与建树的字符总数,式中的/>,这里的/>是二叉树节点总数,再减1是减去第0层的叶子节点。/>中的/>层,指二叉树第层字符叶子节点和父节点的总数,/>为预设二叉树深度值,/>为理论空洞节点的数量。
计算实际空洞节点的数量,是考虑到依次将预设二叉树深度值所在层的前一层至第一层的叶子节点,分别移动至层,可以产生的足够多的空洞节点数量,作为实际空洞节点的数量。
根据两种空洞节点的数量和待调整节点的数量的关系确定其二叉树调整策略。如果实际空洞节点的数量与理论空洞节点的数量相同,则说明当前的二叉树深度值依据实际空洞节点进行调整即可作为调整策略。如果实际空洞节点的数量大于理论空洞节点的数量,则还需要进行调整,直至调整后的叶子节点移动至空洞节点,使得移动后存在的空洞节点为0即可。
作为一种实施例,实际空洞节点的数量的确定过程,包括:
将预设二叉树深度值分别与初始二叉树的各层序号作差得到各层对应的层差值;
将各层对应的层差值作为幂指数,2作为变量以得到各层在预设二叉树深度值所在层构造的初始实际空洞节点的数量;
将各层的初始实际空洞节点的数量减1得到各层在预设二叉树深度值所在层构造的各层实际空洞节点的数量;
将各层实际空洞节点的数量进行加和处理得到实际空洞节点的数量。
具体地,依次将层的叶子节点移动至/>层,直至产生足够多的空洞节点,将第/>层的叶子节点移动至/>层,可以在/>层额外产生实际空洞节点。将第/>层与第层之间作差得到各层对应的层差值,以2为变量,各层差值作为幂指数,其各层的初始实际空洞节点的数量公式为:/>,由于空洞节点是基于原有的叶子节点作为父节点扩展的节点,故父节点被字符占用,因此,需要减1,这里的1就是被字符占用的父节点,可以得到各层的实际空洞节点的数量。再将各层实际空洞节点的数量进行加和得到实际空洞节点的数量。
在产生实际空洞节点的数量后,预设二叉树深度值层以外的叶子节点可以直接移动到/>层的空洞节点处。
作为一种实施例,根据待调整节点的数量、理论空洞节点的数量和实际空洞节点的数量的关系确定二叉树调整策略,包括:
判断实际空洞节点的数量是否大于理论空洞节点的数量;
若是,则将实际空洞节点的数量与理论空洞节点的数量进行作差处理得到空洞节点差值;
将空洞节点差值作为调整的叶子节点个数;
根据调整的叶子节点个数对待调整节点对应的叶子节点移动至预设二叉树深度值所在层的前一层以确定初始二叉树调整策略;
根据初始二叉树调整策略对初始二叉树进行调整得到调整后的初始二叉树;
根据调整后的初始二叉树与当前空洞节点个数的关系确定二叉树调整策略。
具体地,在实际空洞节点的数量大于理论空洞节点的数量,将实际空洞节点的数量减去理论空洞节点的数量得到的空洞节点差值,并作为调整的叶子节点个数,根据该个数对层的叶子节点(也就是待调整节点)移动至/>层以确定最终的二叉树调整策略。
例如,以ABCD’EF六个字符构建的二叉树,图4为本发明实施例提供的一种待调整二叉树的示意图,如图4所示,第一层有一个叶子节点A,第二层有一个叶子节点B,第三层没有叶子节点,第四层有4个叶子节点CD’EF。树的深度是4,如果要将树深度调整到3(预设二叉树深度值),需要把第4层的4个节点,全部移到第3层。为了将第四层的4个节点全部移动到第三层,需要在第三层额外产生个空洞节点(/>)。
在实际空洞节点产生时,图5为本发明实施例提供的一种实际空洞节点的示意图,如图5所示,首先将第二层的叶子节点移动到第三层,产生个空洞节点(图5中的4节点),此时还没有足够多的空洞节点,需要继续将第一层的叶子节点移动到第四层,产生个空洞节点(图5中的1节点,2节点和3节点)。将叶子节点AB移动到第三层后,树的结构如图5,在第三层一共存在/>个空洞节点。图6为本发明实施例提供的一种调整后二叉树的示意图,如图6所示,随后可进行二叉树深度的调整,可以将F叶节点移动到4空洞节点,E叶节点移动到父节点p1,C叶节点移动到3空洞节点,D’叶节点移动到父节点p0。
根据初始二叉树调整策略对初始二叉树进行调整后得到调整后的初始二叉树。由于当前需要空洞节点全部消失,则需要查看下当前空洞节点个数,若当前空洞节点个数为0,则说明调整结束,若当前空洞节点个数不为0,则继续调整直至当前空洞节点个数为0。
在上述实施例的基础上,作为一种实施例,根据调整后的初始二叉树与当前空洞节点个数的关系确定二叉树调整策略,包括:
在调整后的初始二叉树中确定当前空洞节点个数;
若当前空洞节点个数不为0,将当前空洞节点所在层对应的字符节点移动至当前空洞节点所在层的前一层;
根据频率从大到小排序顺序对预设二叉树深度值所在层内的目标数据的频率进行排序,并选取目标频率对应的目标数据的字符节点作为目标移动字符节点;
将目标移动字符节点移动至预设二叉树深度值所在层的前一层以确定最终二叉树;
若当前空洞个数为0,则确定初始二叉树调整策略为二叉树调整策略。
具体地,在完成当前的调整后,获取调整后的初始二叉树,判断该调整后的初始二叉树是否存在空洞节点,若存在,则继续调整。需要说明的是,上述实施例中调整的初始二叉树满足其深度值小于或者等于预设二叉树深度值,也就是在原本初始二叉树的基础上节省了硬件资源。由于本实施中当前空洞节点个数还存在,故在当前空洞节点所在层内对应的字符节点移动至对应的前一层。将何种字符节点移至对应的前一层,则需要根据频率分布排序,优先选取频次较高的字符作为目标移动字符节点。对于目标频率可以依据当前空洞节点个数确定从大到小排序后的前多少个频率。将目标移动字符节点移动至预设二叉树深度值所在层的前一层以确定最终二叉树,也就是确定最终的二叉树调整策略。
结合上述例子,如图6所示,在第三层中还有两个空洞节点,需要将第三层节点中的两个叶子节点移动至第二层,图7为本发明实施例提供的一种最终二叉树结构的示意图,如图7所示,最终完成调整后的二叉树结构。
本发明实施例提供的二叉树调整策略,对二叉树的深度进行约束,在超出预设二叉树深度值的情况下,依据预设二叉树深度值与空洞节点的数量对初始二叉树进行调整,节省硬件资源。
上述详细描述了霍夫曼编码方法对应的各个实施例,在此基础上,本发明还公开与上述方法对应的霍夫曼编码系统,图8为本发明实施例提供的一种霍夫曼编码系统的结构图。如图8所示,霍夫曼编码系统包括:
获取模块11,用于获取目标数据和预设二叉树深度值;
构建模块12,用于基于频率分布对目标数据构建初始二叉树,并获取初始二叉树的初始深度值;
确定模块13,用于在初始深度值超出预设二叉树深度值的情况下,根据预设二叉树深度值与初始深度值确定初始二叉树的待调整节点的数量;
调整模块14,用于根据待调整节点的数量与空洞节点的数量确定初始二叉树的二叉树调整策略,并根据二叉树调整策略调整初始二叉树;
其中,空洞节点是将初始二叉树的第一层至预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至预设二叉树深度值所在层后额外产生的节点。
由于系统部分的实施例与上述的实施例相互对应,因此系统部分的实施例请参照上述方法部分的实施例描述,在此不再赘述。
对于本发明提供的一种霍夫曼编码系统的介绍请参照上述方法实施例,本发明在此不再赘述,其具有上述霍夫曼编码方法相同的有益效果。
图9为本发明实施例提供的一种霍夫曼编码装置的结构图,如图9所示,该装置包括:
存储器21,用于存储计算机程序;
处理器22,用于执行计算机程序时实现霍夫曼编码方法的步骤。
其中,处理器22可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器22可以采用数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器22也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器22可以集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器22还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器21可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器21还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器21至少用于存储以下计算机程序211,其中,该计算机程序被处理器22加载并执行之后,能够实现前述任一实施例公开的霍夫曼编码方法的相关步骤。另外,存储器21所存储的资源还可以包括操作系统212和数据213等,存储方式可以是短暂存储或者永久存储。其中,操作系统212可以包括Windows、Unix、Linux等。数据213可以包括但不限于霍夫曼编码方法所涉及到的数据等等。
在一些实施例中,霍夫曼编码装置还可包括有显示屏23、输入输出接口24、通信接口25、电源26以及通信总线27。
本领域技术人员可以理解,图9中示出的结构并不构成对霍夫曼编码装置的限定,可以包括比图示更多或更少的组件。
处理器22通过调用存储于存储器21中的指令以实现上述任一实施例所提供的霍夫曼编码方法。
对于本发明提供的一种霍夫曼编码装置的介绍请参照上述方法实施例,本发明在此不再赘述,其具有上述霍夫曼编码方法相同的有益效果。
进一步的,本发明还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器22执行时实现如上述霍夫曼编码方法的步骤。
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
对于本发明提供的一种计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不再赘述,其具有上述霍夫曼编码方法相同的有益效果。
以上对本发明所提供的一种霍夫曼编码方法、霍夫曼编码系统、霍夫曼编码装置及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (9)

1.一种霍夫曼编码方法,其特征在于,应用于霍夫曼编码电路,所述方法包括:
获取目标数据和预设二叉树深度值;
基于频率分布对所述目标数据构建初始二叉树,并获取所述初始二叉树的初始深度值;
在所述初始深度值超出所述预设二叉树深度值的情况下,根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量;
根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,并根据所述二叉树调整策略调整所述初始二叉树;
其中,所述空洞节点是将所述初始二叉树的第一层至所述预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至所述预设二叉树深度值所在层后额外产生的节点,所述空洞节点包括理论空洞节点和实际空洞节点;
其中,所述根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,包括:
将所述待调整节点的数量除以2以确定所述理论空洞节点的数量;
自所述预设二叉树深度值所在层的前一层开始至所述初始二叉树的第一层中的各叶子节点,分别移动至所述预设二叉树深度值所在层,并在所述预设二叉树深度值所在层产生所述实际空洞节点以确定所述实际空洞节点的数量;
根据所述待调整节点的数量、所述理论空洞节点的数量和所述实际空洞节点的数量的关系确定所述二叉树调整策略。
2.根据权利要求1所述的霍夫曼编码方法,其特征在于,所述预设二叉树深度值至少由霍夫曼编码的压缩率确定得到。
3.根据权利要求1或2所述的霍夫曼编码方法,其特征在于,所述根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量,包括:
获取超出所述预设二叉树深度值所在层之外对应的父节点和字符节点;
将所述父节点和所述字符节点的数量和作为所述初始二叉树的所述待调整节点的数量。
4.根据权利要求1所述的霍夫曼编码方法,其特征在于,所述实际空洞节点的数量的确定过程,包括:
将所述预设二叉树深度值分别与所述初始二叉树的各层序号作差得到各层对应的层差值;
将各所述层对应的层差值作为幂指数,2作为变量以得到各所述层在所述预设二叉树深度值所在层构造的初始实际空洞节点的数量;
将各所述层的所述初始实际空洞节点的数量减1得到各所述层在所述预设二叉树深度值所在层构造的各层实际空洞节点的数量;
将各所述层实际空洞节点的数量进行加和处理得到所述实际空洞节点的数量。
5.根据权利要求4所述的霍夫曼编码方法,其特征在于,所述根据所述待调整节点的数量、所述理论空洞节点的数量和所述实际空洞节点的数量的关系确定所述二叉树调整策略,包括:
判断所述实际空洞节点的数量是否大于所述理论空洞节点的数量;
若是,则将所述实际空洞节点的数量与所述理论空洞节点的数量进行作差处理得到空洞节点差值;
将所述空洞节点差值作为调整的叶子节点个数;
根据所述调整的叶子节点个数对所述待调整节点对应的叶子节点移动至所述预设二叉树深度值所在层的前一层以确定初始二叉树调整策略;
根据所述初始二叉树调整策略对所述初始二叉树进行调整得到调整后的所述初始二叉树;
根据调整后的所述初始二叉树与当前空洞节点个数的关系确定所述二叉树调整策略。
6.根据权利要求5所述的霍夫曼编码方法,其特征在于,所述根据调整后的所述初始二叉树与当前空洞节点个数的关系确定所述二叉树调整策略,包括:
在调整后的所述初始二叉树中确定所述当前空洞节点个数;
若所述当前空洞节点个数不为0,将当前空洞节点所在层对应的字符节点移动至所述当前空洞节点所在层的前一层;
根据频率从大到小排序顺序对所述预设二叉树深度值所在层内的所述目标数据的频率进行排序,并选取目标频率对应的所述目标数据的字符节点作为目标移动字符节点;
将所述目标移动字符节点移动至所述预设二叉树深度值所在层的前一层以确定最终二叉树;
若所述当前空洞个数为0,则确定所述初始二叉树调整策略为所述二叉树调整策略。
7.一种基于硬件资源的霍夫曼编码系统,其特征在于,应用于霍夫曼编码电路,包括:
获取模块,用于获取目标数据和预设二叉树深度值;
构建模块,用于基于频率分布对所述目标数据构建初始二叉树,并获取所述初始二叉树的初始深度值;
确定模块,用于在所述初始深度值超出所述预设二叉树深度值的情况下,根据所述预设二叉树深度值与所述初始深度值确定所述初始二叉树的待调整节点的数量;
调整模块,用于根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,并根据所述二叉树调整策略调整所述初始二叉树;
其中,所述空洞节点是将所述初始二叉树的第一层至所述预设二叉树深度值所在层的前一层的一个以上的叶子节点,移动至所述预设二叉树深度值所在层后额外产生的节点,所述空洞节点包括理论空洞节点和实际空洞节点;
其中,所述根据所述待调整节点的数量与空洞节点的数量确定所述初始二叉树的二叉树调整策略,包括:
将所述待调整节点的数量除以2以确定所述理论空洞节点的数量;
自所述预设二叉树深度值所在层的前一层开始至所述初始二叉树的第一层中的各叶子节点,分别移动至所述预设二叉树深度值所在层,并在所述预设二叉树深度值所在层产生所述实际空洞节点以确定所述实际空洞节点的数量;
根据所述待调整节点的数量、所述理论空洞节点的数量和所述实际空洞节点的数量的关系确定所述二叉树调整策略。
8.一种霍夫曼编码装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述的霍夫曼编码方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的霍夫曼编码方法的步骤。
CN202310769907.3A 2023-06-28 2023-06-28 一种霍夫曼编码方法、系统、装置及介质 Active CN116505954B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310769907.3A CN116505954B (zh) 2023-06-28 2023-06-28 一种霍夫曼编码方法、系统、装置及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310769907.3A CN116505954B (zh) 2023-06-28 2023-06-28 一种霍夫曼编码方法、系统、装置及介质

Publications (2)

Publication Number Publication Date
CN116505954A CN116505954A (zh) 2023-07-28
CN116505954B true CN116505954B (zh) 2024-01-23

Family

ID=87316951

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310769907.3A Active CN116505954B (zh) 2023-06-28 2023-06-28 一种霍夫曼编码方法、系统、装置及介质

Country Status (1)

Country Link
CN (1) CN116505954B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116915262B (zh) * 2023-09-12 2023-12-08 北京路畅均安科技有限公司 一种基于物联网的智慧工地工程质量管理系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101060337A (zh) * 2007-05-22 2007-10-24 北京中星微电子有限公司 一种优化的霍夫曼解码方法和装置
CN104283568A (zh) * 2013-07-12 2015-01-14 中国科学院声学研究所 一种基于部分霍夫曼树的数据压缩编码方法
CN112003625A (zh) * 2020-08-14 2020-11-27 山东云海国创云计算装备产业创新中心有限公司 一种霍夫曼编码方法、系统及设备
US10862509B1 (en) * 2019-08-16 2020-12-08 Microsoft Technology Licensing, Llc Flexible huffman tree approximation for low latency encoding

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109510987B (zh) * 2017-09-15 2022-12-06 华为技术有限公司 编码树节点划分方式的确定方法、装置及编码设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101060337A (zh) * 2007-05-22 2007-10-24 北京中星微电子有限公司 一种优化的霍夫曼解码方法和装置
CN104283568A (zh) * 2013-07-12 2015-01-14 中国科学院声学研究所 一种基于部分霍夫曼树的数据压缩编码方法
US10862509B1 (en) * 2019-08-16 2020-12-08 Microsoft Technology Licensing, Llc Flexible huffman tree approximation for low latency encoding
CN114223137A (zh) * 2019-08-16 2022-03-22 微软技术许可有限责任公司 用于低延时编码的灵活霍夫曼树近似
CN112003625A (zh) * 2020-08-14 2020-11-27 山东云海国创云计算装备产业创新中心有限公司 一种霍夫曼编码方法、系统及设备

Also Published As

Publication number Publication date
CN116505954A (zh) 2023-07-28

Similar Documents

Publication Publication Date Title
JP3017379B2 (ja) 符号化方法、符号化装置、復号方法、復号器、データ圧縮装置及び遷移マシン生成方法
CN116505954B (zh) 一种霍夫曼编码方法、系统、装置及介质
US11928599B2 (en) Method and device for model compression of neural network
WO2019128707A1 (zh) 一种速率匹配和极化码编码的方法和设备
CN110620793B (zh) 一种提高音频质量的方法、设备及介质
US11722148B2 (en) Systems and methods of data compression
BRPI1000095A2 (pt) método e dispositivo de recodificação de rede para recodificar sìmbolos codificados a serem transmitidos para equipamentos de comunicação
JP7337950B2 (ja) ニューラルネットワークモデル圧縮のための量子化、適応ブロック分割、及びコードブック符号化の方法及び装置、並びにコンピュータープログラム
CN110545106A (zh) 时序数据的编码方法及装置
JP4852061B2 (ja) 低密度パリティ検査(ldpc)デコーダに応用する演算回路
CN108763443A (zh) 区块链账户处理方法与装置
CN113963248A (zh) 神经网络训练、场景决策的方法及装置、设备及存储介质
CN112332857B (zh) 一种用于ldpc码的循环移位网络系统及循环移位方法
CN112511629B (zh) 一种mpt结构的账户树的数据压缩方法及系统
CN111241204B (zh) 一种梯度数据的同步方法、装置、设备及存储介质
CN113630125A (zh) 数据压缩、编码解压缩方法、装置、电子设备及存储介质
CN113852443A (zh) Scma系统中一种低复杂度多用户检测方法
CN113746487B (zh) 一种数据压缩方法、装置及电子设备和存储介质
CN111026748B (zh) 网络访问频次管控的数据压缩方法、装置及系统
CN110175185B (zh) 一种基于时序数据分布特征的自适应无损压缩方法
CN111193648B (zh) 降低can总线负载的数据发送方法、终端设备及存储介质
CN109800859B (zh) 一种神经网络批归一化的优化方法及装置
JP6961950B2 (ja) 格納方法、格納装置および格納プログラム
US20170117918A1 (en) Method and Apparatus for Calculating Estimated Data Compression Ratio
EP0855803A1 (en) Method and system for compressing data based upon context tree algorithm

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
GR01 Patent grant
GR01 Patent grant