一种基于动态规划的无损压缩方法和装置与流程

文档序号:22118527发布日期:2020-09-04 15:53阅读:251来源:国知局
一种基于动态规划的无损压缩方法和装置与流程

本发明涉及无损压缩技术领域,特别涉及一种基于动态规划的无损压缩方法和装置。



背景技术:

lz77压缩算法(一种典型的无损压缩算法)采用字典的方式进行压缩,是一个简单但十分高效的数据压缩算法。其方式就是把数据中一些可以组织成短语(最长字符)的字符加入字典,然后再有相同字符出现采用标记来代替字典中的短语,如此通过标记代替多数重复出现的方式以进行压缩。即通过发现数据中存在的重复性来缩减原始输入数据大小。

lz77算法主要可以切分为两个步骤,步骤一是重复数据的发现,步骤二是重复数据的选择。现有的lz77算法在重复数据选择时一般采用的是贪心算法,即在按顺序压缩过程中一旦发现存在重复数据,就会选择按照发现的重复数据形式压缩,而不会去考虑是否存有更优的重复数据选择方案,来使得整体数据的压缩率更高,致使容易出现整体数据压缩率不是最优的情况。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种基于动态规划的无损压缩方法和装置。所述技术方案如下:

一方面,本发明实施例提供了一种基于动态规划的无损压缩方法,所述方法包括:

根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息,所述重复字符串信息包括:重复字符串与其匹配对象之间的距离、重复字符串的最大匹配长度;

根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,并确定待压缩字符串的整体压缩选择,所述压缩形式包括:以单个字符的形式进行压缩、以重复字符串的形式进行压缩;

根据每个字符的压缩形式选择,确定待压缩字符串的整体压缩选择并输出压缩结果。

在本发明实施例上述的基于动态规划的无损压缩方法中,所述根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,包括:

当当前字符选择以单个字符的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+1>si+1,则判断以单个字符的形式进行压缩并非最优压缩形式选择;

si+1≤si+1,则判断以单个字符的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

在本发明实施例上述的基于动态规划的无损压缩方法中,所述根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,包括:

当当前字符选择以重复字符串的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+li>si+li,则判断以重复字符串的形式进行压缩并非最优压缩形式选择;

si+li≤si+li,则判断以重复字符串的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,li为当前字符所选的重复字符串的长度,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

在本发明实施例上述的基于动态规划的无损压缩方法中,所述根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,还包括:

按照预设路径信息规则为待压缩字符串中每个字符增设相应的路径信息,所述预设路径信息规则为:当当前字符以单个字符的形式进行压缩时,与当前字符对比的字符的路径信息记为1;当当前字符以重复字符串的形式进行压缩时,与当前字符对比的字符的路径信息记为li,li为当前字符所选的重复字符串的长度。

在本发明实施例上述的基于动态规划的无损压缩方法中,所述根据每个字符的压缩形式选择,确定待压缩字符串的整体压缩选择并输出压缩结果,包括:按照预设顺序倒序的方式,并根据待压缩字符串中每个字符对应的路径信息,确定待压缩字符串的整体压缩选择。

另一方面,本发明实施例提供了一种基于动态规划的无损压缩装置,所述装置包括:

获取模块,用于根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息,所述重复字符串信息包括:重复字符串与其匹配对象之间的距离、重复字符串的最大匹配长度;

路径模块,用于根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,所述压缩形式包括:以单个字符的形式进行压缩、以重复字符串的形式进行压缩。

确定模块,用于根据每个字符的压缩形式选择,确定待压缩字符串的整体压缩选择并输出压缩结果。

在本发明实施例上述的基于动态规划的无损压缩装置中,所述路径模块,还用于当当前字符选择以单个字符的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+1>si+1,则判断以单个字符的形式进行压缩并非最优压缩形式选择;

si+1≤si+1,则判断以单个字符的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

在本发明实施例上述的基于动态规划的无损压缩装置中,所述路径模块,还用于当当前字符选择以重复字符串的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+li>si+li,则判断以重复字符串的形式进行压缩并非最优压缩形式选择;

