CN1217259C - 用于数据压缩的方法和装置 - Google Patents
用于数据压缩的方法和装置 Download PDFInfo
- Publication number
- CN1217259C CN1217259C CN02121902.8A CN02121902A CN1217259C CN 1217259 C CN1217259 C CN 1217259C CN 02121902 A CN02121902 A CN 02121902A CN 1217259 C CN1217259 C CN 1217259C
- Authority
- CN
- China
- Prior art keywords
- data
- input data
- storage area
- dictionary
- information
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion 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/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明在利用高速解压缩的同时进行高速无损耗数据压缩。首先保留和初始化由第一和第二存储区域构成的词典区域。第一存储区域存储将读取指针作为索引读取的数据的前2个字节,并在所读取数据第三字节之后的数据未在以前输入数据中出现时保持为0,如果出现,则持有存储了后续数据相关信息的第二存储区域的地址信息。第二存储区域存储后面的1字节数据,以及匹配读取的3字节数据的以前输入数据位置的第一个地址,在后面的1字节数据无其他模式时为0,如果有,则持有链接该区域与存储了另一模式数据的另一第二存储区域的地址。比较以前输入数据与位于[以前输入数据位置+3字节]的数据,将最长匹配长度L及其地址编码并输出。
Description
技术领域
本发明涉及一种用于对数字式数据进行可逆压缩的方法和装置。
发明背景
在各种无损耗(可逆)数据压缩方法中,有许多方法采用由Ziv和Lempel发明的LZ77/LZ78作为基础。
根据LZ77,系统对一个存储了以前的输入数据的窗口缓冲区进行查询,以查找一个与当前输入数据匹配的最长匹配字符串,所找到的最长匹配字符串的位置和长度作为编码数据输出,从而可实现数据压缩。此方法在美国专利4,054,951(Jackson等人)中以及Ziv,J.和Lempel,A.,所著的“A universal algorithm for sequential datacompression”(连续数据压缩的通用算法,刊登在IEEE Transactionon Information Theory,Vol.23,No.3,pp.337-343,May 1977中)中进行了介绍。
此外,根据LZ78,系统还对基于以前的输入数据产生的词典进行查询,以查找一个与当前输入数据匹配的最长匹配字符串,与所找到的数据字符串对应的存储代码将被输出。此外,通过将查找到的最长匹配字符串与下一个字符链接而产生的一个新数据字符串,还在词典中另外注册,以便在下一个搜索中产生一个较长的匹配。此方法在美国专利4,464,650,美国专利4,558,302以及Ziv,J.和Lempel,A.所著的“Compression of individual sequences via variable-ratecoding”(通过可变速率编码对单个序列的压缩)(刊登在IEEETransaction on Information Theory,Vol.24,No.5,pp.530-536,May 1978中)中进行了介绍。
一个2到32KB的缓冲区可适合作为LZ77中使用的窗口缓冲区。由于要将输入数据与存储在窗口缓冲区中的数据进行比较,所以最长匹配搜索的范围仅限于最多32KB的以前的输入数据。相比之下,在LZ78中,搜索的范围不像在LZ77中那样仅限于最近的数据。在LZ78中,最长匹配搜索的范围可以扩展到与词典的大小相同的以前的输入数据,而无论窗口缓冲区的大小如何。因此,与LZ77使用的是近关连这一点不同,LZ78使用的是远关连,因此通用性更强。
此外,在LZ78中,压缩是仅仅通过当前输入数据和词典之间的比较来实现的。可以对词典的结构进行改造,以使它能够更好地适应数据搜索。相应地,最长匹配搜索可以以很高的速度执行。
但是,在LZ78中,在进行数据解压缩的同时必须产生词典并加以更新。相比之下,在LZ77中,由于窗口缓冲区中的数据字符串的位置和偏移量是作为代码数据提供的,因此在进行解压缩时不必产生词典。因此,它的解压缩的速度可以比LZ78的速度更快。
换句话说,LZ78在数据方面具有较强的通用性,能够进行高速的数据压缩。而LZ77的数据通用性较差,但能够进行高速的解压缩处理。
在使用LZ77进行压缩时,需要查找存储了以前的输入数据的窗口缓冲区,以便找到与当前输入数据匹配的最长匹配。为了提高这种处理的速度,美国专利4,701,745(J.R.Waterworth)、美国专利5,049,881(D.K.Gibson)、美国专利5,051,745(P.W.Katz)和RFC-1951(P.Deutsch所著“Deflate Compressed Data FormatSpecification version 1.3”(缩小压缩数据格式规范版本1.3))中介绍了多种散列搜索方法。下面我们将对这些已知文件所提出的散列搜索方法进行介绍。
图1是一个针对散列搜索的说明视图。附图标记10表示一个窗口缓冲区。直线P左边的区域存储了在压缩之前已经压缩的以前的输入数据。直线P右边的区域存储了将要被压缩的输入数据。假定直线P的左边区域的大小是32KB。在以直线P作为原始位置的情况下,越是往左边移动,表示在直线P的左边区域的位置的偏移量就逐渐增大。
附图标记11表示一个散列数组H[i],该数组存储了窗口缓冲区的偏移量,其元素的数量是215=32768个项。偏移量的长度是2字节。
图3显示了压缩处理的步骤。本文根据此流程图提供了说明。
在步骤301中,给表示当前输入数据字符串的指针C提供了一个初始值(输入数据的首地址)。在步骤302中,H[i]被初始化为0。由于偏移量为0是不可能的,因此它表示没有数据存储在偏移量中。在步骤303中,判断是否有更多输入数据需要压缩。如果没有,则控制结束。如果有,则控制将进入到步骤304。
图1中的附图标记12表示当前输入数据的字符串。假设开头三个字符由数组C[0]到C[2]表示,那么散列值h通过图2中所示的方法计算出(图3中的步骤304)。
请注意,在图2中,参考字母^表示一个“异或”。其他参考字母则遵守C语言。“x<<y”表示x向更高的位方向移动y位。“x&y”表示以位为单位对x和y执行“与”运算。在计算出散列值h之后,在步骤305中将H[h]与0进行比较。如果H[h]为0,则表示具有散列值h的三个字符字符串尚未出现。那么,在步骤306中,当前输入数据的当前偏移量(第一个字符的偏移量)存储在H[h]中。接下来在步骤307中,将输出具有1字节的数据C[0]。在步骤308中,指针C增加1以对下一个输入数据进行处理,并且控制将返回到步骤303。
如果在步骤305中H[h]不是0,则表示在以前的输入数据中已经出现了具有与计算出的散列值h相同的值的三个字符的字符串。之后提取出字符串所在的H[h]的位置m(步骤309)。然后在步骤310中,将当前输入数据与位于位置m的以前的输入数据进行比较,以获取一个最长匹配长度L。在步骤311中,对m和L都要进行霍夫曼编码,并输出编码后的数据。在获取了最长匹配长度L之后,在步骤312中指针C将增加L,控制将返回到步骤303。
在LZ77的压缩处理中,处理速度可以通过使用上面介绍的散列搜索来提高。但是,当前输入数据和以前的输入数据之间的比较不会像在LZ78中那样扩展到窗口缓冲区以外过去输入的数据。因此,例如,对于在一个32KB(这是窗口缓冲区的大小)周期内重复的数据,没有任何压缩的效果。同时根据LZ78的压缩方法,由于在解压缩时产生和更新词典是必需的,因此会产生开销。因此,解压缩处理速度比LZ77稍慢。
为提高解压缩处理的速度,在解压缩时最好使用表示偏移量和长度的代码数据,以从窗口缓冲区中提取出对应的数据字符串。但是,若对数据的偏移量和长度进行编码,会将最长匹配搜索的目标限制到在压缩处理中存储在窗口缓冲区中的以前的输入数据。因此,同时具有两方面的优点(提高解压缩速度以及在压缩时展开数据搜索目标)是困难的。
发明内容
我们针对传统的问题提出了本发明,本发明的目标是提供一种数据压缩方法、装置、计算机程序以及存储介质,它们可以以很高的速度实现无损耗数据压缩,同时也可以利用高速的解压缩。
根据本发明,前述的目标通过提供以下数据压缩方法来达到:通过搜索匹配输入数据的以前的输入数据,对该输入的数据进行编码,该方法包括下列步骤:保留用于临时存储输入数据的存储区域;保留一个词典,该词典用于彼此关联地存储与以前的输入数据相关的输入数据相关信息和输入数据的位置信息,所述词典包括一个元素区域,该元素区域包括用于将该元素区域链接到另一个元素区域的链接信息,所述位置信息表示存储区域中的位置;在该存储区域中注册与以前的输入数据相关的输入数据相关信息,以及输入数据的位置信息;以及根据所述链接信息跟踪该元素区域,以搜索词典中的与输入数据相关的信息,该信息对应于与当前输入数据相关的输入数据相关信息,然后获取与输入数据相关信息相关的位置信息,通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始;以及基于最长匹配长度和位置,生成编码数据。
根据本发明的另一方面,还提供了一种数据压缩方法,通过搜索匹配输入数据的以前的输入数据对所述输入数据进行编码,该方法包括下列步骤:保留用于临时存储输入数据的存储区域;保留一个以第一存储区域和第二存储区域构成的词典,第一存储区域彼此关联地存储了与输入数据相关的代表数据和分类信息,而第二存储区域彼此关联地存储了每一个分类信息的与输入数据相关的辅助数据和位置信息,所述位置信息表示存储区域中的位置;以及搜索词典,所述搜索步骤包括第一搜索步骤和第二搜索步骤,其特征在于:在所述第一搜索步骤中,使用代表数据作为关键字对第一存储区域进行搜索,以及在所述第二搜索步骤中,使用辅助数据作为关键字对第二存储区域进行搜索,代表数据从输入数据引出,以在所述第一搜索步骤中搜索第一存储区域,从而获取与代表数据相关的分类信息,第二存储区域是由分类信息指定的,在所述第二搜索步骤中使用从输入数据引出的辅助数据作为关键字对该第二存储区域进行搜索,并获取与辅助数据相关的位置信息,以及基于最长匹配长度和位置信息,生成编码数据,并将所述编码数据输出到输出存储区,其中,在所述搜索步骤中,通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始。
根据本发明的再一方面,还提供了一种数据压缩装置,通过搜索匹配输入数据的以前的输入数据对该输入数据进行编码,该装置包括:第一保留存储区域,用于临时存储输入数据;第二保留装置,用于保留一个词典,该词典彼此关联地存储与以前的输入数据相关的输入数据相关信息和输入数据的位置信息,所述词典包括一个元素区域,该元素区域包括用于将该元素区域链接到另一个元素区域的链接信息,所述位置信息表示存储区域中的位置;注册装置,用于在该存储区域中注册与以前的输入数据相关的输入数据相关信息,以及输入数据的位置信息;以及编码数据生成装置,用于根据链接信息跟踪该元素区域,以搜索词典中的与输入数据相关的信息,该信息对应于与当前输入数据相关的输入数据相关信息,然后获取与输入数据相关信息相关的位置信息;搜索装置,通过将当前的输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始;以及生成装置,用于基于最长匹配长度和位置生成编码数据。
根据本发明的再一方面,还提供了一种数据压缩装置,通过搜索匹配输入数据的以前的输入数据对输入数据进行编码,该装置包括:第一保留装置,用于保留用来临时存储输入数据的存储区域;第二保留装置,保留一个以第一存储区域和第二存储区域构成的词典,第一存储区域彼此关联地存储了与输入数据相关的代表数据和分类信息,而第二存储区域彼此关联地存储了每一个分类信息的与输入数据相关的辅助数据和位置信息,所述位置信息表示存储区域中的位置;以及搜索装置,用于搜索词典,所述搜索装置包括第一搜索装置和第二搜索装置,其特征在于:所述第一搜索装置使用代表数据作为关键字对第一存储区域进行搜索,以及所述第二搜索装置使用辅助数据作为关键字对第二存储区域进行搜索,代表数据从输入数据引出,以通过所述第一搜索装置搜索第一存储区域,从而获取与代表数据相关的分类信息,第二存储区域是由分类信息指定的,使用从输入数据引出的辅助数据作为关键字对第二存储区域进行搜索,并获取与辅助数据相关的代码生成信息,以及生成装置,基于最长匹配长度和位置信息生成编码数据,并将编码数据输出到输出存储单元,其中,所述搜索装置通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始。
通过下面结合附图的说明,本发明的其他特性将变得一目了然,在附图中相同的参考字符在整个图中表示相同的或相似的部分。
附图说明
本说明中所包括的并且构成本说明的组成部分的附图,说明了本发明的实施例,并与本说明一起,用来阐述本发明的原理。
图1是对传统压缩方法LZ77的一个说明图;
图2是显示散列函数的操作步骤的流程图;
图3是一个显示传统的压缩处理步骤的流程图;
图4是一个显示根据第一个实施例的词典结构的视图;
图5是一个显示根据第一个实施例的元素区域的结构的视图;
图6是一个显示根据第一个实施例的压缩处理步骤的流程图;
图7A到7E是显示窗口缓冲区的转换的说明视图;
图8是一个显示自由元素控制区域的结构的视图;
图9A和9B显示了匹配和插入处理的源代码;
图10是一个显示根据第二个实施例的元素区域和它的结构的视图;
图11是一个显示根据第二个实施例的词典结构的视图;
图12是一个显示根据第四个实施例的元素区域和它的结构的视图;
图13是一个显示根据第五个实施例的词典结构的视图;
图14是一个显示根据第五个实施例的元素区域和它的结构的视图;
图15是一个显示根据第五个实施例的压缩处理步骤的流程图;
图16是一个显示根据第五个实施例的词典的内容的表;以及
图17是一个作为本发明的一个实施例的装置的方框图。
具体实施方式
现在本文将参照附图对本发明的优选实施例进行详细介绍。
<第一个实施例>
图17是一个显示根据第一个实施例的装置的方框图。参看图17,附图标记201表示一个控制整个装置的CPU;202表示存储了引导程序、BIOS等等的ROM;203表示用作CPU 201的工作区域的RAM,其特征在于根据本发明的实施例的OS和压缩程序在其中加载和执行;204表示存储了OS、压缩程序以及诸如将要被压缩的文件之类的各种文件的硬盘驱动器(HDD);205表示用于连接到局域网或因特网的通信接口单元(如调制解调器或网卡),206表示键盘和鼠标;207表示集成了用于显示的内存的显示控制器和控制显示的控制器;208表示诸如CRT之类的显示装置。
在图17的结构中,当该装置的电源打开之后,存储在ROM202中的程序就会启动,OS将从HDD加载到RAM 203,根据本实施例的压缩程序在OS中启动。请注意,可以使用任何一种OS。
在下文的说明中,假设该装置中的OS已经运行,存储在HDD204中的将要被压缩的文件也已经指定,压缩程序也已经启动。请注意,将要被压缩的文件不一定存储在HDD 204中,可以存储在任何存储介质中。此外,虽然下面的说明假定压缩之后的数据将要输出到HDD中,但压缩之后的数据可以输出到任何目标。此外,我们还假定下面说明中的每一个区域,包括数组的变量,都保留在RAM 203中。
图4到8是第一个实施例的说明视图。图4显示了一个词典。附图标记40表示一个标题数组X[i],它相当于第一个存储区域;41到44表示一个元素区域,相当于第二个存储区域。标题数组X[i]中的元素数量是216=65,536。数组的每一元素(4字节)都有一个元素区域地址。因此,标题数组的大小是256KB(=4x65536)。
元素区域41到44中的每一个元素区域都有一个以C语言写成的数据结构,如图5所示。一个变量C(对应于411)可以有1个字节的数据。一个offset(对应于412)可以持有缓冲区中一个偏移量的数据,该数据作为数据生成信息。一个next(对应于413)可以持有一个元素区域的地址,用于链接各个元素区域。一个dummy是一个调整变量,用于使数据结构的内存边界为4字节的倍数。
在第一个实施例中,长度为3字节的一个数据字符串可以在词典中注册,如图4所示。图4显示了这样一种状态:在该状态中注册了四个有三个字符组成的字符串:“abc”、“abd”、“abs”和“cup”。由三个字符组成的字符串分别对应于元素区域41、42、43和44。以字符串“abc”为例,开头两个字节“ab”在二进制中表示为0x6162。在标题数组[0x6162]中存储了地址41。在元素区域41中,只存储了第三个字节“c”,由于开头两个字节是显然的。offset412具有过去出现的三字符的字符串的相同位置。next413持有一个指向以升序排列的元素区域中下一个元素区域的指针,其开头两个字节是“ab”,与区域41一样。42中的数据也以相似的方式存储。43中的数据也以相似的方式存储,但next除外。为了指出链的结尾,43的next持有对于next不可能的值,在这种情况下为NULL(零)。44的next也持有NULL以指出链的结尾。
图7A到7E是一个窗口缓冲区的说明视图。根据本实施例,将在以前的输入数据中进行搜索,以查找与当前输入数据匹配的最长匹配数据。搜索的范围是最新输入的32KB数据。缓冲区有64KB的区域。图7A到7E按顺序显示了随着压缩的进行缓冲区的状态变化情况。图7A显示了没有数据被压缩的状态,即,没有以前的输入数据。因此,表示当前输入数据的位置的一个变量str是0。图7B显示了压缩处理正在进行的状态,并有一些以前的输入数据存储在缓冲区中。变量str持有一些值(0<str<32KB)。图7C显示了在缓冲区中存储了32KB的以前的输入数据这一状态,因此str=32KB。图7D显示了压缩处理在进一步进行的状态,因此32KB<str<64KB。在这一阶段,虽然在缓冲区中存储的以前的输入数据大于32KB,作为搜索目标的数据是从str指定的位置开始的最新输入的32KB数据。图7E显示了str达到64KB的状态。由于在图7E所示的状态中压缩处理无法进行,存储在缓冲区中的32KB数据转移到左边,以实现图7C中所示的状态。此后,图7C到7E显示的状态不断重复。
在下文中,我们将参照图6中的流程图对根据第一个实施例的压缩处理进行详细介绍。在步骤601中,在开始压缩处理之前先执行初始化。更具体来讲,将执行下面的处理:
-向标题数组X[i]的所有元素输入NULL
-初始化自由元素控制区域;以及
-变量str置0,表示当前输入数据的位置。
在图8中说明了一个自由元素控制区域。在图8中,附图标记801表示一个元素控制区域;802表示一个自由区域首部指针。元素控制区域用一个数组W[i]表示,并且数组W[i]的每一个元素都有一个如图5所示的数据结构。假定数组的元素的数量是一个适当的值FREEMAX(例如,60,000)。为初始化自由元素控制区域,在自由区域首部指针head中设置地址W[0],在W[i]的成员变量next中设置地址W[i+1]。这一设置对于所有的“i”都执行。NULL在最后一个变量W[FREEMAX-1]的变量next中设置。图8说明了上面的处理过程。
接下来在图6中的步骤602中,判断是否有输入数据需要压缩。如果没有,控制就结束,如果有,控制就进入步骤603。
在下文中,图7中显示的窗口缓冲区通过Window[i]来表示。数组Window[i]的每一个元素都有1个字节。变量index是一个2字节变量,包括Window[str]和Window[str+l]的2字节都设置成这个2字节变量。index相当于输入数据的代表数据。在变量m中置0。
接下来在步骤604中,在词典中搜索与三字符字符串相同的数据(与输入数据相关的信息),包括Window[str]、Window[str+l]和Window[str+2]。如果在词典中没有找到相同的数据,则这个三字符字符串在词典(40,41)中进行注册。如果该三字符字符串的头两个字符(代表数据)在标题数组40中找到一个匹配(如果X[index]≠O),那么其余一个字符(辅助数据)在元素区域41中注册。如果头两个字符没有找到一个匹配(如果X[index]=0),那么元素区域41的地址在头两个字符指定的标题数组40的对应位置中注册。图9A和9B显示了一个以C语言编写的实现步骤604中的处理的一个程序的例子。Window[str+2]对应于输入数据的辅助数据。
假设三字符的字符串是“abd”,该词典具有图4显示的状态,它的index是0x6162(对应于“ab”的二进制数)。X[index]被引用,找到了0之外的值。这一值用作一个指针,指向区域41。在区域41中,411中的“c”与“abd”的第三个字节(它是辅助数据)进行比较。由于没有找到匹配,413的指针被跟踪到区域42。在区域42中,421中的“d”与“abd”的第三个字节进行比较,并找到一个匹配。换句话说,找到了与当前输入数据相同的三字符字符串。由于422中的值“Pd”指出存储在缓冲区中的以前输入的三字符字符串的位置,在m中置“Pd”,当前指针str的一个地址存储在“Pd”的区域。
假设三字符的字符串是“abe”的情况,即使数据被跟踪到区域43,也没有找到一个匹配。搜索的结果是发现431中的“s”有比“e”(“abe”的第三个字节)更大的二进制值。由于区域41到43是按照第三个字符的二进制值顺序逐渐链接在一起的,即使有一个元素区域进一步链接到区域43也是如此,显然,也不会找到与三字符的字符串的一个匹配。因此,搜索将终止。然后,其中变量c是“e”的一个新元素区域在区域42和43之间插入。为进行这种插入,需要从自由元素控制区域中获取一个未使用的区域。除此之外,还有一些情况将一个新元素区域添加到链的顶部或链的底部。在图9A和9B中将介绍它的适当的处理方法。换句话说,指针的地址被更新以按照出现的字符代码的顺序逐渐排列这些链。
请注意,缓冲区中的位置由等于或大于1的值来表示,以1作为一个原始位置。如果m=0,则说明没有找到三字符字符串的一个匹配。
接下来在步骤605中,判断是否在词典中成功地找到一个匹配(找到相同的三字符字符串,即,m≠0)。
如果m≠0,那么在步骤606中,在存储在缓冲区中m+3中的数据和输入数据的第四个字节之间通过线性搜索进行比较,以获取最长匹配长度L。
在下文中,我们将对此实施例的优点进行说明,该实施例优于美国专利4,701,745等等提出的散列搜索。
在已知的散列搜索中,散列数组持有一个彼此关联的散列值和三字符字符串的缓冲区位置。基于输入的数据的三个字符由散列函数获取一个散列值,也得出存储在相同的散列值的散列数组中的一个缓冲区位置m。在这种情况下,从不同的三字符字符串获取的散列值可能有相同的值。为此,要获取一个最长匹配长度,从位置m+3开始搜索是错误的。搜索必须从位置m开始,即,输入数据的第一个字符必须与存储在缓冲区的位置m中的数据进行比较。相比之下,根据本发明,由于比较的数量较小,因此本发明的优势较强。
回过头来再参看图6中的步骤607,编码数据已生成和输出。通过按顺序输出m和(L-1)生成编码数据,其特征在于m由一个16位二进制值来表示,其中最有效位始终是1,而(L-1)由8位二进制值来表示。请注意,由于L最多只能表示256个字节,步骤606中的最长匹配搜索在256字节终止。当1字节以未经压缩的形式输出时,位“0”被加在未经压缩的1字节的前面并输出。
作为另一种编码方法,L和m在输出之前可以经过霍夫曼编码法编码,如Deutsch,L.P.“DEFLATE Compressed Data FormatSpecification”(缩小压缩数据格式规范)RFC-1951所描述。霍夫曼编码法是一种可变长度编码形式。也可以使用其他可变长度编码法。
接下来在步骤608中,在变量str中置str+L,表示当前输入数据的位置,从而更新该变量。
如果在步骤605中匹配不成功,那么,在步骤609中,1字节的Window[str]作为在首部具有位“0”的9位数据输出,或者如上述RFC-1951中介绍的采用霍夫曼编码法编码后再输出。
接下来在步骤610中,在str中置str+1以更新变量str,控制将进入步骤611。
更新变量str之后,缓冲区可以作为图7E中显示的状态溢出。如果缓冲区不溢出,控制将返回到步骤602以重复602到608的处理。如果缓冲区溢出,那么如上所述,32KB的数据转移到缓冲区的左边,将缓冲区的状态从图7E改变为7C。在此阶段,存储在词典的元素区域中的区域412、422、432、....的所有偏移量都必须减少32KB(32,768)。作为减少的结果,如果偏移量等于或小于0,对应的元素区域将从词典中删除并返回到自由元素控制区域。此操作的实现方式是:改变变量next的值并重写图8中的变量head,如图9A中的源代码的宏函数RETURN_LIST所示。这是一种普通的列表处理技术。
从自由元素控制区域获得未使用的元素区域或将不必要的元素区域返回到自由元素控制区域的结果是,自由元素控制区域不再保持图8中的上面的图形中显示的初始状态,但将具有如图8的下面的图形所示的复杂的链接。很容易理解,所使用的元素区域不是最初准备的连续的自由元素控制区域。
应该从上面的说明中了解到,根据本发明的词典的存储区域不同于在散列数组中的连续的存储区域。在步骤612中的缓冲区移动结束之后,控制将返回到步骤602以重复处理。
<第二个实施例>
接下来,我们将参照图10和11介绍根据第二个实施例的操作。图10是一个元素区域的说明视图。附图标记101表示一个元素区域;1011表示辅助数据;1012表示作为代码生成信息的offset;1013表示一个指向子元素区域的指针;1014表示一个指向下一个元素区域的指针。
图11是一个说明词典的结构的视图。附图标记1101表示一个包括256个元素的数组,该数组对应于上面介绍的第一个实施例的存储区域。在数组的每一个元素中,存储了元素区域的指针。换句话说,指针相当于分类数据。可以从标题数组的每一个元素跟踪的整个元素区域对应于第二个存储区域。图11中的元素区域1102到1104是对应于三字符字符串的第二个字符的区域,元素区域1105到1107是对应于三字符字符串的第三个字符的区域。
根据第二个实施例,标题数组的索引对应于三字符字符串的第一个字符(与输入数据相关的信息)。此索引相当于输入数据的代表数据。三字符字符串的第二个和第三个字符对应于辅助数据。请注意,由于使用一个字符(1字节)作为标题数组的索引,标题数组的条目是256个。
第二个实施例的处理流程基本上与第一个实施例的图6中显示的处理流程相同。但是,步骤603和604却不同,因为词典结构不同于第一个实施例的词典结构。
例如,在图11所示的词典的状态中,假定要搜索三字符字符串“acz”。在index中设置“a”(它是代表数据)的一个二进制值,并搜索标题数组X[index]。标题数组X[index]的地址指向1102。变量c的内容与辅助数据“c”进行比较。由于找到一个匹配,1102的变量desc会提取出。desc指定的地址指向1105。变量c的内容与辅助数据“z”进行比较。然后,使用指针next跟踪元素区域的链,直到在1107中找到一个匹配。1107的offset被提取出并在m中设置。如果作为上述搜索的结果没有找到匹配的元素区域,则m持有0。请注意,在图11中,区域1102到1104和区域1105到1107分别按变量c的升序链接(或者执行更新处理以实现这样的链接)。其他处理与第一个实施例中介绍的处理相同。
在第二个实施例中,标题数组X[i]的结构可以使三字符字符串的首字节作为一个索引。但是,通过使用适当的散列函数h(x)(该散列函数从三字符字符串x计算散列值),可以使用X[h(x)]代替上述标题数组。在这种情况下,数组X[h(x)]的索引有2个字节。如此,由于一个三字符字符串可以通过标题数组散布进行注册,跟踪元素区域的搜索速度就会得到改善。例如,按如下方式提供了散列函数:
h(x)=(S[0]<<8)|(S[1]^S[2]);
(<<表示位偏移,而^表示一个“异或”)
S[i]表示三字符字符串的(i-th+1)字节数据。
在这种情况下,上述散列值是代表数据。
由于散列函数h(x)随数据的第一个字节不同而不同,与图11相似的标题数组的元素表示第一个字节,从标题数组的元素链接的两个元素区域分别表示第二个和第三个字节。
<第三个实施例>
由于上面介绍的第二个实施例,下面的处理便成为可能。更具体来讲,不仅三字符字符串而且任意长度的字符串都可以在图11所示的词典中注册。例如,如果一个四字符字符串将要在词典中注册,那么对应于第四个字符的元素区域的地址在区域1105到1107的每一个变量desc中设置,从而链接第四个字符的元素区域。
在这种情况下,与输入数据相关的信息是输入数据的首字节数组,其长度是不确定的。输入数据的第一个1字节是代表数据,第二个以及下面的字节的字节数组具有不确定的长度,它们是辅助数据。
很容易理解,还是在第一个实施例中,通过将图5中显示的元素区域的结构更换为图10中所示的结构,任意长度的字符串可以在词典中注册。
在图6中的步骤606中,当作为输入数据和存储在缓冲区中的数据之间的比较的结果找到一个最长匹配数据字符串之后,有最长匹配长度的字符串在词典中注册。
如果将词典中的最长匹配字符串的注册处理添加到步骤606中,在下一步搜索中,可以找到最长匹配,而不必在缓冲区中进行线性搜索,而只需要在输入数据和词典之间进行比较即可。因此,处理速度有望有所提高。
此外在执行数据转移的步骤612中,如果从词典中没有删除不必要的元素区域,很久之前输入的并且不再存储在缓冲区中的字符串也可以保持在词典中。结果,在词典中执行匹配时,可以找到最长的匹配。因此,可以有效地执行数据压缩。
<第四个实施例>
在第一个实施例中,最长匹配长度L和以前的数据位置m可以用23位代码来表示。在第四个实施例中,使用图12所示的一个元素区域代替图10中所示的元素区域。在图12中,存储了变量code代替变量offset。
变量code指出一个字符串的编码数据,该编码数据是通过从标题数组跟踪元素区域并链接每一个变量c生成的。其第一个位始终是1,且其字符串的长度以8位表示(即,总共为24位)的以16位表示的offset,均在变量code中设置。
<第五个实施例>
下面将参照图13到16介绍第五个实施例。图13是一个说明根据第五个实施例的词典的数据结构的视图,其特征在于附图标记1301到1312表示元素区域。每一个元素区域都有一个如图14中所示的数据格式。附图标记1402表示一个持有1字节数据的变量c;1403表示持有字符串的首字节的位置的变量offset;1404表示持有一个指向子元素区域的变量down;1405表示持有指向下一个元素区域的指针的变量next。
在图13中,附图标记1301表示一个词根的元素区域,它是词典中的搜索开始点。1301的地址存储在一个变量root中。附图标记1302到1304表示存储了已经在词典中注册的字符串的首字节的元素区域。区域1302存储了其首字节是“a”的字符串,1303存储了其首字节是“c”的字符串,1304存储了其首字节是“g”的字符串。区域1302有一个指向存储在变量down中的子元素区域的指针,它链接到区域1305和1306。附图标记1305到1308表示存储了字符串的第二个字节的元素区域。区域1305存储了其第二个字节是“b”的字符串,1306存储了其第二个字节是“k”的字符串。区域1305有一个指向存储在变量down中的子元素区域的指针,它链接到区域1309和1310。附图标记1309到1311表示存储了字符串的第三个字节的元素区域。区域1310有一个指向存储在变量down中的子元素区域的指针,它链接到区域1312。由于区域1312的变量down和next持有NULL,因此区域1312不链接到任何位置。
如图16所示,词典中有十一个注册的字符串,具有如图13显示的状态。图16中显示了对应于每一个字符串的元素区域。例如,字符串“abdp”由五个元素区域构成,包括1301、1302、1305、1310和1312的词根。
根据第五个实施例的使用前述的词典的数据压缩处理基本上与图6显示的相同,只不过步骤604中的匹配和插入处理替换为图15中的流程图。在下文中,我们将参考图15进行说明。
注意在下文中,变量offset持有缓冲区中的一个字符串的位置,它查找词典中与输入数据匹配一个最长匹配。“L”表示字符串的长度。变量np持有一个元素区域的指针,用于搜索词典中的树。变量pos预先持有输入数据的位置。S[i]表示一个数组,该数组表示输入的数据的字符串。
在图15的步骤1501中,变量offset和L被初始化为0。在变量np中,设置了词根元素区域的变量down。在步骤1502中,判断变量np是否为0。如果为0,则说明在词典中没有已注册的字符串。因此,控制将进入到步骤1508中按照图13所示的方式将一个三字节字符串从输入的数据的位置pos注册到词典。如果变量np不是0,那么控制将进入到步骤1503以将长度L增加1。在步骤1504中,输入的数据字符串的L-th字节S[L]与np指定的元素区域的变量np->c进行比较。如果变量np->c小于S[L],则在步骤1505中在np中设置下一个元素区域。在步骤1506中,判断np是否为NULL如果为Null,则说明在词典中没有查找进一步匹配的字符串。因此,控制将进入到步骤1507,在此向np指定的元素区域中添加输入的数据字符串。如果在步骤1506中np不是NULL,则控制将返回到步骤1504,因为有一个要比较的元素区域。如果在步骤1504中变量np->c大于S[L],那么不再需要跟踪侧链,因为图13中的树按照词典的顺序已经注册。输入的数据在np指定的元素区域之前插入。
如果在步骤1504中变量np->c等于S[L],那么控制将进入步骤1509。如果变量offset仍为0,则设置np的offset,但如果变量offset不为0,则不执行设置。在步骤1511中,输入数据的pos在np的offset中设置,以便进行更新。在步骤1512中,指向子元素区域的指针down在变量np中设置。在步骤1513中,判断np是否为NULL。如果是,则控制将进入到步骤1507以将输入数据字符串插入在np指定的位置,从而在词典中注册数据。如果np在步骤1513中不为0,则控制将返回到步骤1503。
在前述的在词典中注册输入的数据字符串的处理过程中(步骤1508和1507),如果长度L等于或小于2,那么具有(3-L)字节的字符串S[L]到S[2]被注册,而如果长度L等于或大于3,则注册具有1字节的字符串S[L]。当在词典中注册数据字符串时,输入的数据字符串的字节在元素区域的变量c中设置,输入的数据字符串的首位置,即,pos,在变量offset中设置。在变量down和offset中,设置了指针以便实现图13所示的词典的形式。
需要注意的是,作为在词典中进行数据字符串注册的结果,图13中所示的词典的结构采用的是使元素区域以变量c的升序的方式排列。
注意,offset对应于图6中的m。在步骤606中,在窗口缓冲区中进一步搜索最长匹配。在步骤606中,输入数据的pos+m+l和后面的数据与窗口缓冲区中的m+l和后面的数据进行比较。在此处,如果找到具有长度L2(L2>L)的最长匹配,则在词典中注册字符串S[0]到S[L2-1],以促进下一个匹配处理。由于字符串S[0]到S[L-l]已经注册,其余的S[L]到S[L2]也要注册。
在上述说明中,图14中的区域1402的变量c对应于与输入数据相关的信息。在第五个实施例中没有对应于代表数据和辅助数据的数据。此外,可以将下面的改进添加到第五个实施例中。
首先,与第一个实施例相似,将提供自由元素控制区域、元素获取装置、元素返回装置和词典更新装置,以实现词典更新、获取和返回一个元素区域以及对元素区域的内存控制。
与第一个实施例相似,只有输入数据的预先确定的长度,即,三字节字符串可以在词典中注册。此外,与第四个实施例相似,可以存储编码数据代替变量offset。
请注意,上面介绍的每一个实施例都需要诸如RAM 203之类的硬件,但在现实中,通过加载到RAM 203的程序来实现并由CPU201来执行。换句话说,本发明可以通过一个由计算机执行的程序来实现。显然,程序构成了本发明。此外,通常存储在一个存储介质中的程序通过直接将程序读取出存储介质或者通过将程序安装或复制到计算机的存储设备(HDD 204等等)来执行。因此,这样的存储介质也构成了本发明。存储介质可以使用任何类型的记录方法;例如,纸张存储介质(如纸带等等),磁存储介质(软盘),光存储介质(如CD-ROM等等),磁光存储介质(如MO等等)。
正如上面所描述的,根据本发明,以很高的速度执行无损耗数据压缩同时又能利用高速解压缩是可能实现的。此外,由于本发明利用了LZ77的高速解压缩同时又采用了根据LZ78的词典结构(借助于它,可以进行范围广泛的搜索),本发明可以应用到使用LZ77的数据压缩装置或者应用到使用LZ78的压缩装置,而不必改变算法。
本发明不仅限于上述实施例,可以在本发明的实质和范围内进行各种更改和修改。因此,为说明本发明的范围,我们提供了下面的权利要求书。
Claims (19)
1.一种数据压缩方法,通过搜索匹配输入数据的以前的输入数据,对该输入的数据进行编码,该方法包括下列步骤:
保留用于临时存储输入数据的存储区域;
保留一个词典,该词典用于彼此关联地存储与以前的输入数据相关的输入数据相关信息和输入数据的位置信息,所述词典包括一个元素区域,该元素区域包括用于将该元素区域链接到另一个元素区域的链接信息,所述位置信息表示存储区域中的位置;
在该存储区域中注册与以前的输入数据相关的输入数据相关信息,以及输入数据的位置信息;以及
根据所述链接信息跟踪该元素区域,以搜索词典中的与输入数据相关的信息,该信息对应于与当前输入数据相关的输入数据相关信息,然后获取与输入数据相关信息相关的位置信息,
通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始;以及
基于最长匹配长度和位置,生成编码数据。
2.根据权利要求1所述的数据压缩方法,进一步包括下列步骤:如果在所述搜索步骤中在词典中没有找到与输入数据相关的信息,在词典中彼此关联地注册与输入数据相关的信息和对应于输入数据的代码生成信息,所述与输入数据相关的信息对应于与当前输入数据相关的输入数据相关信息。
3.根据权利要求1所述的数据压缩方法,进一步包括下列步骤:
保留一个自由元素控制区域,该区域包括一个未使用的元素区域;
获取一个元素区域;
返回一个元素区域;以及
更新词典,
其特征在于:在所述词典更新步骤中,当与输入数据相关的信息和从输入数据引出的代码生成信息彼此关联地在词典中注册时,从自由元素控制区域中获取一个元素区域并在所述元素获取步骤中添加到词典中,且当一个元素区域将要从词典中删除时,在所述元素返回步骤中该元素区域被返回并作为自由元素控制区域中的一个未使用的元素存储,以便供下一次使用。
4.根据权利要求1所述的数据压缩方法,其特征在于:代码生成信息是最后的输出代码。
5.根据权利要求1所述的数据压缩方法,其特征在于:在所述编码数据生成步骤中,编码数据通过对代码生成信息进行可变长度编码而生成。
6.根据权利要求5所述的数据压缩方法,其特征在于:所述可变长度编码是霍夫曼编码。
7.根据权利要求1所述的数据压缩方法,其特征在于:在所述最长匹配搜索步骤中,具有最长匹配的输入数据在词典中注册。
8.根据权利要求1的数据压缩方法,其特征在于:与输入数据相关的信息是长度预先确定的输入数据。
9.一种数据压缩方法,通过搜索匹配输入数据的以前的输入数据对所述输入数据进行编码,该方法包括下列步骤:
保留用于临时存储输入数据的存储区域;
保留一个以第一存储区域和第二存储区域构成的词典,第一存储区域彼此关联地存储了与输入数据相关的代表数据和分类信息,而第二存储区域彼此关联地存储了每一个分类信息的与输入数据相关的辅助数据和位置信息,所述位置信息表示存储区域中的位置;以及
搜索词典,所述搜索步骤包括第一搜索步骤和第二搜索步骤,
其特征在于:在所述第一搜索步骤中,使用代表数据作为关键字对第一存储区域进行搜索,以及在所述第二搜索步骤中,使用辅助数据作为关键字对第二存储区域进行搜索,
代表数据从输入数据引出,以在所述第一搜索步骤中搜索第一存储区域,从而获取与代表数据相关的分类信息,
第二存储区域是由分类信息指定的,在所述第二搜索步骤中使用从输入数据引出的辅助数据作为关键字对该第二存储区域进行搜索,并获取与辅助数据相关的位置信息,以及
基于最长匹配长度和位置信息,生成编码数据,并将所述编码数据输出到输出存储区,
其中,在所述搜索步骤中,通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始。
10.根据权利要求9所述的数据压缩方法,其特征在于:在所述第二搜索步骤中没有找到对应于辅助数据的代码生成信息的情况下,进一步包括词典注册步骤,此步骤具有以下步骤:
从输入数据引出代表数据、辅助数据和代码生成信息;
与分类信息相关联地将代表数据存储在第一存储区域;以及
与代码生成信息相关联地将辅助数据存储在第二存储区域,该第二存储区域由分类信息指定。
11.根据权利要求10所述的数据压缩方法,其特征在于:所述第二存储区域被分类信息分为许多小区域,每一个小区域都是空的或者具有一个或多个元素区域,元素区域用辅助数据、代码生成信息和一个指针构成,并通过由指针链接到相同小区域内的另外一个元素区域来构成一个数据结构。
12.根据权利要求11所述的数据压缩方法,进一步包括下列步骤:
保留一个自由元素控制区域,该区域包括一个未使用的元素区域;
获取一个元素区域;
返回一个元素区域;以及
更新词典,
其特征在于:在所述词典更新步骤中,当从输入数据引出的代表数据、辅助数据和代码生成信息在词典中注册时,从自由元素控制区域中获取一个元素区域并在所述元素获取步骤中添加到第二存储区域中,当一个元素区域将要从第二存储区域中删除时,在所述元素返回步骤中该元素区域作为一个未使用的元素存储在自由元素控制区域,以便供下一次使用。
13.根据权利要求9所述的数据压缩方法,其特征在于:代码生成信息是最后的输出代码。
14.根据权利要求9所述的数据压缩方法,其特征在于:在所述编码数据生成步骤中,编码数据通过对代码生成信息进行可变长度编码而生成。
15.根据权利要求14所述的数据压缩方法,其特征在于:所述可变长度编码是霍夫曼编码。
16.根据权利要求9所述的数据压缩方法,其特征在于:在所述最长匹配搜索步骤中,找到最长匹配的输入数据在词典中注册。
17.根据权利要求9所述的数据压缩方法,进一步包括散列生成步骤,其特征在于:代表数据是一个基于输入数据在所述散列生成步骤中获取的散列值。
18.一种数据压缩装置,通过搜索匹配输入数据的以前的输入数据对该输入数据进行编码,该装置包括:
第一保留存储区域,用于临时存储输入数据;
第二保留装置,用于保留一个词典,该词典彼此关联地存储与以前的输入数据相关的输入数据相关信息和输入数据的位置信息,所述词典包括一个元素区域,该元素区域包括用于将该元素区域链接到另一个元素区域的链接信息,所述位置信息表示存储区域中的位置;
注册装置,用于在该存储区域中注册与以前的输入数据相关的输入数据相关信息,以及输入数据的位置信息;以及
编码数据生成装置,用于根据链接信息跟踪该元素区域,以搜索词典中的与输入数据相关的信息,该信息对应于与当前输入数据相关的输入数据相关信息,然后获取与输入数据相关信息相关的位置信息;
搜索装置,通过将当前的输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始;以及
生成装置,用于基于最长匹配长度和位置生成编码数据。
19.一种数据压缩装置,通过搜索匹配输入数据的以前的输入数据对输入数据进行编码,该装置包括:
第一保留装置,用于保留用来临时存储输入数据的存储区域;
第二保留装置,保留一个以第一存储区域和第二存储区域构成的词典,第一存储区域彼此关联地存储了与输入数据相关的代表数据和分类信息,而第二存储区域彼此关联地存储了每一个分类信息的与输入数据相关的辅助数据和位置信息,所述位置信息表示存储区域中的位置;以及
搜索装置,用于搜索词典,所述搜索装置包括第一搜索装置和第二搜索装置,
其特征在于:所述第一搜索装置使用代表数据作为关键字对第一存储区域进行搜索,以及所述第二搜索装置使用辅助数据作为关键字对第二存储区域进行搜索,
代表数据从输入数据引出,以通过所述第一搜索装置搜索第一存储区域,从而获取与代表数据相关的分类信息,
第二存储区域是由分类信息指定的,使用从输入数据引出的辅助数据作为关键字对第二存储区域进行搜索,并获取与辅助数据相关的代码生成信息,以及
生成装置,基于最长匹配长度和位置信息生成编码数据,并将编码数据输出到输出存储单元,
其中,所述搜索装置通过将当前输入数据与以前的输入数据进行比较,搜索最长匹配长度,从位置信息指定的位置开始。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001159512A JP3913004B2 (ja) | 2001-05-28 | 2001-05-28 | データ圧縮方法及び装置及びコンピュータプログラム及び記憶媒体 |
JP159512/2001 | 2001-05-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1388443A CN1388443A (zh) | 2003-01-01 |
CN1217259C true CN1217259C (zh) | 2005-08-31 |
Family
ID=19003079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN02121902.8A Expired - Fee Related CN1217259C (zh) | 2001-05-28 | 2002-05-28 | 用于数据压缩的方法和装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6664903B2 (zh) |
EP (1) | EP1263145A3 (zh) |
JP (1) | JP3913004B2 (zh) |
CN (1) | CN1217259C (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6731229B2 (en) * | 2001-02-09 | 2004-05-04 | International Business Machines Corporation | Method to reduce storage requirements when storing semi-redundant information in a database |
US20040153255A1 (en) * | 2003-02-03 | 2004-08-05 | Ahn Tae-Jin | Apparatus and method for encoding DNA sequence, and computer readable medium |
WO2005089397A2 (en) * | 2004-03-16 | 2005-09-29 | Advanced Tracking Technologies, Inc. | Geographic information data base engine |
CN1331088C (zh) * | 2004-05-28 | 2007-08-08 | 凌阳科技股份有限公司 | 压缩打印资料的方法 |
US20060236319A1 (en) * | 2005-04-15 | 2006-10-19 | Microsoft Corporation | Version control system |
US8521752B2 (en) | 2005-06-03 | 2013-08-27 | Osr Open Systems Resources, Inc. | Systems and methods for arbitrary data transformations |
US7512748B1 (en) | 2006-08-17 | 2009-03-31 | Osr Open Systems Resources, Inc. | Managing lock rankings |
US8539228B1 (en) | 2006-08-24 | 2013-09-17 | Osr Open Systems Resources, Inc. | Managing access to a resource |
WO2008128476A1 (en) * | 2007-04-18 | 2008-10-30 | Mediatek Inc. | Data access tracing |
US8024433B2 (en) | 2007-04-24 | 2011-09-20 | Osr Open Systems Resources, Inc. | Managing application resources |
US7949693B1 (en) | 2007-08-23 | 2011-05-24 | Osr Open Systems Resources, Inc. | Log-structured host data storage |
EP2187313A4 (en) * | 2007-09-04 | 2011-08-03 | Nintendo Co Ltd | WRITE-IN REGIONAL SECURITY SYSTEM |
WO2009031245A1 (ja) * | 2007-09-04 | 2009-03-12 | Nintendo Co., Ltd. | ダウンロードセキュリティシステム |
US8400334B2 (en) * | 2009-12-31 | 2013-03-19 | Thomson Reuters Global Resources (Trgr) | Asymmetric dictionary-based compression/decompression useful for broadcast or multicast unidirectional communication channels |
DE112011104633B4 (de) | 2010-12-28 | 2016-11-10 | International Business Machines Corporation | Einheit zum Ermitteln des Ausgangspunkts für eine Suche |
US8903874B2 (en) | 2011-11-03 | 2014-12-02 | Osr Open Systems Resources, Inc. | File system directory attribute correction |
JP6032292B2 (ja) | 2012-12-19 | 2016-11-24 | 富士通株式会社 | 圧縮プログラム、圧縮装置、伸張プログラムおよび伸張装置 |
US8902087B1 (en) * | 2013-08-27 | 2014-12-02 | International Business Machines Corporation | Data decompression utilizing pre-expanded dictionaries during decompression |
US9830329B2 (en) | 2014-01-15 | 2017-11-28 | W. Anthony Mason | Methods and systems for data storage |
US9864007B2 (en) * | 2014-04-30 | 2018-01-09 | Duke University | Software-based self-test and diagnosis using on-chip memory |
EP3195481B1 (en) * | 2014-08-12 | 2022-07-13 | Micron Technology, Inc. | Adaptive rate compression hash processing device |
US9628111B2 (en) * | 2015-05-11 | 2017-04-18 | Via Alliance Semiconductor Co., Ltd. | Hardware data compressor with multiple string match search hash tables each based on different hash size |
US9748972B2 (en) * | 2015-09-14 | 2017-08-29 | Leco Corporation | Lossless data compression |
WO2018010800A1 (en) * | 2016-07-14 | 2018-01-18 | Huawei Technologies Co., Ltd. | General purpose data compression using simd engine |
CN114168085B (zh) * | 2021-12-16 | 2024-02-20 | 潍柴动力股份有限公司 | 变量处理方法、装置、设备及存储介质 |
CN116016397B (zh) * | 2023-03-28 | 2023-05-30 | 湖南毂梁微电子有限公司 | 一种报文传输缓冲区快速检索方法和电路 |
CN116192154B (zh) * | 2023-04-28 | 2023-06-27 | 北京爱芯科技有限公司 | 数据压缩及数据解压方法、装置、电子设备、芯片 |
CN117200805B (zh) * | 2023-11-07 | 2024-02-02 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4054951A (en) | 1976-06-30 | 1977-10-18 | International Business Machines Corporation | Data expansion apparatus |
US4464650A (en) | 1981-08-10 | 1984-08-07 | Sperry Corporation | Apparatus and method for compressing data signals and restoring the compressed data signals |
US4558302A (en) | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
GB2172127B (en) | 1985-03-06 | 1988-10-12 | Ferranti Plc | Data compression system |
US5058144A (en) * | 1988-04-29 | 1991-10-15 | Xerox Corporation | Search tree data structure encoding for textual substitution data compression systems |
US5146221A (en) * | 1989-01-13 | 1992-09-08 | Stac, Inc. | Data compression apparatus and method |
DE69118250T2 (de) * | 1990-01-19 | 1996-10-17 | Hewlett-Packard Ltd., Bracknell, Berkshire | Zugriff für komprimierte daten |
US5049881A (en) | 1990-06-18 | 1991-09-17 | Intersecting Concepts, Inc. | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique |
DE69123660T2 (de) * | 1990-08-13 | 1997-04-17 | Fujitsu Ltd., Kawasaki, Kanagawa | Datenkompressionsmethode und Gerät |
US5051745A (en) | 1990-08-21 | 1991-09-24 | Pkware, Inc. | String searcher, and compressor using same |
US5473326A (en) * | 1990-12-14 | 1995-12-05 | Ceram Incorporated | High speed lossless data compression method and apparatus using side-by-side sliding window dictionary and byte-matching adaptive dictionary |
US5455576A (en) * | 1992-12-23 | 1995-10-03 | Hewlett Packard Corporation | Apparatus and methods for Lempel Ziv data compression with improved management of multiple dictionaries in content addressable memory |
US5717394A (en) * | 1993-02-10 | 1998-02-10 | Ricoh Company Ltd. | Method and apparatus for encoding and decoding data |
AU1447295A (en) * | 1993-12-30 | 1995-08-01 | Connectix Corporation | Virtual memory management system and method using data compression |
AU1514795A (en) * | 1993-12-30 | 1995-08-01 | Connectix Corporation | Lossless data compression system and method |
-
2001
- 2001-05-28 JP JP2001159512A patent/JP3913004B2/ja not_active Expired - Fee Related
-
2002
- 2002-05-16 US US10/145,802 patent/US6664903B2/en not_active Expired - Lifetime
- 2002-05-28 CN CN02121902.8A patent/CN1217259C/zh not_active Expired - Fee Related
- 2002-05-28 EP EP02253733A patent/EP1263145A3/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
CN1388443A (zh) | 2003-01-01 |
JP2002353818A (ja) | 2002-12-06 |
EP1263145A3 (en) | 2004-06-02 |
EP1263145A2 (en) | 2002-12-04 |
JP3913004B2 (ja) | 2007-05-09 |
US6664903B2 (en) | 2003-12-16 |
US20020175840A1 (en) | 2002-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1217259C (zh) | 用于数据压缩的方法和装置 | |
CN1145264C (zh) | 与串搜索交错进行即时字典更新的数据压缩和解压缩系统 | |
Ferragina et al. | Boosting textual compression in optimal linear time | |
EP0970419B1 (en) | A lempel-ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases | |
Larsson | Structures of String Matching and Data Compression. | |
CN102687404B (zh) | 用于数据压缩的数据值出现信息 | |
JP2003179501A (ja) | データ圧縮方法 | |
WO1998006028A9 (en) | A lempel-ziv data compression technique utilizing a dicionary pre-filled with fequent letter combinations, words and/or phrases | |
CN1868127A (zh) | 数据压缩系统和方法 | |
US7302106B2 (en) | System and method for ink or handwriting compression | |
Sardaraz et al. | Advances in high throughput DNA sequence data compression | |
Reznik | Coding of sets of words | |
US20090256729A1 (en) | Difference coding adaptive context model using counting | |
Langiu | On parsing optimality for dictionary-based text compression—the Zip case | |
Adiego et al. | Using structural contexts to compress semistructured text collections | |
CN1134895C (zh) | 压缩电子墨迹的方法和装置 | |
CN1209925C (zh) | 基于信源高阶熵的数据压缩方法 | |
Navarro et al. | Practical and flexible pattern matching over Ziv–Lempel compressed text | |
CN1870131A (zh) | 字符串检索电路和字符串检索方法 | |
Apostolico et al. | Bridging lossy and lossless compression by motif pattern discovery | |
Apostolico et al. | Motifs in ziv-lempel-welch clef | |
Roy et al. | A survey of data structures and algorithms used in the contextof compression upon biological sequence | |
JP4334955B2 (ja) | 生物情報のロスレス符号化装置 | |
Yu | Data compression for PC software distribution | |
Klein et al. | Parallel Lempel Ziv Coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20050831 Termination date: 20170528 |
|
CF01 | Termination of patent right due to non-payment of annual fee |