一种数据压缩编码处理的方法和设备与流程

文档序号:25289375发布日期:2021-06-01 17:40阅读:95来源:国知局
一种数据压缩编码处理的方法和设备与流程

本领域涉及计算机领域,并且更具体地涉及一种数据压缩编码处理的方法和设备。



背景技术:

近几年来,随着科学技术的不断发展,数据信息呈现出爆炸式的增长。云计算的兴起,人工智能的推进,大数据时代的到来,新的工作负载不断增大,海量数据传输和存储的问题不断引起关注,如何能够高效的传输海量数据,同时不对处理器造成过于沉重负荷的问题亟待解决。如果能够在文件传输时进行预先压缩,不仅可以节省数据流量,同时也降低了传输时间;如果在读取磁盘文件之前对文件进行压缩,就可以提高文件读取的速率;总而言之,压缩数据从一个新的角度提供了改善计算机性能的方法,对其的研究具有重要的现实意义。

广泛应用的有效压缩算法应具备三个重要的特性:通用、无损、高压缩比。通用是指源数据的一般性,很多数据由于其本身的编码方式决定了其特殊性,根据这些特殊性进行有针对性的研究可以大大提高压缩效果,而这里我们关注的是适用于非特定数据的通用压缩算法。无损是指数据压缩后的编码与源码相比包含的信息量相同。高压缩比是指压缩后降低存储空间比原存储空间的结果尽可能大。就现状而言,具有通用性的无损压缩因数据特征未知且不允许信息丢失,造成压缩效率难以得到大的提高而发展缓慢,使得无损压缩成为必要的研究课题。

霍夫曼编码是经典无损压缩标准deflate(同时使用lz77与霍夫曼coding的一种无损数据压缩方式)中重要的步骤,其中霍夫曼编码分为静态霍夫曼编码和动态霍夫曼编码,我们这里只对算法较复杂的动态霍夫曼编码的算法作为研究。霍夫曼编码是对数据经过lz77(一种基于字典的、“滑动窗”的无损压缩算法)压缩后的二次压缩,又进一步提高了压缩率,它是通过统计字符出现次数,对数据处理的可变长编码,利用字符出现的次数,构造霍夫曼二叉树,从树的叶子节点到根节点进行编码,出现的越多的字符让短一些的码替换,同时次数少的字符被长一些的码替换掉,可以实现数据的总体大小减小,达到压缩的目的。然而,由于数据信息的复杂程度不同或是数据块的长度不同,霍夫曼树的形状差异很大。但为了压缩效果和编码效率,一般会设定一个最大码长,也就是霍夫曼树最大的深度。在上述霍夫曼树生成的过程中,无法保证其深度不超过规定深度。



技术实现要素:

有鉴于此,本发明实施例的目的在于提出一种数据压缩编码处理的方法和设备,通过使用本发明的技术方案,能够对霍夫曼树任意超长码均有良好压缩效果,为后续deflate压缩过程提供有效的保障,具有计算快捷简便,效果稳定的优点。

基于上述目的,本发明的实施例的一个方面提供了一种数据压缩编码处理的方法,包括以下步骤:

获取编码对应的树形和阈值层数;

判断树形对应的层数是否超过阈值层数;

响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形;

将新的树形转化为新编码。

根据本发明的一个实施例,响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形包括:

判断阈值层数的下一层的树形中是否有叶子节点;

响应于阈值层数的下一层的树形中有叶子节点,取出叶子节点和对应的父节点;

从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树;

使用子树代替第一叶子节点,并判断对应的父节点下是否有其他的叶子节点;

响应于对应的父节点下没有其他的叶子节点,结束本次操作。

根据本发明的一个实施例,还包括:

响应于对应的父节点下有其他的叶子节点,使用其他的叶子节点代替父节点。

根据本发明的一个实施例,从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树包括:

以对应的父节点作为子树的父节点;

以第一叶子节点作为子树的一个叶子节点;

以叶子节点作为子树的另一个叶子节点;

使用以上三个节点组成子树。

根据本发明的一个实施例,编码为霍夫曼编码,树形为霍夫曼树的树形。

本发明的实施例的另一个方面,还提供了一种数据压缩编码处理的设备,设备包括:

获取模块,获取模块配置为获取编码对应的树形和阈值层数;

判断模块,判断模块配置为判断树形对应的层数是否超过阈值层数;