si+li≤si+li,则判断以重复字符串的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,li为当前字符所选的重复字符串的长度,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

在本发明实施例上述的基于动态规划的无损压缩装置中,所述路径模块,还用于按照预设路径信息规则为待压缩字符串中每个字符增设相应的路径信息,所述预设路径信息规则为:当当前字符以单个字符的形式进行压缩时,与当前字符对比的字符的路径信息记为1;当当前字符以重复字符串的形式进行压缩时,与当前字符对比的字符的路径信息记为li,li为当前字符所选的重复字符串的长度。

在本发明实施例上述的基于动态规划的无损压缩装置中,所述确认模块,还用于按照预设顺序倒序的方式,并根据待压缩字符串中每个字符对应的路径信息,确定待压缩字符串的整体压缩选择。

本发明实施例提供的技术方案带来的有益效果是:

通过根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息;然后根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,并确定待压缩字符串的整体压缩选择。这样上述基于动态规划的无损压缩方法,在进行无损压缩的同时,能够从全局的角度出发,得出待压缩字符串中每个字符的更优的压缩形式选择,以使整个待压缩字符串的压缩率更高,压缩后输出的字符更少。

附图说明

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

图1是本发明实施例一提供的一种基于动态规划的无损压缩方法流程图;

图2是本发明实施例一提供的一种重复字符串发现算法示例图;

图3是本发明实施例一提供的一种动态压缩形式选择算法示例图;

图4是本发明实施例二提供的一种基于动态规划的无损压缩装置结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

实施例一

本发明实施例提供了一种基于动态规划的无损压缩方法,适用于提高无损压缩算法的整体字符压缩率,参见图1,该方法可以包括:

步骤s11,根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息,该重复字符串信息可以包括:重复字符串与其匹配对象之间的距离、重复字符串的最大匹配长度。

在本实施例中,待压缩的字符串一般是按照预设顺序进行压缩的,例如在图2中的字符串“aaabcdaaaafaaaabcd”可以按照从左到右的顺序进行压缩,解压时也采用相同的顺序进行逐步解压。在压缩过程中,待压缩的字符串里,有的字符可以与前面的字符串匹配到重复字符串,对这些重复字符串可以进行压缩;当然,也有字符没有匹配的重复字符串,只能以原有的单个字符形式存储到压缩结果中,例如:图2中索引数11处的“aaaa”可以与索引数6处的“aaaa”相匹配。

在本实施例中,可压缩的字符对应的重复字符串信息包括:重复字符串与其匹配对象之间的距离,例如:图2中索引数11处的“aaaa与索引数6处的“aaaa”之间的距离为5;重复字符串的最大匹配长度,例如:图2中索引数11处的“aaaa”的最大匹配长度为4。需要说明的是,上述重复字符串信息相互配合,可用于实现无损压缩和无损解压。

下面,简要介绍一下重复字符串发现算法:

类型定义:

其中,distance为重复字符串与其匹配对象之间的距离,length为重复字符串的最大匹配长度,buffer_length为待压缩字符串的总长度(例如图2中buffer_length为18)。

步骤s12,根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,压缩形式包括:以单个字符的形式进行压缩、以重复字符串的形式进行压缩。

需要说明的是,现有的贪心算法中,并不会对字符进行压缩形式的选择,当字符存在重复字符串时,就会以重复字符串的形式进行压缩,否则就以单个字符的形式进行压缩。而在本实施例中,则会允许每个字符进行压缩形式的选择。

具体地,参见图3,上述步骤s12可以通过如下方式实现:

当当前字符选择以单个字符的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+1>si+1,则判断以单个字符的形式进行压缩并非最优压缩形式选择;

si+1≤si+1,则判断以单个字符的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

或者,

当当前字符选择以重复字符串的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+li>si+li,则判断以重复字符串的形式进行压缩并非最优压缩形式选择;

si+li≤si+li,则判断以重复字符串的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,li为当前字符所选的重复字符串的长度,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

