增量和连续的数据压缩的制作方法

文档序号:7513247阅读:252来源:国知局
专利名称:增量和连续的数据压缩的制作方法
增量和连续的数据压縮本申请是申请日为2001年7月18日申请号为第01816213. 4号发明名称为"增 量和连续的数据压缩"的中国专利申请的分案申请。 有关申请本申请要求在2000年7月25日提交的美国临时申请号为60/221, 262的专利 申请的优先权,该专利整体加入这里作为参考。 发明背景1. 发明领域本发明涉及数据压縮领域,尤其涉及增量及连续的数据压縮的领域。2. 背景技术描述传统通信系统的重要目标是改善数据的带宽的吞吐量。传统的系统不是发送 每一位数据,而是使用压縮算法来减少从源到目标需要发送的数据量。两类压縮算 法,无损压縮算法和有损压縮算法。无损压縮算法将数据转换成一种形式,其中包 含在该数据中的信息不受损失。相反,有损压縮算法产生一种表示方式,其中,该 数据的某些细节可能被排除。压縮算法也能粗略地分成两个类别专用的及通用的。专用压縮及解压縮应 用于那样的数据,对那些数据它们的数据特征的先验知识是可以得到的。例如,视 频数据已知由各个帧组成,每帧与其以前帧及后续帧的区别很少。在那样的情况, 专用压縮方案能得益于此先验知识而设计更专门的因而可能更有效的压縮及解压 縮算法。通用压縮算法(也称为万能压縮算法)不假设数据特征或产生数据的源的 任何先验知识。因此,通用压縮常常比较低效,它更经常地导致比对于特殊数据类 型的专用压縮算法更少程度的压縮。然而,通用压縮算法更灵活,因为如上所述, 它们能有效地用于许多不同类型的数据,并在事先不知道有关数据的信息的情况下 应用。一类通用压縮算法是根据对数据中的重复的识别及消除。这些方法称为基于 词典的压縮技术,因为它们试图发现重复项及短语的词典。学到的词典项随后被用于消除在目标数据组中的这些项的重复性。两个其他类型的压縮算法是增量压縮算法和连续压縮算法。此两类算法不是 互相排斥的,即一个压縮算法能既是增量的又是连续的,增量压縮算法是不需要处 理整个输入流或输入流中的整个数据块来产生其输出的算法。相反,增量压縮算法 在逐个符号的基础上(即增量地)处理输入,并在其仍然处理输入的过程中产生其 输出,而不是在其处理整个输入之后。例如,计算在一段文字中的元音数的算法基 本上是非增量算法,因为它必须处理整个文字输入来计算元音的总数。另外,将小 写文字转换成大写文字的算法是增量的,因为它能独立地处理每个输入字符,并能 在其处理每个输入字符时产生其输出。连续算法是能在无限的输入数据流上无限地运行而不会用完如存储器及盘空 间等那样的系统资源的算法。连续算法也常常称为流算法。注意,仅仅在处理所有输入后产生输出的非增量算法根据定义是非连续的(因为在连续算法中输入是无限 长)。数据的存储和传输的代价直接与数据对象的大小相关。因此,从数据中消除 冗余是改善数据存储和传输的效率的高度有效的方法。最通用的无损数据压缩算法 试图根据两个主要方法从数据中消除冗余(1)识别和消除重复的项及短语;和 (2)以更有效的方式编码数据。能通过各种技术实现重复项或短语的识别。涉及的通常原则能借助例子说明。 考虑到等式(1)中的字符序列。S二aabcaabdaabeaabf 等式(1)基于词典的压縮算法能识别,短语"aab"在此序列中重复了 4次。若算法用 新的符号,如A替代"aab"的所有出现,该序列则被更有效地存储或传输。被压 縮的序列然后看来如等式(2)中的序列。S=AcAdAeAf 等式(2)除了上述压縮序列以外,该算法也必须存储或发送附加指令,指出在解压縮 期间A的所有出现应由"aab"替代。因此,指令A^aab是压縮所根据的词典项。 为了能解压縮,该词典和压縮的字符串必须被存储或发送。虽然在此情况词典是易 于确定的,对给定的输入序列已经示出,寻找产生高度压縮的词典的问题是NP— 完成,它在计算机协会杂志29(4) (1982) 925-951页J. A. Storer所著"Datacompression via textual Substitution"中描述,该文整个加入于此作为参考。 数据编码包括在每个字符的基础上修改数据的表示,使得经常发生的字符能更有效地表示(如用更少的位数)。考虑在等式(3)中14个字符的序列。 S二abacadaeafagah 等式(3)在此情况字符"a"发生7次而字符"b-h"的每一个只发生一次。若整个字 符表只有8个字符"a-h"组成,它们能对每个字符使用3个位的二进制形式表示, 如表1所示。a 000 b 001 c 010 d Oil e 100 f 101 g 110 h 111 表l这使得序列(S)需要总共14X3=42位。另外,因为我们看到在数据中字符"a"出现得更频繁,可以更有效地用更少的位表示"a",其代价是对字符表中的其余字符增加位数。例如,8个字符能改成如表2中那样地表示。a 0b 1000c 1001d 1010e 1011f 1100g iioih 1110表2在此情况,字符串S需要1位表示7个"a"字符中每一个,4位表示余下字 符的每一个。因而对S所需的总空间是7*1+7*4=35位。这表示节省了超过有百分 之16。有这样统计编码技术的各种例子,如Huffman编码和算术编码。那样的方法 的更详细描述在D. A. Huffman的"A Method for the construction of minimum-redudancy codes",Proceeding IRE, 40:1098-1101 (1952)和Witten, Neal 禾卩Cleary的"Arithmetic coding for data compression" Communications of the Association for Computing Machinary, 30 (6) : 520-540 (1987),它们整个被加入于此作为参考。应用于许多那样的统计编码技术的一般原则由Shannon于1948年在下文中提出 "A Mathematical Theory of Coraraunication,, , Bell System Technical Jonrnal, 27:389-403(1948),它作为整体加入于此作为参考。Shannon表示,需 要编码以概率P出现的字符或字符串的位数是-log2P。因此,若8个字符a-h每个 以等概率出现,P=l/8,每个字符能以-log2 (1/8) =3位编码。但在我们上述例子 中,我们知道"a"以概率7/14出现,而其余字符以概率1/14出现。因此,a能 以-log2 (7/14) =1位编码,而每个余下的字符能以-log2 (1/14) =3.8位编码。另外的编码方法是游程长度编码。在此情况,同样字符的序列用单个字符跟 着指出字符重复次数的数来替代。在等式(4)中给出一个例子。S二aaaaabbbbb 等式(4)此字符串能使用游程长度编码法编码,如等式(5)所示。 S=a5b5 等式(5)许多传统的基于词典的,通用的,无损的压縮算法是根据上述两种方法的组 合,例如,首先是基于词典的压縮重复的短语,随后最终压縮流作统计编码。现描 述这些传统的压縮技术的某一些。一种传统的压縮技术在下文中描述Ziv和Lempel的"A Universal Algorithm for Sequential Data Compression" , IEEE Transaction of Information Theory, IT-23 (3) : 337-343 (1977),它作为整体加入于此作为参考。此广泛使用的基 于词典的通用压縮技术称之为LZ77,并形成若干其他压縮算法的基础。例如,广 泛地与基于Unix的操作系统一起发行的"gzip"压縮程序使用LZ77方法的一个变 例。LZ77是根据在固定大小的窗口中将指针用于短语以前的出现。通过穿过输入 序列滑动窗口并搜索在该窗口中的任何重复字符串来寻找数据中重复的短语。例如,考虑在等式(6)中的输入序列。S二abcdefbcdgh 等式(6)LZ77方法判定,短语"bed"重复两次,并使用此信息压縮该序列。"bed" 的第一次出现不加修改。第二次出现被从S的起点到"bed"第一次出现的距离和 重复的长度组成的指针所替代。因此,序列S由LZ77被表示成如等式(7)那样。S二abcdef (1, 3)gh指针(1,3)表示,在从窗口起点距离为1并向右延伸3个字符的短语在当前 的指针位置被重复。此方案的一个变例使用从当前位置反向的距离作为指针的第一 元素(而不是从窗口起点向前的距离)。在此情况S表示成如等式(8)那样。S=abcdef (5,3)gh 等式(8)此处,指针(5, 3)指出,从当前位置反向距离5处开始并向右延伸3个字符 的短语被重复。传统的基于LZ77的压縮程序根据将可变长重复转换成固定长指针的方法使用 上述指针。然后通过应用统计编码技术压縮得到的符号和指针序列。这些程序能使 用不同的方法发现重复的短语并编码最终的数据流。LZ77方法的一个问题是它只能在固定大小的窗口中检测重复。有限的窗口大 小不能检测离开距离大于窗口大小的重复数据。例如,在上述例子中,若窗口大小 减少到5个字符,"bed"的重复将不被检测,因为从"bed"的第一次出现的开始 到第二次出现的结束总的距离大于5。在LZ77方法中限制窗口的大小是为了限制 搜索重复性所需要的时间。使用LZ77方法的搜索算法的复杂性和执行时间通常是 所搜索的输入字符串的大小的函数。因而,通常传统的LZ77压縮技术将窗口大小 限制到几千字符。例如,"gzip"程序使用32K字节的窗口。窗口大小的增加导致 LZ77算法执行时间的很大增加。LZ77压縮方法的另外的问题是它需要第二阶段的统计编码以提供足够的压縮 率。由LZ77方法使用的统计编码技术是非增量的,因而是非连续的(如gzip使用 Huffman编码,它是非增量的)。非增量编码技术在对一个数据块输出编码树以前 必须完全地处理这块数据。由非增量技术使用的块的大小也需足够大以保证编码方 案产生有效的编码树。因而LZ77技术不适合于实时或在线的压缩,其中有必须被 增量地处理的连续流。LZ77的另一个问题是可能的指针数目很大,因为它们能指向窗口内任何位置。Ziv和Lempell针对LZ77技术中的某些问题在1978年提出新的压縮方案,称 之为LZ78。这在下文中描述Ziv禾n Lerapell的"Compression of Individual Sequences Via Variable Rate Coding", IEEE Transaction on Information Theory, IT-24(5): 530-536 (1978),它作为整体被加入于此作为参考。不是使用指向窗 口中位置的指针,LZ78方法使用在输入流中遇到的所有短语的词典的直接表示。 词典通过建立在以前词典项之上增量式地构造。每当见到新的短语,在认为它可能 以后被使用的前提下,将其加到词典中。考虑在等式(9)中的输入序列。S=cbaabacaccacccacccc 等式(9)LZ78产生短语(O,c),其中0是空字符串而c是第一字符,下面两个字符也 导致两个新的短语(0,b)和(0,a)。最终的短语序列示于表3。输入 短语号_输出短语c 1 (0' c)b 2 (0, b)a 3 (0, a)ab 4 (3, b)ac 5 (3, c)acc 6 (5, c)accc 7 (6, c)acccc 8 (7, c)表3因而序列S的最终编码将是表3中示出的输出短语列。如在此例能看出,词 典项l, 2, 4在此编码中永不使用,因而是词典中的无用项。例如,虽然对"ac" 的词典项被再使用以增量地产生"acc" , "accc",禾B "acccc",对"ab"的词 典项不再使用,因而是无用的。LZ78技术的一个问题是它使用积极的和推测的词典结构方案,这常导致不能 有效地使用的项的结构。因此,词典能变成很大,并导致不能有效使用系统资源并 降低压縮效率。此外,LZ78方案的收敛速率是慢的,因为词典以慢的速率增长。 基于LZ78的压縮程序也常使用非增量的统计编码技术来改善压縮效率和程序速 度,因而不能用于在线或连续的数据。而且没有措施来忘记(删除)不再使用的短语或词典项。对连续的,潜在无限的数据流,必要的是不仅动态地产生新的词典项,还在于忘记不常使用的项以重新使用系统资源,这用LZ78算法不能实现。因此, LZ78算法不是连续压縮算法。第三种压縮算法是Sequitur算法,它在下文中描述Nevill-Manning和 Witten 的"Compression and Explanation Using Hierarchical Grammars", Computer Journal, 40 (2) : 103-116 (1997),它作为整体加入于此作为参考。 Sequitur算法从离散的符号序列推导出与上下文自由的语法。该语法分层地表示 该序列的结构,并能用于产生该序列的结构的有用可视说明并推导在该序列中的词 法单元。因为该语法完全地表示了整个输入序列,Sequitur也能用于数据压縮。Sequitur通过在输入序列中施加两个约束而工作。第一约束是没有相邻符号 对能出现多于一次。第二约束是由算法产生的每个规则应使用多于一次。Sequitur 通过增量地检查该输入序列并保证在该序列的每一点满足此两个约束而应用这些 约束。例如,在等式(10)中示出的输入序列中,S=abcdbcabcd 等式(10)Sequitur将产生在等式(11)中的语法S=BABA=bc 等式(11)B二aAd其中A和B是语法中的规则,它们类似于词典项。上述语法满足第一约束, 因为没有符号对出现多于一次。第二约束也满足,因为在该语法中A和B均使用至少二次。因为整个输入序列由语法表示,Sequitur使用此算法于通过应用算术编码压 縮以编码整个语法。语法的规则(即词典项)被指针发送到重复以前的出现处,这 类似于上述对于LZ77的技术。当在语法中第一次遇到规则时,其内容被发送。该 规则的第二次出现作为指向用于构造该规则的序列的区域(如该规划第一次出现的 内容)的指针被发送。在解码器及编码器能保留互相的规则号的轨迹的假设下,所 有此规则的后续出现作为规则号被发送。Sequitur压縮技术的一个问题是它不是隐含地增量的。为保证语法用最少的 符号数发送,Sequitur需要语法在被发送前被完全构成。通过将序列S的发送点10选在发送额外符号的概率低的地方,能使Sequitur看上去象增量的。用于检测在 被压縮的序列中的某一点是否为发送该序列的安全点的算法需要检查就在此点以 前该符号的所有以前的出现。因为Sequitur需要在输入序列的整个压縮中动态地 选择这些点,为了连续地搜索这些发送点,该算法引起大量额外处理。此附加的处 理(为使Sequitur成为增量的这是必需的)使得整个压縮算法是非线性,并因而 大大减少了有效性。Sequitur算法的另外问题是它是不连续的。该算法不提供任何手段来增量地 发送被压縮的输出而同时删除不常访问的规则和符号(为了再使用系统资源)。因 此,Sequitur不能应用于无限或很大的输入数据流,在线性时间内产生被压縮输 出的连续流。Sequitur算法还在其使用系统资源方面不太有效,因为它需要复杂的数据结 构使能够作可变长度的规则的频繁建立及删除。此外,该算法在删除长的重复时计 算上不太有效,因为在重复的短语中的每对符号需要规则的建立和删除。因此,重 复的每个附加的出现会招致多次规则的建立和删除的计算上的过度开销。为了将规 则的第二次出现作为指针发送,Sequitur的技术也需要额外的处理与存储开销。第四个压縮算法是递归配对(Re-Pair)算法,它在下文中描述,Larsson和 Moffat 的 "Offline Dictionary-Based Compression ,, , Proceeding Data Compression Conference, 196-305 (1999),它被整体加入于此作为参考。Re-pair 算法试图通过递归地检査整个输入序列以识别最频繁出现的符号对来计算用于压 縮的最优词典。在该算法的每个阶段,最频繁出现的符号对用表示该词典中的新增 加的新的符号来替代。然后再次检查整个经修改的序列以找到当前最频繁出现的 对。此过程迭代,直到没有出现大于一次的对。然后编码最终的压縮的序列和词典, 以产生最终的压縮输出。这些算法的主要缺点是在于它们基本上是非增量及非连续的。在任何输出能 够产生之前,整个输入序列必须通过递归配对处理。这些作者本身将算法描述为"离 线"技术。需要一种数据压縮的系统及方法,它们(1)是通用压縮算法;(2)是无损 压縮算法;(3)对数据的线性增加不需要执行时间的非线性增加;(4)不需要有 限的数据窗口大小;(5)是增量压縮算法;(6)是连续压縮算法。发明概述本发明是有效的压縮算法,它能在实际上无限大小的窗口中删除和消除重复 的可变长度短语。窗口的大小只受可用的系统存储的数量的限制且不影响算法的速 度。本发明是在线性执行时间内运行的通用无损压縮算法,能使用无限的窗口大小, 隐含地是增量的,且能在连续的输入流上连续地运行。附图简述