整理模块,整理模块配置为响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形;

转换模块,转换模块配置为将新的树形转化为新编码。

根据本发明的一个实施例,整理模块还配置为:

判断阈值层数的下一层的树形中是否有叶子节点;

响应于阈值层数的下一层的树形中有叶子节点,取出叶子节点和对应的父节点;

从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树;

使用子树代替第一叶子节点,并判断对应的父节点下是否有其他的叶子节点;

响应于对应的父节点下没有其他的叶子节点,结束本次操作。

根据本发明的一个实施例,还包括替代模块,替代模块配置为:

响应于对应的父节点下有其他的叶子节点,使用其他的叶子节点代替父节点。

根据本发明的一个实施例,整理模块还配置为:

以对应的父节点作为子树的父节点;

以第一叶子节点作为子树的一个叶子节点;

以叶子节点作为子树的另一个叶子节点;

使用以上三个节点组成子树。

根据本发明的一个实施例,编码为霍夫曼编码,树形为霍夫曼树的树形。

本发明具有以下有益技术效果:本发明实施例提供的编码快速处理的方法,通过获取编码对应的树形和阈值层数;判断树形对应的层数是否超过阈值层数;响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形;将新的树形转化为新编码的技术方案,能够对霍夫曼树任意超长码均有良好压缩效果,为后续deflate压缩过程提供有效的保障,具有计算快捷简便,效果稳定的优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为根据本发明一个实施例的编码快速处理的方法的示意性流程图;

图2为根据本发明一个实施例的编码快速处理的设备的示意图;

图3为根据本发明一个实施例的霍夫曼属性图的示意图;

图4为根据本发明一个实施例的霍夫曼属性图的示意图;

图5为根据本发明一个实施例的霍夫曼属性图的示意图;

图6为根据本发明一个实施例的霍夫曼属性图的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

基于上述目的,本发明的实施例的第一个方面,提出了一种数据压缩编码处理的方法的一个实施例。图1示出的是该方法的示意性流程图。

如图1中所示,该方法可以包括以下步骤:

s1获取编码对应的树形和阈值层数,将霍夫曼压缩编码转换成对应的树形,由于数据信息的复杂程度不同或是数据块的长度不同,霍夫曼树的形状差异很大,为了压缩效果和编码效率,一般会设定一个最大码长,也就是对应了树形的最大深度,也就是阈值层数,如果该编码对应的树形大于了设定了阈值层数,则需要进行后续的压缩处理;

s2判断树形对应的层数是否超过阈值层数;

s3响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形,找到离标准线最近的超出标准线叶子结点和离标准线最近的未超出标准线叶子结点,将超出标准的叶子结点及上方的node结点(父节点)取出,同时取出未超出标准线叶子结点,将它们组成为子树,将子树放置于之前未超出标准的叶子节点的位置,并将之前因取出超出叶子结点而断开的子树(叶子结点)上移至之前超出标准的叶子结点的位置,重复该操作直至无超出标准线的叶子节点出现;

s4将新的树形转化为新编码。

通过本发明的技术方案,能够对霍夫曼树任意超长码均有良好压缩效果,为后续deflate压缩过程提供有效的保障,具有计算快捷简便,效果稳定的优点。

在本发明的一个优选实施例中,响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形包括:

判断阈值层数的下一层的树形中是否有叶子节点;

响应于阈值层数的下一层的树形中有叶子节点,取出叶子节点和对应的父节点;

从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树;

使用子树代替第一叶子节点,并判断对应的父节点下是否有其他的叶子节点;

响应于对应的父节点下没有其他的叶子节点,结束本次操作。一次该操作可以有效地改善两个超长深度的叶子结点,如果还有超过阈值层数的节点,可以重复上面的过程直到满足阈值层数的要求

在本发明的一个优选实施例中,还包括:

响应于对应的父节点下有其他的叶子节点,使用其他的叶子节点代替父节点。

在本发明的一个优选实施例中,从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树包括:

以对应的父节点作为子树的父节点;

以第一叶子节点作为子树的一个叶子节点;

以叶子节点作为子树的另一个叶子节点;

使用以上三个节点组成子树。

在本发明的一个优选实施例中,编码为霍夫曼编码,树形为霍夫曼树的树形。

实施例