在本实施例中,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量,例如:图2中索引数11处的“a”字符对应的为12,索引数12处的“a”字符对应的为12,索引数12之后的字符对应的都为13。需要说明的是,在图2中索引数7的“aaa”没有与索引数0的“aaa”相匹配,是因为设置有重复字符串的最大匹配长度至少需要大于或等于4,过于短小的重复字符串进行压缩会增大计算量,严重降低压缩效率,且不会提高很多数据压缩率,因此,选择合适的重复字符串的最小长度阀值,有助于平衡压缩效率和压缩率。

进一步地,在步骤s12中,还有一步重要的工作,就是按照预设路径信息规则为待压缩字符串中每个字符增设相应的路径信息,预设路径信息规则为:当当前字符以单个字符的形式进行压缩时,与当前字符对比的字符的路径信息记为1;当当前字符以重复字符串的形式进行压缩时,与当前字符对比的字符的路径信息记为li,li为当前字符所选的重复字符串的长度。

步骤s13,根据每个字符的压缩形式选择,确定待压缩字符串的整体压缩选择并输出压缩结果。

具体地,上述步骤s13可以通过如下方式实现:

按照预设顺序倒序的方式,并根据待压缩字符串中每个字符对应的路径信息,确定待压缩字符串的整体压缩选择。

在本实施例中,对于一个长度为symbol_length的输入结果缓冲区,假设缓冲区从左向右依次排序。为了求解最优的重复字符串选择方案。参见图3,对每一个输入结果增加两个计算变量,一个是symbol_min_count(即按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量),一个是back_trace(即路径信息)。其中,symbol_min_count用于存放从字符串到目前字符的最少symbol数量,换句话说,就是无论采用何种选择方式,到该字符的最小symbol数量。back_trace是用来辅助重建结果的数据,表示目前最优的选择方案是从那条路径上计算得来的。

参见图3,当前字符以单字符形式选择,这样的话,则第i+1个字符的最小符号数为min(si+1,si+1),如果有si+1>si+1则说明之前存在某种选择方式能够使得到达i+1字符的符号数目更少。如果有si+1≤si+1则说明以单字符形式选择当前字符的话,第i+1个字符最终的符号数最少,在这一选择下,需要将back_trace的数值bi+1修改为1,表示取得符号数最小的方案是直接输出前一个字符。

当前字符以匹配重复串的形式选择,这样的话,则第i+li个字符的最小符号数为min(si+li,si+li),如果有si+li>si+li则说明之前存在某种选择方式能够使得到达i+li字符的符号数目更少。如果有si+li≤si+li则说明以匹配重复串的形式选择的话,第i+li字符的符号数目更少,在这一选择下,需要将back_trace的值bi+li修改为li,表示取得符号数最小的方案是匹配重复串的形式。

上述基于动态规划的无损压缩方法,需要对输入数据进行两遍扫描,第一遍从小索引数到大索引数(索引数为图2或图3中第一排指示字符位置的标号),进行动态计算,计算出每个字符的s值并确认其相应的压缩形式,第二遍,从大索引数到小索引数,进行逆向回溯,找到每个字符对应的压缩形式(单字符形式压缩,或重复字符串的形式压缩),从而确认待压缩字符串的最优压缩方式,即整个字符串的压缩率最高的压缩方式。

下面具体介绍一下预设动态压缩形式选择算法:

本发明实施例通过根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息;然后根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,并确定待压缩字符串的整体压缩选择。这样上述基于动态规划的无损压缩方法,在进行无损压缩的同时,能够从全局的角度出发,得出待压缩字符串中每个字符的更优的压缩形式选择,以使整个待压缩字符串的压缩率更高,压缩后输出的字符更少。

实施例二

本发明实施例提供了一种基于动态规划的无损压缩装置,执行了实施例一所述的方法,参见图4,该装置可以包括:获取模块100、路径模块200、确认模块300。

获取模块100,用于根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息,该重复字符串信息可以包括:重复字符串与其匹配对象之间的距离、重复字符串的最大匹配长度。

