CN104821829B - 一种哈夫曼树保存方法及系统 - Google Patents
一种哈夫曼树保存方法及系统 Download PDFInfo
- Publication number
- CN104821829B CN104821829B CN201510258041.5A CN201510258041A CN104821829B CN 104821829 B CN104821829 B CN 104821829B CN 201510258041 A CN201510258041 A CN 201510258041A CN 104821829 B CN104821829 B CN 104821829B
- Authority
- CN
- China
- Prior art keywords
- node
- record
- tree
- subtree
- unit
- 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
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据压缩技术领域,公开了一种哈夫曼树保存方法,该方法包括:根据哈夫曼树的树结构,按层遍历,每个节点用1位记录,0表示无子树,1表示有子树;所述树结构的节点数N≤2时,不记录所述树结构;所述树结构的节点数N>2时,除去记录值确定的节点,按层记录每个所述节点。本发明根据所述哈夫曼树的结构特点,按位存储所述节点的子树状态,这种方法能够完成数据的稳定高效压缩,用最少的存储空间完成对所述哈夫曼树的存储。
Description
技术领域
本发明涉及数据压缩技术领域,尤其涉及一种哈夫曼树保存方法及系统。
背景技术
哈夫曼树经常用于数据压缩算法,实际压缩中,不仅要保存压缩编码,同时,为了解压缩,还需要保存哈夫曼树的树结构和节点总数等,目前,用来存储哈夫曼树的方法有以下三种:
1、直接记录编码表方法
2、存储原始统计信息方式代替存储哈夫曼编码表;
3、利用链表存储完整哈夫曼树的方法;
以上三种方法中,直接记录编码表方法需要N-1位存储每个节点,其中N为节点总数;存储原始统计信息方式代替存储哈夫曼编码表采用最大数所占位数或者数据综合决定存储代码的位数;利用链表存储完整哈夫曼树的方法一共需记录2N-1个固定长度的结构数据,其中,N为哈夫曼树的节点数。
这三种方式为防止存在树形极端的情况,均需要考虑溢出问题,所以,需要按照最多的存储位数存储哈夫曼树,这样,在哈夫曼树不满时,会造成严重浪费,且存储极不稳定,此外,利用链表存储完整哈夫曼树的方法还要存储链表指针,浪费更加严重。
发明内容
本发明所要解决的技术问题是,提供一种哈夫曼树保存方法及系统,以解决哈夫曼树存储冗余、浪费严重且存储不稳定的问题。
本发明解决上述技术问题所采用的技术方案是提供一种哈夫曼树保存方法,该方法包括步骤:
S1、根据树结构按层遍历每个节点,存储所述节点的总数N;
S2、判断所述节点总数N;
S3、若所述节点总数N≤2,不记录所述树结构;
S4、若所述节点总数N>2,判断每个节点是否有子树,用1位存储。
优选地,步骤S4中,若有所述子树,该位存储为1;若无所述子树,该位存储为0。
优选地,步骤S4中,还可以根据冗余需要增加到2-N位来存储对所述节点的子树状态。
优选地,根据所述树结构,对所述记录进行优化,除去根节点和最后两个叶节点,得到新的记录,所述新的记录含有一半叶节点,可根据之前的节点推断最后一个节点,除去所述最后一个节点,并存储为最终记录。
优选地,所述哈夫曼树或与所述哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历等方式进行遍历。
另一方面,本发明提供一种哈夫曼树保存系统,该系统包括:
遍历单元,用于根据树结构按层遍历每个节点,得到所述节点的总数N;
第一判断单元,用于判断所述节点总数N,若N≤2,则不记录所述树结构,若N>2,则将遍历结构传递到第二判断单元;
第二判断单元,用于判断每个所述节点是否有子树;
记录单元,用1位,或根据冗余需要,增加到2-N位,记录所述第二判断单元的判断结果;
存储单元,用于存储所述记录单元的记录和所述遍历单元的总数N。
优选地,根据所述第二判断单元的判断,若所述节点有所述子树,则记录为1,若所述节点没有所述子树,则记录为0。
优选地,所述记录单元还包括优化单元,用来优化所述记录,除去所述记录中代表所述树结构根节点的第一个记录、代表最后两个叶节点的最后两个记录以及根据之前节点可以推导出的倒数第三个节点的记录。
优选地,所述遍历单元还可以通过前序遍历、中序遍历和后序遍历等遍历方法对所述树结构进行遍历。
优选地,所述系统还可以保存与所述哈夫曼树树结构相似的结构。
附图说明
图1是本发明的一个优选实施例中哈夫曼树保存方法的流程图;
图2是本发明的一个优选实施例中哈夫曼树保存系统的结构图。
具体实施方式
以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。说明书后续描述为实施本发明的较佳实施方式,然所述描述乃以说明本发明的一般原则为目的,并非用以限定本发明的范围。本发明的保护范围当视所附权利要求所界定者为准。
下面结合附图和具体实施例对本发明做进一步详细说明。
如图1所示,为本发明的一个优选实施例,公开了一种哈夫曼树保存方法,该方法包含步骤:
S1、根据树结构按层遍历每个节点,存储节点的总数N;
S2、判断节点总数N;
S3、若节点总数N≤2,不记录树结构;
S4、若节点总数N>2,判断每个节点是否有子树,用1位存储。
进一步地,步骤S4中,若有子树,该位存储为1;若无子树,该位存储为0。
进一步地,步骤S4中,还可以根据冗余需要增加到2-N位来存储对节点的子树状态。
本实施例中,通过按层遍历哈夫曼树节点的方法,仅需要2N-1位即可存储整个树结构,并且在节点总数不大于2时,不需记录树结构,这种方法能够节省存储哈夫曼树的空间,防止存储空间的浪费,并且不会造成存储长度不固定的问题,能够达到稳定高效进行压缩的目的;即使需要增加到2-N位来存储所述节点,对比其他存储方式仍旧更有优势。
进一步地,根据树结构,对记录进行优化,除去根节点和最后两个叶节点,得到新的记录,新的记录含有一半叶节点,可根据之前的节点推断最后一个节点,除去最后一个节点,并存储为最终记录。
本实施例中还可以对哈夫曼树的存储进行优化,哈夫曼树的根节点必定有子树,记录为1,可以除去;哈夫曼树的最后两个节点必定是叶节点,无子树,记录为0,可以除去;剩余节点中有一半是叶节点,因此,根据之前的节点可以推断出倒数第三个节点是否有子树,不需要存储,整个哈夫曼树的存储仅需要2N-5位即可,极大的节省了存储空间,杜绝了存储空间浪费等问题。
进一步地,哈夫曼树或与哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历等方式进行遍历。
本实施例中,哈夫曼树的存储方法还可用于特点相同的树上,节省存储空间,同时,遍历方法出按层遍历外还可以通过前序遍历、中序遍历和后续遍历等常用遍历方法,此外,除压缩外,本方法还可用于其他需存储哈夫曼树的领域。
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,本领域相关技术人员应能理解,与本发明的方法相对应的,本发明还同时包括一种跨平台接口自动化测试系统,参见图2,与上述方法步骤一一对应地,该装置包括:
遍历单元,用于根据树结构按层遍历每个节点,得到节点的总数N;
第一判断单元,用于判断节点总数N,若N≤2,则不记录树结构,若N>2,则将遍历结构传递到第二判断单元;
第二判断单元,用于判断每个节点是否有子树;
记录单元,用1位,或根据冗余需要,增加到2-N位,记录所述第二判断单元的判断结果;
存储单元,用于存储记录单元的记录和遍历单元的总数N。
本实施例中,本系统通过遍历单元按层遍历哈夫曼树的每个节点,通过第一、第二判断单元用来判断哈夫曼树的结构,得到记录,并进行存储,使得哈夫曼树能够高效快速进行存储,同时,占用存储空间小,存储长度稳定性高。
进一步地,根据第二判断单元的判断,若节点有子树,则记录为1,若节点没有子树,则记录为0。
进一步地,记录单元还包括优化单元,用来优化记录,除去记录中代表树结构根节点的第一个记录、代表最后两个叶节点的最后两个记录以及根据之前节点可以推导出的倒数第三个节点的记录。
本实施例中,第二判断单元判断每个节点的子树情况,记录单元进行记录,存储哈夫曼树的树结构,记录单元可以通过优化单元对记录存储进行优化,优化后,存储空间由之前的2N-1位缩小到2N-5位,极大的节省了存储空间,达到了稳定高效压缩的目的。
进一步地,遍历单元还可以通过前序遍历、中序遍历和后序遍历等遍历方法对树结构进行遍历。
进一步地,系统还可以保存与哈夫曼树树结构相似的结构。
本实施例中,系统可以对与哈夫曼树结构相似的数进行存储,也可通过不同的遍历方法对其进行遍历,并按照遍历顺序记录和存储,每个节点可以用1位进行存储,即使每个节点需2位存储,也可以节省存储空间,此外,本系统除用于压缩数据外,也可以做其它用途。
与现有技术相比,本发明提供了一种一种哈夫曼树保存方法和系统,通过遍历树的每个节点,根据每个节点是否有子树,对树结构进行记录,若有子树,记为1,若无子树,记为0,用2N-1位(N为节点总数)记录整个树结构,进一步,可以对记录进行优化,将根节点、最后两个叶节点以及可通过之前节点推导出的倒数第三个节点除去,仅用2N-5位记录,极大的减少了存储空间的浪费和冗余,用最小的空间存储整个树结构,且达到稳定高效压缩的目的,同时,能够对其余特征相同的树进行同样的处理,并应用到多个领域。
值得注意的是,以上所述仅为本发明的较佳实施例,并非因此限定本发明的专利保护范围,本发明还可以对上述各种零部件的构造进行材料和结构的改进,或者是采用技术等同物进行替换。故凡运用本发明的说明书及图示内容所作的等效结构变化,或直接或间接运用于其他相关技术领域均同理皆包含于本发明所涵盖的范围内。
Claims (8)
1.一种哈夫曼树保存方法,其特征在于,所述方法包括步骤:
S1、根据树结构按层遍历每个节点,存储所述节点的总数N;
S2、判断所述节点总数N;
S3、若所述节点总数N≤2,不记录所述树结构;
S4、若所述节点总数N>2,判断每个节点是否有子树,用1位存储;
根据所述树结构,对所述记录进行优化,除去根节点和最后两个叶节点,得到新的记录,所述新的记录中含有一半叶节点,可根据之前的节点推断最后一个节点,除去所述最后一个节点,并存储为最终记录。
2.如权利要求1所述的方法,其特征在于,步骤S4中,若有所述子树,该位存储为1;若无所述子树,该位存储为0。
3.如权利要求1所述的方法,其特征在于,步骤S4中,还可以根据冗余需要增加到2-N位来存储对所述节点的子树状态。
4.如权利要求1所述的方法,其特征在于,所述哈夫曼树或与所述哈夫曼树特点相同的树还可以通过前序遍历、中序遍历和后续遍历的方式进行遍历。
5.一种哈夫曼树保存系统,其特征在于,所述系统包括:
遍历单元,用于根据树结构按层遍历每个节点,得到所述节点的总数N;
第一判断单元,用于判断所述节点总数N,若N≤2,则不记录所述树结构,若N>2,则将遍历结构传递到第二判断单元;
第二判断单元,用于判断每个所述节点是否有子树;
记录单元,用1位,或根据冗余需要,增加到2-N位,记录所述第二判断单元的判断结果;
存储单元,用于存储所述记录单元的记录和所述遍历单元的总数N;
所述记录单元还包括优化单元,用来优化所述记录,除去所述记录中代表所述树结构根节点的第一个记录、代表最后两个叶节点的最后两个记录以及根据之前节点可以推导出的倒数第三个节点的记录。
6.如权利要求5所述的系统,其特征在于,根据所述第二判断单元的判断,若所述节点有所述子树,则记录为1,若所述节点没有所述子树,则记录为0。
7.如权利要求5所述的系统,其特征在于,所述遍历单元还可以通过前序遍历、中序遍历和后序遍历的方法对所述树结构进行遍历。
8.如权利要求7所述的系统,其特征在于,所述系统还可以保存与所述哈夫曼树树结构相似的结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510258041.5A CN104821829B (zh) | 2015-05-20 | 2015-05-20 | 一种哈夫曼树保存方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510258041.5A CN104821829B (zh) | 2015-05-20 | 2015-05-20 | 一种哈夫曼树保存方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104821829A CN104821829A (zh) | 2015-08-05 |
CN104821829B true CN104821829B (zh) | 2018-06-26 |
Family
ID=53732014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510258041.5A Active CN104821829B (zh) | 2015-05-20 | 2015-05-20 | 一种哈夫曼树保存方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104821829B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105490683B (zh) * | 2015-11-26 | 2019-01-08 | 东方网力科技股份有限公司 | 保存范式哈夫曼树的方法及装置 |
CN110995876B (zh) * | 2019-10-11 | 2021-02-09 | 中国科学院计算技术研究所 | 一种ip存储与查找的方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102255617A (zh) * | 2010-05-19 | 2011-11-23 | 鸿富锦精密工业(深圳)有限公司 | 哈夫曼树的存储方法及利用数组进行数据解码的方法 |
CN104283568A (zh) * | 2013-07-12 | 2015-01-14 | 中国科学院声学研究所 | 一种基于部分霍夫曼树的数据压缩编码方法 |
-
2015
- 2015-05-20 CN CN201510258041.5A patent/CN104821829B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102255617A (zh) * | 2010-05-19 | 2011-11-23 | 鸿富锦精密工业(深圳)有限公司 | 哈夫曼树的存储方法及利用数组进行数据解码的方法 |
CN104283568A (zh) * | 2013-07-12 | 2015-01-14 | 中国科学院声学研究所 | 一种基于部分霍夫曼树的数据压缩编码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104821829A (zh) | 2015-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
US9235651B2 (en) | Data retrieval apparatus, data storage method and data retrieval method | |
CN105718272B (zh) | 一种终端恢复出厂设置的方法及终端 | |
CN104615594B (zh) | 一种数据更新方法及装置 | |
EP3154202B1 (en) | Encoding program, encoding method, encoding device, decoding program, decoding method, and decoding device | |
US7973680B2 (en) | Method and system for creating an in-memory physical dictionary for data compression | |
CN108133031A (zh) | 一种过滤推荐视频候选结果的方法及装置 | |
CN103279532A (zh) | 多集合元素去重并标识所属集合的过滤系统及其方法 | |
CN105095237A (zh) | 用于生成非关系数据库的模式的方法和设备 | |
US10452685B2 (en) | Method and apparatus for replicating data | |
CN104821829B (zh) | 一种哈夫曼树保存方法及系统 | |
CN112988912B (zh) | 区块链数据存储方法及装置、电子设备 | |
US11074133B2 (en) | Method, electronic device and computer readable medium of file management | |
CN106844089A (zh) | 一种用于恢复树形数据存储的方法与设备 | |
CN114780502B (zh) | 基于压缩数据直接计算的数据库方法、系统、设备和介质 | |
CN103778203B (zh) | 一种网络管理数据无损压缩存储与检索的方法与系统 | |
JP6828181B2 (ja) | k−匿名化装置、方法及びプログラム | |
Sipos et al. | Erasure coded storage on a changing network: The untold story | |
CN113746487A (zh) | 一种数据压缩方法、装置及电子设备和存储介质 | |
CN106569986B (zh) | 字符串替换方法和装置 | |
CN108090364A (zh) | 一种数据泄漏源的定位方法及系统 | |
AU2016201253A1 (en) | Information processing apparatus, and data management method | |
CN112988909B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN107315806B (zh) | 一种基于文件系统的嵌入式存储方法和装置 | |
CN104778097B (zh) | 一种数据恢复方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right | ||
PP01 | Preservation of patent right |
Effective date of registration: 20220726 Granted publication date: 20180626 |