如图3至6所示为本发明方法的一个示例,以霍夫曼树a为例说明,假设某数据块经过统计、排序以及霍夫曼树生长后得到的霍夫曼树a如图3所示,并且要求每个叶子结点的霍夫曼编码长度不能超过6(以加粗的双点虚线所示)。从图上可以看出霍夫曼树a的最大深度为9,也就是目前叶子结点的最大长度达到9,超过了要求的最大长度6。

第一步,对霍夫曼树a的形状进行分析,找到一个离标准线最近的超出叶子结点(k结点,位于层数7)和一个离标准线最近的未超出叶子结点(f结点,位于层数5),如图4所示。图4中有3把小剪刀的标注,在这三个地方断开其连接,即断开第5层中f结点与上方node结点的连接,断开第6层11号node结点(第7层k结点连接的node结点)的上方node点连接和与下方g叶子结点(11号node结点除k叶子结点之外的另一个分支)的连接。

第二步,通过第一步操作的断开连接的f叶子结点结合至同样断开的11号node结点,即与k叶子结点并列。由于11号node结点与k叶子结点被断开,还单独留下一个g叶子结点。以前的f叶子结点来自层数5,k叶子结点来自层数7,g叶子结点也来自层数7。

第三步,将第二步组合好的子树(f叶子结点-11号node结点-k叶子结点)结合至huffman原f叶子结点连接处,如图5所示;将第二步断开的g叶子结点上移至原11号node结点的位置,如图5所示;最后得到的结果如图6所示,f叶子结点,k叶子结点,g叶子结点均移动到了第六层(未超出目标层数)。到目前为止,可以发现一次完整的迭代可以有效地改善两个超长深度的叶子结点(k叶子结点和g叶子结点)。后面的节点的处理过程与上述过程相同,直到全部的节点都满足最大层数的要求。

本发明的技术方案涉及到的计算并不复杂,没有过多冗余繁杂的计算,只是为超出深度的叶子结点重置位置即可,其次整体只用使用一次循环迭代计算即可算得结果,计算快捷高效,再次本发明的方案涉及的计算及存储方式简便,不仅为高效的软件提供基础,也是为硬件化提供可能,多种可实现形式使其应用更加灵活。

需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,上述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中存储介质可为磁碟、光盘、只读存储器(read-onlymemory,rom)或随机存取存储器(randomaccessmemory,ram)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

此外,根据本发明实施例公开的方法还可以被实现为由cpu执行的计算机程序,该计算机程序可以存储在计算机可读存储介质中。在该计算机程序被cpu执行时,执行本发明实施例公开的方法中限定的上述功能。

基于上述目的,本发明的实施例的第二个方面,提出了一种数据压缩编码处理的设备,如图2所示,设备200包括:

获取模块,获取模块配置为获取编码对应的树形和阈值层数;

判断模块,判断模块配置为判断树形对应的层数是否超过阈值层数;

整理模块,整理模块配置为响应于有树形的层数超过阈值层数,将超过阈值层数的树形与未超过阈值层数的树形进行剪切与合并后形成新的树形;

转换模块,转换模块配置为将新的树形转化为新编码。

在本发明的一个优选实施例中,整理模块还配置为:

判断阈值层数的下一层的树形中是否有叶子节点;

响应于阈值层数的下一层的树形中有叶子节点,取出叶子节点和对应的父节点;

从距阈值层数最近的上层的树形节点中取出第一叶子节点并将对应的父节点、叶子节点和第一叶子节点组成子树;

使用子树代替第一叶子节点,并判断对应的父节点下是否有其他的叶子节点;

响应于对应的父节点下没有其他的叶子节点,结束本次操作。

在本发明的一个优选实施例中,还包括替代模块,替代模块配置为:

响应于对应的父节点下有其他的叶子节点,使用其他的叶子节点代替父节点。

在本发明的一个优选实施例中,整理模块还配置为:

以对应的父节点作为子树的父节点;

以第一叶子节点作为子树的一个叶子节点;

以叶子节点作为子树的另一个叶子节点;

使用以上三个节点组成子树。

在本发明的一个优选实施例中,编码为霍夫曼编码,树形为霍夫曼树的树形。

上述实施例,特别是任何“优选”实施例是实现的可能示例,并且仅为了清楚地理解本发明的原理而提出。可以在不脱离本文所描述的技术的精神和原理的情况下对上述实施例进行许多变化和修改。所有修改旨在被包括在本公开的范围内并且由所附权利要求保护。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1