图1是本发明的一个实施例可以在其中运行的计算机系统的图示。图2是按本发明的一个实施例编码和封装(EE)单元和解码和解封装(DD)单元的部件的图示。图3是本发明的检测器部件的实施例的图示。图4是按本发明的一个实施例的检测技术的例子的图示。图5是示出按本发明的一个实施例的发送过程的流程图。图6是示出本发明的一个实施例的解压縮算法的流程图。图7是按本发明的一个实施例的发送技术的例子的图示。图8a和8b是按本发明的一个实施例删除技术的LRU和父指针的例子的图示。图9是按本发明的一个实施例的删除技术的流程图示。较佳实施例详述现参考附图描述本发明的较佳实施例,其中类似的参照号指示等同的或功能 上类似的单元。而且在图中,每个参照号的最左边数字对应于该参照号首次使用的 图。图1是本发明的一个实施例可以在其中运行的计算机系统的图示。计算机系 统100包括第一系统102A和第二系统102B。每个系统是独立的计算机或软件过程。 每个系统包括传统的处理器110,存储设备112,输入/输出设备114和操作系统 116。每个系统还包括编码和封装(EE)单元106和解码及解封装(DD)单元108。 EE和DD能作为在处理器上运行的软件或作为专门设计的硬件(在此情况处理器不 是必须的)嵌入。两个系统102A和102B能通过任何物理的或逻辑的网络链路连接。可以想象,本发明能完全在两个系统中运行且在图1中的实施例是示例性的,它不试图限制本发明的范围。下面将更详细地描述EE单元106和DD单元108的操作。 例如,在另外的实施例中,EE单元106及DD单元108可以是专用集成电路(ASIC)的一部分。EE单元106实现本发明的压縮技术。例如,EE单元106能作为计算机软件程 序、硬件、固件或它们的组合来实现。在一个实施例中,本发明的压縮技术能以存 储在传统的EE单元106中的存储模块并由处理器110执行软件来实现。本发明的 压縮技术是时间线性的,完全增量的,和连续的数据压縮算法。为便于参照,该算 法在此文件中称为"IZ"。本发明的解压縮工作在DD单元中完成,并能作为如计 算机软件程序,硬件,固件,或它们的组合而实现。本发明包括同时操作的三个组件。图2是按本发明的一个实施例的编码和封 装(EE)单元106和解码和解封装(DD)单元组件的图示。第一组件是检测器组件 202,它检测在线性时间输入流中任何处的重复短语/项。为本专利的目的。术语"项" 和"符号"可交替使用。"短语"或"数据短语"包括固定数目的顺序数据项。数 据项可以是数据符号和/或数据短语标识符。检测器组件202通过使用实际上无限 的窗口大小识别并消除重复的短语,增量地压縮输入流。此过程能使用作为检测器 组件的部分的识别单元,压縮单元,和库建立单元(散列建立单元)完成。这些单 元的操作在下面参考图3和4描述。第二组件是发送组件204,它以隐含的增量方 式发送经压縮的序列和有关的短语的词典。发送组件204还保证压縮和解压缩算法 总是完全同步。第三组件是删除组件206,它使IZ算法能删除并有效地"忘记" 不常使用的短语和符号以释放系统资源。因而该删除组件使IZ能在无限的输入数 据流上连续地运行。DD单元108包括解压縮单元,这在下面详述。检测器组件202,发送组件204和删除组件206能以各种方式实现。检测器组 件的一个实现方法示于图3。短语检测算法使用下列步骤,以增量地将输入序列S转换成被压縮的序列S'。重复的符号对的检测能使用散列表(如库)完成以记录所有已被检测组件202 观察到的所有唯一的符号对。每个散列表的项包括指向唯一符号对的位置的指针。 若该符号对只出现一次,则对此符号对的散列表项将指向S'中第一符号的位置。 若该符号对已发生多于一次,且因而由词典短语表示,则对该符号对的散列表项将指向对应的词典短语。为保证检测所有重复的符号对,该算法必须保证每当一个符 号被加入或从S'中删除,该散列表被适本地更新。例如,在图3中示出的算法中的步骤314导致增加新的项到表中。类似地,步骤314, 318和332将导致从散列表中删除一个或多个项。现参考图4中示出的例子描述图3的流程图。在图4中示出的例中的输入序列是"abcdcdabcd"。在步骤302 "Y"被设成 等于下一个输入符号"a",并在304附在S,之后(它以前等于空)。X然后被设 成序列中"a"之前的符号(空)。在308, XY的组合以前未发生,所以XY在309 被加到散列表,过程在步骤302重复。图4的第1行示出在此点处该例子的状态。然后在302 Y被设成等于下一个符号b,在304附在S'之后,并在304 X被设 成Y前的符号("a")。在308 XY的组合(ab)以前未出现,所以XY在309被 加到散列表,过程在步骤302处重复。图4的第2行示出在此点处该例子的状态。然后在302 Y被设成下一个符号"c",在304附在S,之后,在306 X被设成 Y之前的符号("b")。在308 XY的组合(bc)以前未出现,所以在309 XY被 加到散列表,过程在步骤302处重复。图4的第3行示出在此点处该例子的状态。然后在302 Y被设成下一个符号"d",在304附在S,之后,在306 X被设成 Y之前的符号("c"),在308 XY的组合(cd)以前未出现,所以在309 XY被 加散列表,过程在步骤302处重复。图4的第4行示出在此点处该例子的状态。然后在302 Y被设成下一个符号"c",在304附在S,之后,在306 X被设成 Y之前的符号("d")。在308 XY的组合(dc)以前未出现,所以在309 XY被 加到散列表,过程在步骤302处重复。图4的第5行示出在此点处该例子的状态。然后在302 Y被设成下一个符号"d",在304附在S'之后,在306 X被设成 Y之前的符号("c" ) 。 XY的组合(cd)以前已经出现,所以过程继续。因为XY 的以前出现是在序列S',且在310不是作为词典短语的右端项,这意味着XY是应 该新建并加到词典中去的新短语。因此,在312通过建立新的词典短语P,且将其 设成等于XY,过程继续。在此例中P,设成等于"cd"。然后XY的以前出现在314 中在S'由Pi替代。注意,此替代步骤314导致从散列表去除两个项并将两个新的 项加到散列表。这些散列表更新包括X以前的符号(称为Xp)和Y之后的符号(称 为Y。)。因为XY从S'中去除,符号对XpX和YL必须也从散列表中去除。因为XY被P,替代,符号对XpP,和PiYn必须加到散列表。在此例子中,"be"和"dc"从散列表被去除,"bP,"和"P,c"被加到散列表。然后,在316 Y从S,的末端去除, 在318 X从S,的末端去除。而且,在318 X从S'的末端去除将导致符号对(对应 于X前的符号及X)从散列表去除。在此例子中,"PlC"将从散列表去除。然后Y 被设成等于Pl,且在步骤304过程继续。在此点该例的状态是S、abP,且Y等于P,。 然后在304 Y附于S'之后(现在S,二abPA)且在306 X被设成等于在S'中Y 前的符号("P/')。在308,序列中XY (P,P,)未出现,所以XY在309被加到散 列表,过程在步骤302处重复。在图4的第6行用S、abPA示出在此点该例子的 状态。然后在302 Y被设成下一个符号"a",在304附在S,之后,在306 X被设成 Y之前的符号("P1")。在308 XY的组合(P,a)以前未出现,所以在309 XY 被加到散列表,过程在步骤302处重复。图4的第7行示出在此点处该例子的状态。然后在302 Y被设成下一个符号"b",在304附在S,之后,在306 XY被设 成Y之前的符号("a" ) 。 XY的组合(ab)以前已在序列中出现,所以过程继续。 因为XY的以前出现是在序列S'中,且不是作为词典短语310的右端项,这意味着 XY是应该新建并加到词典中去的新短语。因此,在312通过建立新的词典短语P2 且将其设成等于XY,过程继续。在此例中,P2设成等于"ab"。然后在314中XY 的以前出现在S'由h替代。如之前,该步骤导致从散列表去除两个符号并加上两 个符号。然后,在316 Y从S'的末端去除,在318 X从S'的末端去除(这也导致 从散列表去除一个符号对)。然后Y被设成等于P2,且在步骤304过程继续。在此 点该例的状态是S、PJMV且Y等于P。然后在304 Y附于S,之后(现在S、P2P,PJ52)且在306 X被设成等于在S,中Y 前的符号(在此情况它实际上是数据短语标识符"P/,)。在308,序列XY (PA) 未出现,所以在309 XY被加到散列表,过程在步骤302处重复。在图4的第8行用S、P2P^P2示出在此点该例子的状态。然后在302 Y被设成下一个符号"c",在304附在S'之后,在306 X被设成 Y之前的符号("P2")。在308 XY的组合(P2c)以前未出现,所以在309 XY被 加到散列表,过程在步骤302重复。图4的第9行示出在此点处该例子的状态。然后在302 Y等于下一个符号"d",在304附在S,之后,在306 X被设成Y之前的符号("C" ) 。 XY的组合(Cd)前面己经在序列中出现,所以过程继续。因为XY等于词典短语310的右端项,通过在330从S'的末端去除Y,在332从S' 的末端去除X,过程继续。在332从S'的末端去除X导致从散列表去除符号对(对 应于X前的符号及X)。然后在334中Y被设为等于XY的词典短语。在此例中Y 被设成等于P,。过程在步骤304继续。在这点此例的状态是S,4^P1P2且Y等于Pi。然后在304 Y附于S,之后(现在S—P2P,PiP2P,),且在306 X设成等于在S,中 Y之前的符号("P2" ) 。 XY的组合(P2PJ在序列中以前己出现且因为XY不等于 词典短语310的右端项,通过在312建立新的词典短语P3并将其设成等于XY,过 程继续。在此例中,P:,被设成等于"PJV'。然后在314XY在序列S'以前的出现由 P:,所替代。然后在316Y从S'的末端除去,在318X从S'的末端除去。随后Y被设 成等于P,,过程在步骤304继续,在此点上本例的状态是S'^3P,而Y等于P3。随后在304 Y附在S,之后(现在S,寸3P,P:,)且X在306被设成等于S,中Y之 前的符号("P/')。在308 XY (P,P3)在序列中以前未出现,所以在309 XY被加 到散列表且过程在步骤302重复。图4中的第10行用S、P3P,P:,示出在此点本例的 状态。过程能对任何数目的输入继续。本发明能检测在输入流中任何处的重复。本发明不需要直接的搜索窗口,且 因而能够检测重复性而不论重复发生得多远。也应用某些加窗口技术使得该算法如 下述那样继续,但是此窗口是基于系统存储器的大小且不影响该算法的速度。上述 算法已示出在时间和空间上是线性的。线性度的证明是根据计算处理长度n的序列 所需的总操作数。此数示作为O(n)(即应是正比于n的数)。因而,本发明能经过 实际只在线性时间中无限的窗口检测可变大小的重复。重复的短语的检测也比如上 述Sequitur技术那样的其他技术更有效,因为IZ对在短语中的每个符号对不需要 任何不是必须的规则的建立和删除。发送组件204保证被压縮的序列(S')和短语(Pi)的词典均被发送,以确保 精确的解压縮。因而,发送组件必须保证压縮单元永不发送参照到词典短语,它在 解压縮单元中不存在,从而不能由解压縮单元进行解参照。为保证该算法是完全增 量的,IZ使用下面的图5中描述的过程发送S'和短语词典。图5是示出按本发明的一个实施例的发送过程的流程图。在502使用指针(T)指向已被发送的压縮序列(S')中的最后符号。从T到S'的末端的所有符号在将新的短语加入到词典(如图3中的步骤312)以前被发送。然后重复短语的两次出现 在506用新建的短语替代,包括如在步骤312-320中在S'的末端的出现。然后, 在508指针(T)被设成指向附在S,末端之后的新的短语。图5中示出的实施例的效果是头两次发生重复短语时,它被不加修改地发送 (可以想象在本发明的另外实施例中出现其他变化,下面将描述其中一些)。因为 每次重复由嵌入的符号对组成,重复短语的第二次出现通常借助直接送出其内容 (它只包括两个符号)而更有效地发送,而不是使用指针,后者需要额外的处理开 销。因而解压縮算法以与压縮算法完全相同的形式接收重复短语的头两次出现。这 就允许解压縮算法产生与压縮算法所产生的对重复的完全相同的词典短语。解压縮 算法利用与压縮算法相同的短语编号技术,从而允许压縮算法将所有短语的未来出 现只作为一个短语号发送。DD108包括解压縮单元208,它在解压縮组件210中包括以如计算机程序,固 件,或硬件形式的解压縮算法。图6是示出本发明的一个实施例的解压縮算法的流 程图。该解压缩算法产生原始的输入流,同时保证完全与压縮算法同步。每个压縮的符号在602被接收,而解压縮单元208在604判定,该符号是否 为对如P,那样的词典短语号的参照,若符号是那样的参照,解压縮单元208在606 提取该短语号的内容并产生原始的输入序列。然后解压縮单元在608借助将短语的 内容通过除最后发送步骤的所有压縮步骤而同步压縮和解压縮算法。若符号不是对词典短语号的参照,则解压縮单元208在610将该符号通过所 有压縮步骤(除最后的发送)以保证解压縮与压縮算法同步。此处理过程对所有接 收的符号在612重复。因为本发明的一个实施例恰恰在产生短语之前发送产生该短语所需的内容, 它保证解压缩算法永不会在解压縮算法产生特定的短语之前接收对短语的参照。因 此,压缩及解压縮之前接收对短语的参照。因此,压縮及解压縮算法能隐含地保证, 它们保持同样的短语编号方案,并它们对应的词典包含同样的信息。注意,此隐含 的词典同步技术需要被压縮算法发送的经压縮的数据以与发送完全相同的次序被 解压縮单元接收。若某些被压縮的数据被解压縮单元次序紊乱地接收,或若某些被 压縮的数据丢失,解压縮算法可以构成与压縮算法不同的词典,这可能转而导致不正确的解压縮。因此,在网络情况中,在压縮和解压縮单元之间发送的被压縮数据 必须在可靠的传输信道发送。IZ算法隐含地是增量的,因为发送点自动地由压縮算法确定,并不需要特定 算法的选择。因此,也没有附加的计算开销来选择发送点或计算对发送的指针(如 在LZ77或Sequitur的情况)。图7是按本发明的一个实施例的发送技术的例子的图示。在图7中,数据序列是"abababcabc"。注意,这不同于在图4中示出的例 子。开始,指针T在502被设成第一个接收数据位置的前一个位置。在此例中使用 上述参考图3的压縮技术。使用此压縮技术第一个新的词典短语被加到第4行。然 而,在增加新的词典短语之前,发送组件204将S'中的发送从T到S'的末端所有 符号。在此例子中,发送包括如图7中的第4行示出的符号"abab"。然后,在 506使用图3所述的技术替代重复短语的所有出现。然后,指针(T)被设成等于 刚加入的新的短语。在此例中,T被设成等于Pi在第4行中的第二次出现。符号继续被接收及累积而不发送,直到接收到图7中第10行的序列。此时, 第二个短语被加到词典(P2=PlC)。在加入第二短语之前,发送组件204在504将 发送从指针(T)到S'的末端所有S'中的符号。在此例中,发送符号"P,cP工"。 新短语在S'中的出现在506中按图3中描述的技术替代,且指针(T)在508被设 成新加入短语的末端。在此例中,T被设成等于在图7的第10行中示出的S'中的 第二个h。此过程对任何数量的数据继续。上面发送过程隐含地同步了压縮和解压縮词典并保证解压缩单元总能解参照 它接收的每个词典短语。本发明的另一个实施例使用直接的词典发送过程以保证所 有短语的可解压縮性。此另外的发送过程是基于将短语在独立而并行的通信信道中 发送到解压縮算法。每当压縮算法发现新的词典短语,它被加上标记 "installed=0",指出该短语尚未被安装在解压縮词典中。此新的短语号和它的 内容经可靠的传输信道被发送到解压缩单元。解压缩算法对每个它收到的规则送回 确认。当压缩算法对短语收到确认,它在该短语上设置标记"installed=l",指 出该短语已被接收并安装在解压縮词典中。在由压縮算法发送任何短语 之前,该算 法校验"installed"标记。若installed等于0,即FALSE (假),则发送该短语 的内容。注意,当短语的内容被发送时,该算法也必须递归地对在这些内容中的任何嵌入短语校验installed标记。若installed等于1,即TRUE (真),发送短语 本身。通过使用此另外的直接词典发送过程,压縮算法能同步两个词典并保证解压 縮算法永不会接收不能解参照的短语。此方法还显著地改变了解压縮算法的结构。 因为在此方法中词典短语直接发送到解压縮算法,它不需要从数据流中发现这些短 语。因此,解压縮算法只需要解参照(即解压縮)它接收的数据并不需要处理通过 压縮算法的短语检测器和删除组件的数据(在以前描述的隐含词典同步实施例中是 必须的)。还注意到,在此直接词典发送模型中,词典同步不需要被压縮的数据在 可靠的传输信道(即保证按顺序递交所有数据包的信道)中发送。因为被压缩的数 据不用于隐含地同步词典,在压縮单元和解压縮单元之间的数据的丢失或数据提交 次序紊乱将不导致不一致的词典,从而不导致不精确的解压縮。在上述直接词典中,同步技术能以各种方法进一步优化。例如,只有遇到大 于"N"次的短语能选择由压縮算法发送。设N=l,将导致所有短语被发送,并因 此提供最大的压縮和最快的收敛。但同时,为同步两个词典所需的附加带外词典发 送通信量也将最大。当N增加时,压缩和收敛将降低,但额外的带外词典同步通信 量也将降低。因而N能根据所遇到的通信量的类型动态地选择以便使总的输出通信量最小。而且,若有任何与发送单独词典短语更新有关的开销,可以缓存多个短语 并作为单个数据包一起发送。上述直接词典发送模型也能通过从解压縮算法对每个由压缩算法发送的词典 更新消除确认的需要而优化。在上面实施例中,压縮单元必须从解压縮单元接收"短 语收到"的确认,以便将对该短语的"installed"标记从0(即假)改到1 (即真), 并从而允许压縮算法能在未来的压縮中使用该短语。此过程保证由压縮单元在被压 縮的数据中发送的所有短语参照能由解压縮单元解参照以产生该短语的原始内容。 在直接词典发送模型的另一个实施例中,在预定但动态调节的时间间隔之后,压縮 算法自动地将对新发送的短语的installed标记从0改变到1。当短语从压縮单元 (经独立可靠的词典传输信道)发送时,它被本地标记一时间标签(t。)指出发送 的时间。同时对被发送的短语的"installed"标记被初始化成0。在预定的时间 间隔(T)以后,该短语的"installed"标记从0改变成1,从而允许压縮算法使 用该短语于未来的压縮。此词典发送模式推测,若短语的更新在时间t。从压縮单 元发送到解压縮单元,则任何使用此短语并从压縮单元在时间t。+T之后发送的被压縮数据在短语更新之后到达解压縮单元。时间间隔T能考虑到在压縮和解压縮单 之间数据发送的速率和等待时间的可变性加以调节。此推测的词典发送模型改进了 压縮的程度,因为它允许压縮单元在短语的更新被发送之后开始使用短语T秒,而不必等待从解压縮单元来的对该短语的确认。从而短语更快地成为可用,它产生更 高的压縮。因为上述推测的词典发送模型是基于在压縮和解压縮单元之间发送时间变化 的估计,有可能在特定的短语的内容经由独立的词典同步信道被接收之前,解压缩 单元接收在被压縮数据中的该短语的参照。当发生此情况时,解压縮单元发送信号 给压縮单元,指出它(解压縮单元)在经由词典更新信道接收短语内容之前经数据 信道接收到该短语。压縮单元使用从解压縮单元来的这些误差信号适本地调节在发 送新短语和将该短语的installed标记改成l之间的时间间隔(T)。上面推测词典发送模型的另一个组件是当解压縮算法接收到它不能精确地解 参照的短语时它应能检测。这能用许多方法达到。推测的词典发送模型的一个实施 例对在压縮单元和解压縮单元中发送和安装的短语的总数保持一个计数器。因为所 有短语有序地发送和接收(由于它们经由可靠的传输信道发送),这些计数器能用 于检测在短语的内容经由词典同步信道接收之前是否解压縮信道经数据信道收到 该短语的参照。在压縮单元的每个短语根据被安装的计数器的当前值用"本地安装 的计数器"本地标记。每个从压縮单元发送的压缩的数据包,对在压縮数据包中参 照的所有短语用"本地安装的计数器"的最大值标记。此"最大安装计数器"指出在压縮的数据包中使用的最近"安装"的短语。 当解压縮单元接收被压縮的数据包时,通过校验"最大安装计数器"是否大于其自己当前的安装计数器来检测该数据包是否包含非可解参照的短语。若是这样情况, 则在压縮的数据包内至少存在一个解压縮单元尚未收到其更新的内容的短语。此事 件随后被用于启动上述反馈机制以发送误差信号给压縮单元。用于计数发送和安装 短语数的计数器最终能达到其最大值并返回到零。借助保证超过当前安装计数器的 任何"本地安装的计数器"被复位到某个初始值(可能为0)来处理此情况。系统 还保证,当发送计数器达到其最大值时,在对应于最大的计数器值的短语被压縮单 元确认,压縮单元才发送任何新的短语更新。因而发送的解压縮单元除了对应于最 大接收的计数器的短语更新以外不需要确认任何被接收的短语更新。如上所述,为了使压縮技术在无穷尽的数据上连续地工作而不需要大的系统 资源,压縮系统和技术应有效地可行地删除短语和符号以减少词典的大小。本发明 达到了此目标。即因为短语词典和被压縮的序列S'使用系统资源(如系统存储器) 保持它们的状态信息,为了保证本发明能在无限的数据流上连续地运行,必须提供 有效的方法来从词典中删除老的短语并删除被压縮的序列S'的最老的部分。若这 些"忘记"(删除)措施不具备,该算法最终将用完系统资源并必须终止。因为短语是分层的(即短语能包含输入字(符号)或对其他短语(数据短语 标识符)的参照),不可能简单地删除短语而不管它是否被更高层短语参照。例如, 若短语Pi被P」参照(如P尸Pia),且Pi被删除,则P,的任何未来使用将导致错误。 因而,必须判定的不仅是哪个短语能删除,而且还要保证参照这些短语的所有短语 也被删除。本发明通过在"最近最少使用(LRU)"的数据结构中表示所有短语来解决所有这些问题。在本发明的一个实施例中LRU作为链表实现,并每当在压縮期 使用短语时使用LRU有效地将其移到表的前端。因而,若短语"P产ab"在LRU的 中间且符号ab出现在输入流中,则Pi从它在表的当前位置去除并附到该表当前前 端(或头部)。建立的新短语也放在表的当前前端(或头部)。因而,在算法的任 何点,在表的末端(或尾部)的短语是最近最少使用的短语。若必须删除短语以释 放系统资源再度使用,则最近最少使用的短语将是首先要删除的。虽然能使用LRU识别哪个短语要删除,但它没有指出哪个较高层短语参照此 短语,因而也必须删除。本发明通过要求每个短语保持一个"父指针"来解决此问 题,它总是保持该短语最近一次被参照的轨迹。例如,若Pi最近被P」参照,而Pj 最近被压縮的字符串S'参照,则P,应包含到Pj的父指针,而P」应包含指向S'中被 使用的位置的父指针。图8a和8b是按本发明的一个实施例的删除技术的LRU和父 指针的例子的图示。在图8a中短语LRU和父指针直接图示在输入符号"ab"到达之后。 在图8b中短语LRU和父指针直接图示在输入符号"c"到达之后。 在图8中示出的数据结构允许算法能精确地判定实际哪个短语被另外的较高 层短语参照。因此,能按照图9实现短语的删除。图9是示出按本发明的一个实施 例的删除技术的流程图。使用图9示出的技术,X在902设成在LRU尾部的短语。然后Y在904设成X的父指针。若在906如图8a, Y指向一个短语,则在LRU中从位置X到Y的所有短 语在908被删除(包括X但不包括Y) , X在910设成Y,过程在步骤904处重复。 若当906 Y指向符号,则删除单元208在919删除X并随后在920删除从S'的尾 部到Y的所有符号。此算法递归地保证,若任何短语被删除,在短语词典和在S'中对该短语的参 照也被删除。此算法还导致从压縮的序列S'删除符号。因此,由不常访问的短语 和S,中的老的符号占用的系统资源通过此技术能再度使用。若必须释放附加的资 源,也能删除S,的尾部的符号而不应用上述短语删除算法。这能简单地从S'的尾 部去除所需数目的符号(只要这些符号以前已被发送过)来完成。若被删除的符号 是对一个短语的参照,则校验该特定的短语,判断其父指针是否指向S'中被删除 的符号的位置。若是这样情况,则该父指针被设成空值,说明在S'中它所指向的 符号已被删除。或者该短语及其后代(即指向它的其他短语)也能被删除。也能使用上述短语和符号删除算法设定由本发明的系统和方法使用的系统存 储器的数量的固定限制。两种删除算法招致最小的计算开销且不影响IZ算法的线 性度。在处理无限输入流时,连续运行的IZ过程动态地选择要删除的短语和符号 并重新使用释放的资源,以保证它不会超过预定的或浮动的限制。在上述本发明的实施例中,对重复两次的每个符号对在词典中建立新的短语。 它可以修改,使得仅当一个符号对至少重复K次时建立新的词典短语,其中K二3, 4, 5等。此修改将减少在词典中短语的数目,并可增加或减少压縮的效率。用本发明发送的数据能使用如算术编码那样的增量编码方案统计地编码。此 步骤常常是不必要的,因为由统计编码得到的附加压縮与去除大的重复短语得到的 压縮相比是微不足道的。例如,因为IZ能用单个短语号替代隔开很大距离的大的 重复,通过删除和消除重复短语得到高度的压縮。在那样情况,由编码和压縮的序 列得到的附加压縮将是微小的。因此,能避免与统计编码及其相关的计算开销而不 会在压縮效率上有大的降低。这是与其他基于词典的技术相反,它们只能检测相当 小的窗口内的重复并因此通过统计编码步骤得到它们主要的压縮。因此如果这些其 他程序的输出不作统计编码,它们将大大地降低了压縮效率。若由本发明产生的压縮数据在发送前包装成数据包,则该数据包能借助应用 其他增量的或非增量的统计编码或压縮技术(如Huffman编码)作进一步处理。这可以是应用到输出的后处理步骤,因而不影响本发明的增量本质。本发明在逻辑上对每个信道由两个通信模块组成,它们是压縮的。压縮模块 在信道源处压縮数据,而解压缩模块在信道目标处解压縮数据。若单个源与多个目 标通信,本发明能伸縮并重复,使得对每个目标存在单独的压縮模块。所有这些压 縮模块能驻留在同一个压縮单元或设备。类似地,若多个源和单个目标通信,本发 明能伸縮并重复,使得对每个源存在一个单独的解压縮模块。而且所有这些解压缩 模块能驻留在同一个解压縮单元或设备。此外,多个压縮和解压縮模块能驻留在同 一单元或设备上,它然后成为组合的压縮和解压縮单元。本发明的本实施例对每压縮和解压縮模块使用独立的词典。本发明的另外的 实施例使用在共存于同一源的多个压縮模块之间的共享词典。此另外的共享词典实 施例能使用上述直接词典同步技术保证共享的压縮词典与每个解压縮词典同步。在 压縮单元的共享词典能通过建立单个共享数据结构以存储所有由压縮算法学到的 短语来实现。每个短语还保持共享的总体版本号,每当属于该短语的内容被删除或 用新的短语替代时,此版本号增加。因此,在此共享的词典实施例中,所有压縮单 元的检测器和删除组件能被共享。每个压縮单元具有它自己单独的发送单元,它保 持独立的本地短语版本号和状态标志。当新的短语参照从检测器组件传送到发送组 件以备发送到解压縮单元时,共享的总体版本号与对特定于给定的发送组件的本地 版本号相比较。若两个号相同,则发送组件校验与短语相关的其本地状态标志,以 判定该短语是否已被发送和安装。若两个号不同,则发送组件知道它是由共享的检 测器组件建立的新短语。在此情况,发送组件复位状态标志以指出该短语尚未被发 送,并根据上述直接词典发送协议处理该短语。此共享的词典发送实施例使能更有 效的使用系统存储器资源,因为所有共存于同一设备的压缩单元共享单个短语层次 和符号数据结构。所有短语的内容仅存入共享的数据结构中。加入到该设备的每个 附加的压縮单元实际上只需要一个附加的短语索引表来存储每个短语的本地版本 号及状态。用于每个输入符号的字长是可变的。本发明用1, 2, 4个字节的字长实现, 产生变化的结果。字长也能设成大于4个字节。因为算法的速度取决于它处理的符 号的数目,较大的字长产生较大的数据通量。若每个符号对应于4个字节(即字长-二4字节),该算法近似于在任何时间周期处理相当于每个符号对应于1个字节时,使用4字节的字长使该算法不能检测在4个字节边界 上发生的重复(即由一系列字节数分离的重复,而字节数不是4的倍数)。在短语检测算法中使用的散列函数和表是灵活的。它们能优化成最适合于被 压缩数据的类型。用于短语LRU和压縮序列S,的链表能作为单链表或双链表实现。如阵列那样 的其他数据结构也能使用并能提供更好的存储器使用。如上所述,本发明是有效的压縮算法,它能检测并消除在实际上无限大小窗 口内可变长度的重复短语。窗口的大小只受可用的系统存储器的大小的限制,并不 影响算法的速度。不是使用在LZ77压縮技术中常用的几千字节的窗口大小,本发 明能使用从数十到数千兆字节的窗口大小(只受系统资源的限制),而在程序速度 方面没有大的变化。因为在本发明中窗口只由压縮数据组成,关于未压縮的数据的 窗口的实际大小能变化并超过数千兆字节(取决于压縮程度)。在窗口大小方面惊 人的增加是重要的优点,因为它使算法能检测分隔很大距离的重复。因此不仅能压 縮单个文件或对象,本发明能用于压縮多个文件或对象一起的任意集合,并因而达 到高得多的压縮程度。因而本发明能用于压縮累积的交互对话的网络信息量的连续 流,其中在不同对象或数据包之间的重复可被大量数据隔离。因而本发明能够既作 对象内部的(本地的)压縮又作对象之间的(全局的或交互会话的)压縮而不是只 作对象内部的压縮。本发明的另外优点是它是完全增量的和连续的。因此,本发明能应用于无限 数据流而没有算法失败或终止的危险。本发明增量地处理到达的输入并在线性的时 间内连续地产生输出。本发明能配置成总是保持在固定大小的系统存储器内并永远 不超过此预置的限制。算法通过动态地删除短语和符号并重新使用它们的资源以学 到新的词典短语而达到此连续和流式的功能。该算法也是自适应的并学到新的词典短语以适应输入数据的变化。IZ算法的此隐含的增量的,连续的和线性的特性(除 了它实际上无限搜索窗口大小)是独一无二的特征,它不包括在任何其他的通用无 损压縮技术中。本发明的另外优点是它的有效性。本发明线性地执行。即当输入数据量增加 时执行时间不是非线性地(如指数地)增加。本发明的线性度不受程序的增量发送 和连续短语/符号删除组件的影响。线性度也不受从中能检测重复的窗口大小的影响。因此,任何输入流能在正比于输入大小的时间内通过本发明压縮。此外,因为本发明使用短语的分层表示,整个词典能比其他基于词典的技术(如LZ77)更有效地存储。本发明只有当短语出现多于一次时才将它们加入词典。因此,词典项比在LZ78中更好地被利用,后者使用更积极和推测性的词典结构技术。本发明还比其他基于分层规则的技术更有效,因为它不需要任何附加的处理来选择增量发送点 (如Sequitur的为选择发送点的计算量大的算法)。本发明的隐含的词典短语的发送比其他基于指针的技术(如LZ77和 Sequitur)更有效,因为本发明不需要使用标记或其他方法来计算并发送对每个指 针的起始位置。由本发明使用的表示短语和符号的数据结构也比由Sequitur使用 的有更高的存储效率。此外,本发明的重复的检测方法在检测长的重复时比 Sequitur更有效,因为当重复的短语被扩展时,本发明不需要连续地建立和删除 短语。本发明是结合上述四个优点的仅有的通用无损压縮算法,它们是线性速度, 实际上无限的窗口大小,隐含的增量性,和完全连续的压縮。这四个优点使本发明 能在以前压縮尚未被成功地应用的广泛的领域中使用。例如,本发明能通过检测和 消除类似的或同样的对象或数据包用于压縮网络数据流。本发明能用于改善在网络 中经过任何两个通信节点的带宽利用。发送类似或相同的对象的任何网络结构能从 此发明大大得益。例如,从内容提供者发出的万维网信息量常包含发送到不同用户 的相同的或相似的对象。在此情况,本发明有用于趋同和压縮发送到不同用户的数 据,并因而大大地减少了经因特网传输该数据的带宽需求。解压縮算法能在靠近终 端用户处选出压縮流,并在将该数据送到用户之前将其扩展成其原始大小。这将不 仅导致在压缩方和解压縮方之间大大降低带宽的使用,而且导致大大加快了数据向 用户的传递。有若干本发明提供很大应用价值的其他网络情况,如在压縮经过专线 网或虚拟专线网发送的数据中。此外,本发明能用于有效地压缩整个数据库以便更 有效地存储和发送。在所有这些情况中,本发明将提供高于其他压縮技术的附加实用价值,因为它能在线性时间内达到对象之间和对象内部(交互会话的)压縮。本发明在线性时 间内运行,使用实际上无限的窗口大小,隐含地是增量的,并能连续地在无限输入 流上运行,由于这些事实所有这些应用和益处是可能的。虽然本发明参照较佳实施例和若干另选的实施例己予以特别示出和描述,但 在相关领域中的技术人员可以理解,在不背离本发明的精神和范围的前提下可以作 出在形式和细节方面的各种变化。
权利要求
1.一种方法,包括在压缩设备接收数据流;在所接收的数据流中检测重复的数据短语,其中在所述数据流中每一数据短语包括一组顺序数据符号;将与所述重复数据短语相关的一组库短语发送到解压缩设备;以及在从所述解压缩设备接收对于接收到所述一组库短语的确认之前,发送与所述一组库短语中任何库短语相关的数据短语标识符。
2. 如权利要求l所述的方法,还包括其中在接收确认之前发送数据短语标识符包括在发送所述数据短语标识符之前等待一时间间隔;以及即使当在所述时间间隔之内没有接收到来自所述解压縮设备的确认时,也在 所述时间间隔到时后就发送所述数据短语标识符。
3. 如权利要求2所述的方法,还包括从所述解压縮设备接收误差信号,指示所述解压縮设备在所述一组库短语之前接收到所述数据短语标识符;以及响应于所述误差信号动态调节所述时间间隔。
4. 如权利要求3所述的方法,还包括动态调节所述时间间隔包括根据从所述解压縮设备接收的多个误差信号设置 所述时间间隔。
5. 如权利要求l所述的方法,还包括设置表示发送所述一组库短语的时间的 时间标签。
6. 如权利要求l所述的方法,还包括 对所发送和安装的短语的总数保持一计数器;根据所保持的计数器的当前值,用本地安装的计数器本地标记每一库短语; 对由一压縮数据包中任何数据短语标识符参照的所有库短语,用所述本地安 装的计数器的最大值标记所述压縮数据包;以及 将所述压縮数据包发送到所述解压縮设备。
7. 如权利要求6的方法,还包括 在所述解压縮设备接收所述压縮数据包;确定在所接收的数据包上标记的最大值大于所保持的计数器的值;以及响应于所述确定发送误差信号。
8. —种压縮设备,包括压縮单元,用于接收数据流并在所接收的数据流中检测重复的数据短语,其中在所述数据流中每一数据短语包括一组顺序数据符号;发送组件,用于将与所述重复数据短语相关的一组库短语发送到解压縮设备, 并在从所述解压縮设备接收对于接收到所述一组库短语的确认之前,发送与所述一 组库短语中任何库短语相关的数据短语标识符。
9. 如权利要求8所述的压縮设备,其特征在于所述发送组件在发送所述数据 短语标识符之前等待一时间间隔,并且即使当在所述时间间隔之内没有接收到来自 所述解压縮设备的确认时,也在所述时间间隔到时后就发送所述数据短语标识符。
10. 如权利要求9所述的压縮设备,其特征在于所述压縮单元从所述解压縮 设备接收误差信号,指示所述解压縮设备在所述一组库短语之前接收到所述数据短 语标识符,并且响应于所述误差信号动态调节所述时间间隔。
11. 如权利要求10所述的压縮设备,其特征在于所述压縮单元根据从所述解 压縮设备接收的多个误差信号设置所述时间间隔。
12. 如权利要求8所述的压縮设备,其特征在于所述压縮单元设置表示发送 所述一组库短语的时间的时间标签。
全文摘要
本发明提供一种增量和连续的数据压缩技术。一种方法,包括在压缩设备接收数据流;在所接收的数据流中检测重复的数据短语,其中在数据流中每一数据短语包括一组顺序数据符号;将与重复数据短语相关的一组库短语发送到解压缩设备;以及在从解压缩设备接收对于接收到一组库短语的确认之前,发送与一组库短语中任何库短语相关的数据短语标识符。
文档编号H03M7/30GK101277117SQ20081008154
公开日2008年10月1日 申请日期2001年7月18日 优先权日2000年7月25日
发明者A·P·辛格 申请人:瞻博网络公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1