在本实施例中,待压缩的字符串一般是按照预设顺序进行压缩的,解压时也采用相同的顺序进行逐步解压。在压缩过程中,待压缩的字符串里,有的字符可以与前面的字符串匹配到重复字符串,对这些重复字符串可以进行压缩;当然,也有字符没有匹配的重复字符串,只能以原有的单个字符形式存储到压缩结果中。

在本实施例中,可压缩的字符对应的重复字符串信息包括:重复字符串与其匹配对象之间的距离;重复字符串的最大匹配长度,上述重复字符串信息相互配合,可用于实现无损压缩和无损解压。

路径模块200,用于根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,压缩形式包括:以单个字符的形式进行压缩、以重复字符串的形式进行压缩。

需要说明的是,现有的贪心算法中,并不会给于字符进行压缩形式的选择,当字符存在重复字符串时,就会以重复字符串的形式进行压缩,否则就以单个字符的形式进行压缩。而在本实施例中,则会允许每个字符进行压缩形式的选择。

确定模块300,用于根据每个字符的压缩形式选择,确定待压缩字符串的整体压缩选择并输出压缩结果。

具体地,路径模块200,还用于当当前字符选择以单个字符的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+1>si+1,则判断以单个字符的形式进行压缩并非最优压缩形式选择;

si+1≤si+1,则判断以单个字符的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

路径模块200,还用于当当前字符选择以重复字符串的形式进行压缩时,根据如下判断规则进行最优压缩形式选择:

si+li>si+li,则判断以重复字符串的形式进行压缩并非最优压缩形式选择;

si+li≤si+li,则判断以重复字符串的形式进行压缩为最优压缩形式选择;

其中,i表示当前字符所处的索引数,li为当前字符所选的重复字符串的长度,si表示按预设顺序从待压缩字符串起始字符开始到当前字符进行压缩时最小输出字符数量。

进一步地,路径模块200,还可以用于按照预设路径信息规则为待压缩字符串中每个字符增设相应的路径信息,预设路径信息规则为:当当前字符以单个字符的形式进行压缩时,与当前字符对比的字符的路径信息记为1;当当前字符以重复字符串的形式进行压缩时,与当前字符对比的字符的路径信息记为li,li为当前字符所选的重复字符串的长度。

进一步地,确认模块300,还用于按照预设顺序倒序的方式,并根据待压缩字符串中每个字符对应的路径信息,确定待压缩字符串的整体压缩选择。

在本实施例中,确认模块300,其主要工作是以路径模块200在推测路径过程中所记录的路径信息后,反推确定最终所选择的路径。具体确定时,需要对输入数据进行两遍扫描,第一遍从小索引数到大索引数(索引数为图2或图3中第一排指示字符位置的标号),进行动态计算,计算出每个字符的s值并确认其相应的压缩形式(输出至临时缓存,此时输出的结果为倒序),第二遍,从大索引数到小索引数,进行逆向回溯,找到每个字符对应的压缩形式(单字符形式压缩,或重复字符串的形式压缩),从而确认待压缩字符串的最优压缩方式,即整个字符串的压缩率最高的压缩方式(将临时缓存内的输出进行倒序,得到正序输出)。

具体地算法如下:

本发明实施例通过根据预设的重复字符串发现算法,按照预设顺序获取待压缩字符串中每个可压缩的字符对应的重复字符串信息;然后根据预设动态压缩形式选择算法,按照预设顺序确认待压缩字符串中每个字符的压缩形式选择,并确定待压缩字符串的整体压缩选择。这样上述基于动态规划的无损压缩方法,在进行无损压缩的同时,能够从全局的角度出发,得出待压缩字符串中每个字符的更优的压缩形式选择,以使整个待压缩字符串的压缩率更高,压缩后输出的字符更少。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是:上述实施例提供的基于动态规划的无损压缩装置在实现基于动态规划的无损压缩方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于动态规划的无损压缩装置与基于动态规划的无损压缩方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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