專利名稱:增量和連續(xù)的數(shù)據(jù)壓縮的制作方法
增量和連續(xù)的數(shù)據(jù)壓縮本申請(qǐng)是申請(qǐng)日為2001年7月18日申請(qǐng)?zhí)枮榈?1816213. 4號(hào)發(fā)明名稱為"增 量和連續(xù)的數(shù)據(jù)壓縮"的中國(guó)專利申請(qǐng)的分案申請(qǐng)。 有關(guān)申請(qǐng)本申請(qǐng)要求在2000年7月25日提交的美國(guó)臨時(shí)申請(qǐng)?zhí)枮?0/221, 262的專利 申請(qǐng)的優(yōu)先權(quán),該專利整體加入這里作為參考。 發(fā)明背景1. 發(fā)明領(lǐng)域本發(fā)明涉及數(shù)據(jù)壓縮領(lǐng)域,尤其涉及增量及連續(xù)的數(shù)據(jù)壓縮的領(lǐng)域。2. 背景技術(shù)描述傳統(tǒng)通信系統(tǒng)的重要目標(biāo)是改善數(shù)據(jù)的帶寬的吞吐量。傳統(tǒng)的系統(tǒng)不是發(fā)送 每一位數(shù)據(jù),而是使用壓縮算法來(lái)減少?gòu)脑吹侥繕?biāo)需要發(fā)送的數(shù)據(jù)量。兩類壓縮算 法,無(wú)損壓縮算法和有損壓縮算法。無(wú)損壓縮算法將數(shù)據(jù)轉(zhuǎn)換成一種形式,其中包 含在該數(shù)據(jù)中的信息不受損失。相反,有損壓縮算法產(chǎn)生一種表示方式,其中,該 數(shù)據(jù)的某些細(xì)節(jié)可能被排除。壓縮算法也能粗略地分成兩個(gè)類別專用的及通用的。專用壓縮及解壓縮應(yīng) 用于那樣的數(shù)據(jù),對(duì)那些數(shù)據(jù)它們的數(shù)據(jù)特征的先驗(yàn)知識(shí)是可以得到的。例如,視 頻數(shù)據(jù)已知由各個(gè)幀組成,每幀與其以前幀及后續(xù)幀的區(qū)別很少。在那樣的情況, 專用壓縮方案能得益于此先驗(yàn)知識(shí)而設(shè)計(jì)更專門(mén)的因而可能更有效的壓縮及解壓 縮算法。通用壓縮算法(也稱為萬(wàn)能壓縮算法)不假設(shè)數(shù)據(jù)特征或產(chǎn)生數(shù)據(jù)的源的 任何先驗(yàn)知識(shí)。因此,通用壓縮常常比較低效,它更經(jīng)常地導(dǎo)致比對(duì)于特殊數(shù)據(jù)類 型的專用壓縮算法更少程度的壓縮。然而,通用壓縮算法更靈活,因?yàn)槿缟纤觯?它們能有效地用于許多不同類型的數(shù)據(jù),并在事先不知道有關(guān)數(shù)據(jù)的信息的情況下 應(yīng)用。一類通用壓縮算法是根據(jù)對(duì)數(shù)據(jù)中的重復(fù)的識(shí)別及消除。這些方法稱為基于 詞典的壓縮技術(shù),因?yàn)樗鼈冊(cè)噲D發(fā)現(xiàn)重復(fù)項(xiàng)及短語(yǔ)的詞典。學(xué)到的詞典項(xiàng)隨后被用于消除在目標(biāo)數(shù)據(jù)組中的這些項(xiàng)的重復(fù)性。兩個(gè)其他類型的壓縮算法是增量壓縮算法和連續(xù)壓縮算法。此兩類算法不是 互相排斥的,即一個(gè)壓縮算法能既是增量的又是連續(xù)的,增量壓縮算法是不需要處 理整個(gè)輸入流或輸入流中的整個(gè)數(shù)據(jù)塊來(lái)產(chǎn)生其輸出的算法。相反,增量壓縮算法 在逐個(gè)符號(hào)的基礎(chǔ)上(即增量地)處理輸入,并在其仍然處理輸入的過(guò)程中產(chǎn)生其 輸出,而不是在其處理整個(gè)輸入之后。例如,計(jì)算在一段文字中的元音數(shù)的算法基 本上是非增量算法,因?yàn)樗仨毺幚碚麄€(gè)文字輸入來(lái)計(jì)算元音的總數(shù)。另外,將小 寫(xiě)文字轉(zhuǎn)換成大寫(xiě)文字的算法是增量的,因?yàn)樗塥?dú)立地處理每個(gè)輸入字符,并能 在其處理每個(gè)輸入字符時(shí)產(chǎn)生其輸出。連續(xù)算法是能在無(wú)限的輸入數(shù)據(jù)流上無(wú)限地運(yùn)行而不會(huì)用完如存儲(chǔ)器及盤(pán)空 間等那樣的系統(tǒng)資源的算法。連續(xù)算法也常常稱為流算法。注意,僅僅在處理所有輸入后產(chǎn)生輸出的非增量算法根據(jù)定義是非連續(xù)的(因?yàn)樵谶B續(xù)算法中輸入是無(wú)限 長(zhǎng))。數(shù)據(jù)的存儲(chǔ)和傳輸?shù)拇鷥r(jià)直接與數(shù)據(jù)對(duì)象的大小相關(guān)。因此,從數(shù)據(jù)中消除 冗余是改善數(shù)據(jù)存儲(chǔ)和傳輸?shù)男实母叨扔行У姆椒āW钔ㄓ玫臒o(wú)損數(shù)據(jù)壓縮算法 試圖根據(jù)兩個(gè)主要方法從數(shù)據(jù)中消除冗余(1)識(shí)別和消除重復(fù)的項(xiàng)及短語(yǔ);和 (2)以更有效的方式編碼數(shù)據(jù)。能通過(guò)各種技術(shù)實(shí)現(xiàn)重復(fù)項(xiàng)或短語(yǔ)的識(shí)別。涉及的通常原則能借助例子說(shuō)明。 考慮到等式(1)中的字符序列。S二aabcaabdaabeaabf 等式(1)基于詞典的壓縮算法能識(shí)別,短語(yǔ)"aab"在此序列中重復(fù)了 4次。若算法用 新的符號(hào),如A替代"aab"的所有出現(xiàn),該序列則被更有效地存儲(chǔ)或傳輸。被壓 縮的序列然后看來(lái)如等式(2)中的序列。S=AcAdAeAf 等式(2)除了上述壓縮序列以外,該算法也必須存儲(chǔ)或發(fā)送附加指令,指出在解壓縮 期間A的所有出現(xiàn)應(yīng)由"aab"替代。因此,指令A(yù)^aab是壓縮所根據(jù)的詞典項(xiàng)。 為了能解壓縮,該詞典和壓縮的字符串必須被存儲(chǔ)或發(fā)送。雖然在此情況詞典是易 于確定的,對(duì)給定的輸入序列已經(jīng)示出,尋找產(chǎn)生高度壓縮的詞典的問(wèn)題是NP— 完成,它在計(jì)算機(jī)協(xié)會(huì)雜志29(4) (1982) 925-951頁(yè)J. A. Storer所著"Datacompression via textual Substitution"中描述,該文整個(gè)加入于此作為參考。 數(shù)據(jù)編碼包括在每個(gè)字符的基礎(chǔ)上修改數(shù)據(jù)的表示,使得經(jīng)常發(fā)生的字符能更有效地表示(如用更少的位數(shù))??紤]在等式(3)中14個(gè)字符的序列。 S二abacadaeafagah 等式(3)在此情況字符"a"發(fā)生7次而字符"b-h"的每一個(gè)只發(fā)生一次。若整個(gè)字 符表只有8個(gè)字符"a-h"組成,它們能對(duì)每個(gè)字符使用3個(gè)位的二進(jìn)制形式表示, 如表1所示。a 000 b 001 c 010 d Oil e 100 f 101 g 110 h 111 表l這使得序列(S)需要總共14X3=42位。另外,因?yàn)槲覀兛吹皆跀?shù)據(jù)中字符"a"出現(xiàn)得更頻繁,可以更有效地用更少的位表示"a",其代價(jià)是對(duì)字符表中的其余字符增加位數(shù)。例如,8個(gè)字符能改成如表2中那樣地表示。a 0b 1000c 1001d 1010e 1011f 1100g iioih 1110表2在此情況,字符串S需要1位表示7個(gè)"a"字符中每一個(gè),4位表示余下字 符的每一個(gè)。因而對(duì)S所需的總空間是7*1+7*4=35位。這表示節(jié)省了超過(guò)有百分 之16。有這樣統(tǒng)計(jì)編碼技術(shù)的各種例子,如Huffman編碼和算術(shù)編碼。那樣的方法 的更詳細(xì)描述在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),它們整個(gè)被加入于此作為參考。應(yīng)用于許多那樣的統(tǒng)計(jì)編碼技術(shù)的一般原則由Shannon于1948年在下文中提出 "A Mathematical Theory of Coraraunication,, , Bell System Technical Jonrnal, 27:389-403(1948),它作為整體加入于此作為參考。Shannon表示,需 要編碼以概率P出現(xiàn)的字符或字符串的位數(shù)是-log2P。因此,若8個(gè)字符a-h每個(gè) 以等概率出現(xiàn),P=l/8,每個(gè)字符能以-log2 (1/8) =3位編碼。但在我們上述例子 中,我們知道"a"以概率7/14出現(xiàn),而其余字符以概率1/14出現(xiàn)。因此,a能 以-log2 (7/14) =1位編碼,而每個(gè)余下的字符能以-log2 (1/14) =3.8位編碼。另外的編碼方法是游程長(zhǎng)度編碼。在此情況,同樣字符的序列用單個(gè)字符跟 著指出字符重復(fù)次數(shù)的數(shù)來(lái)替代。在等式(4)中給出一個(gè)例子。S二aaaaabbbbb 等式(4)此字符串能使用游程長(zhǎng)度編碼法編碼,如等式(5)所示。 S=a5b5 等式(5)許多傳統(tǒng)的基于詞典的,通用的,無(wú)損的壓縮算法是根據(jù)上述兩種方法的組 合,例如,首先是基于詞典的壓縮重復(fù)的短語(yǔ),隨后最終壓縮流作統(tǒng)計(jì)編碼?,F(xiàn)描 述這些傳統(tǒng)的壓縮技術(shù)的某一些。一種傳統(tǒng)的壓縮技術(shù)在下文中描述Ziv和Lempel的"A Universal Algorithm for Sequential Data Compression" , IEEE Transaction of Information Theory, IT-23 (3) : 337-343 (1977),它作為整體加入于此作為參考。此廣泛使用的基 于詞典的通用壓縮技術(shù)稱之為L(zhǎng)Z77,并形成若干其他壓縮算法的基礎(chǔ)。例如,廣 泛地與基于Unix的操作系統(tǒng)一起發(fā)行的"gzip"壓縮程序使用LZ77方法的一個(gè)變 例。LZ77是根據(jù)在固定大小的窗口中將指針用于短語(yǔ)以前的出現(xiàn)。通過(guò)穿過(guò)輸入 序列滑動(dòng)窗口并搜索在該窗口中的任何重復(fù)字符串來(lái)尋找數(shù)據(jù)中重復(fù)的短語(yǔ)。例如,考慮在等式(6)中的輸入序列。S二abcdefbcdgh 等式(6)LZ77方法判定,短語(yǔ)"bed"重復(fù)兩次,并使用此信息壓縮該序列。"bed" 的第一次出現(xiàn)不加修改。第二次出現(xiàn)被從S的起點(diǎn)到"bed"第一次出現(xiàn)的距離和 重復(fù)的長(zhǎng)度組成的指針?biāo)娲?。因此,序列S由LZ77被表示成如等式(7)那樣。S二abcdef (1, 3)gh指針(1,3)表示,在從窗口起點(diǎn)距離為1并向右延伸3個(gè)字符的短語(yǔ)在當(dāng)前 的指針位置被重復(fù)。此方案的一個(gè)變例使用從當(dāng)前位置反向的距離作為指針的第一 元素(而不是從窗口起點(diǎn)向前的距離)。在此情況S表示成如等式(8)那樣。S=abcdef (5,3)gh 等式(8)此處,指針(5, 3)指出,從當(dāng)前位置反向距離5處開(kāi)始并向右延伸3個(gè)字符 的短語(yǔ)被重復(fù)。傳統(tǒng)的基于LZ77的壓縮程序根據(jù)將可變長(zhǎng)重復(fù)轉(zhuǎn)換成固定長(zhǎng)指針的方法使用 上述指針。然后通過(guò)應(yīng)用統(tǒng)計(jì)編碼技術(shù)壓縮得到的符號(hào)和指針序列。這些程序能使 用不同的方法發(fā)現(xiàn)重復(fù)的短語(yǔ)并編碼最終的數(shù)據(jù)流。LZ77方法的一個(gè)問(wèn)題是它只能在固定大小的窗口中檢測(cè)重復(fù)。有限的窗口大 小不能檢測(cè)離開(kāi)距離大于窗口大小的重復(fù)數(shù)據(jù)。例如,在上述例子中,若窗口大小 減少到5個(gè)字符,"bed"的重復(fù)將不被檢測(cè),因?yàn)閺?bed"的第一次出現(xiàn)的開(kāi)始 到第二次出現(xiàn)的結(jié)束總的距離大于5。在LZ77方法中限制窗口的大小是為了限制 搜索重復(fù)性所需要的時(shí)間。使用LZ77方法的搜索算法的復(fù)雜性和執(zhí)行時(shí)間通常是 所搜索的輸入字符串的大小的函數(shù)。因而,通常傳統(tǒng)的LZ77壓縮技術(shù)將窗口大小 限制到幾千字符。例如,"gzip"程序使用32K字節(jié)的窗口。窗口大小的增加導(dǎo)致 LZ77算法執(zhí)行時(shí)間的很大增加。LZ77壓縮方法的另外的問(wèn)題是它需要第二階段的統(tǒng)計(jì)編碼以提供足夠的壓縮 率。由LZ77方法使用的統(tǒng)計(jì)編碼技術(shù)是非增量的,因而是非連續(xù)的(如gzip使用 Huffman編碼,它是非增量的)。非增量編碼技術(shù)在對(duì)一個(gè)數(shù)據(jù)塊輸出編碼樹(shù)以前 必須完全地處理這塊數(shù)據(jù)。由非增量技術(shù)使用的塊的大小也需足夠大以保證編碼方 案產(chǎn)生有效的編碼樹(shù)。因而LZ77技術(shù)不適合于實(shí)時(shí)或在線的壓縮,其中有必須被 增量地處理的連續(xù)流。LZ77的另一個(gè)問(wèn)題是可能的指針數(shù)目很大,因?yàn)樗鼈兡苤赶虼翱趦?nèi)任何位置。Ziv和Lempell針對(duì)LZ77技術(shù)中的某些問(wèn)題在1978年提出新的壓縮方案,稱 之為L(zhǎng)Z78。這在下文中描述Ziv禾n Lerapell的"Compression of Individual Sequences Via Variable Rate Coding", IEEE Transaction on Information Theory, IT-24(5): 530-536 (1978),它作為整體被加入于此作為參考。不是使用指向窗 口中位置的指針,LZ78方法使用在輸入流中遇到的所有短語(yǔ)的詞典的直接表示。 詞典通過(guò)建立在以前詞典項(xiàng)之上增量式地構(gòu)造。每當(dāng)見(jiàn)到新的短語(yǔ),在認(rèn)為它可能 以后被使用的前提下,將其加到詞典中。考慮在等式(9)中的輸入序列。S=cbaabacaccacccacccc 等式(9)LZ78產(chǎn)生短語(yǔ)(O,c),其中0是空字符串而c是第一字符,下面兩個(gè)字符也 導(dǎo)致兩個(gè)新的短語(yǔ)(0,b)和(0,a)。最終的短語(yǔ)序列示于表3。輸入 短語(yǔ)號(hào)_輸出短語(yǔ)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中示出的輸出短語(yǔ)列。如在此例能看出,詞 典項(xiàng)l, 2, 4在此編碼中永不使用,因而是詞典中的無(wú)用項(xiàng)。例如,雖然對(duì)"ac" 的詞典項(xiàng)被再使用以增量地產(chǎn)生"acc" , "accc",禾B "acccc",對(duì)"ab"的詞 典項(xiàng)不再使用,因而是無(wú)用的。LZ78技術(shù)的一個(gè)問(wèn)題是它使用積極的和推測(cè)的詞典結(jié)構(gòu)方案,這常導(dǎo)致不能 有效地使用的項(xiàng)的結(jié)構(gòu)。因此,詞典能變成很大,并導(dǎo)致不能有效使用系統(tǒng)資源并 降低壓縮效率。此外,LZ78方案的收斂速率是慢的,因?yàn)樵~典以慢的速率增長(zhǎng)。 基于LZ78的壓縮程序也常使用非增量的統(tǒng)計(jì)編碼技術(shù)來(lái)改善壓縮效率和程序速 度,因而不能用于在線或連續(xù)的數(shù)據(jù)。而且沒(méi)有措施來(lái)忘記(刪除)不再使用的短語(yǔ)或詞典項(xiàng)。對(duì)連續(xù)的,潛在無(wú)限的數(shù)據(jù)流,必要的是不僅動(dòng)態(tài)地產(chǎn)生新的詞典項(xiàng),還在于忘記不常使用的項(xiàng)以重新使用系統(tǒng)資源,這用LZ78算法不能實(shí)現(xiàn)。因此, LZ78算法不是連續(xù)壓縮算法。第三種壓縮算法是Sequitur算法,它在下文中描述Nevill-Manning和 Witten 的"Compression and Explanation Using Hierarchical Grammars", Computer Journal, 40 (2) : 103-116 (1997),它作為整體加入于此作為參考。 Sequitur算法從離散的符號(hào)序列推導(dǎo)出與上下文自由的語(yǔ)法。該語(yǔ)法分層地表示 該序列的結(jié)構(gòu),并能用于產(chǎn)生該序列的結(jié)構(gòu)的有用可視說(shuō)明并推導(dǎo)在該序列中的詞 法單元。因?yàn)樵撜Z(yǔ)法完全地表示了整個(gè)輸入序列,Sequitur也能用于數(shù)據(jù)壓縮。Sequitur通過(guò)在輸入序列中施加兩個(gè)約束而工作。第一約束是沒(méi)有相鄰符號(hào) 對(duì)能出現(xiàn)多于一次。第二約束是由算法產(chǎn)生的每個(gè)規(guī)則應(yīng)使用多于一次。Sequitur 通過(guò)增量地檢查該輸入序列并保證在該序列的每一點(diǎn)滿足此兩個(gè)約束而應(yīng)用這些 約束。例如,在等式(10)中示出的輸入序列中,S=abcdbcabcd 等式(10)Sequitur將產(chǎn)生在等式(11)中的語(yǔ)法S=BABA=bc 等式(11)B二aAd其中A和B是語(yǔ)法中的規(guī)則,它們類似于詞典項(xiàng)。上述語(yǔ)法滿足第一約束, 因?yàn)闆](méi)有符號(hào)對(duì)出現(xiàn)多于一次。第二約束也滿足,因?yàn)樵谠撜Z(yǔ)法中A和B均使用至少二次。因?yàn)檎麄€(gè)輸入序列由語(yǔ)法表示,Sequitur使用此算法于通過(guò)應(yīng)用算術(shù)編碼壓 縮以編碼整個(gè)語(yǔ)法。語(yǔ)法的規(guī)則(即詞典項(xiàng))被指針發(fā)送到重復(fù)以前的出現(xiàn)處,這 類似于上述對(duì)于LZ77的技術(shù)。當(dāng)在語(yǔ)法中第一次遇到規(guī)則時(shí),其內(nèi)容被發(fā)送。該 規(guī)則的第二次出現(xiàn)作為指向用于構(gòu)造該規(guī)則的序列的區(qū)域(如該規(guī)劃第一次出現(xiàn)的 內(nèi)容)的指針被發(fā)送。在解碼器及編碼器能保留互相的規(guī)則號(hào)的軌跡的假設(shè)下,所 有此規(guī)則的后續(xù)出現(xiàn)作為規(guī)則號(hào)被發(fā)送。Sequitur壓縮技術(shù)的一個(gè)問(wèn)題是它不是隱含地增量的。為保證語(yǔ)法用最少的 符號(hào)數(shù)發(fā)送,Sequitur需要語(yǔ)法在被發(fā)送前被完全構(gòu)成。通過(guò)將序列S的發(fā)送點(diǎn)10選在發(fā)送額外符號(hào)的概率低的地方,能使Sequitur看上去象增量的。用于檢測(cè)在 被壓縮的序列中的某一點(diǎn)是否為發(fā)送該序列的安全點(diǎn)的算法需要檢查就在此點(diǎn)以 前該符號(hào)的所有以前的出現(xiàn)。因?yàn)镾equitur需要在輸入序列的整個(gè)壓縮中動(dòng)態(tài)地 選擇這些點(diǎn),為了連續(xù)地搜索這些發(fā)送點(diǎn),該算法引起大量額外處理。此附加的處 理(為使Sequitur成為增量的這是必需的)使得整個(gè)壓縮算法是非線性,并因而 大大減少了有效性。Sequitur算法的另外問(wèn)題是它是不連續(xù)的。該算法不提供任何手段來(lái)增量地 發(fā)送被壓縮的輸出而同時(shí)刪除不常訪問(wèn)的規(guī)則和符號(hào)(為了再使用系統(tǒng)資源)。因 此,Sequitur不能應(yīng)用于無(wú)限或很大的輸入數(shù)據(jù)流,在線性時(shí)間內(nèi)產(chǎn)生被壓縮輸 出的連續(xù)流。Sequitur算法還在其使用系統(tǒng)資源方面不太有效,因?yàn)樗枰獜?fù)雜的數(shù)據(jù)結(jié) 構(gòu)使能夠作可變長(zhǎng)度的規(guī)則的頻繁建立及刪除。此外,該算法在刪除長(zhǎng)的重復(fù)時(shí)計(jì) 算上不太有效,因?yàn)樵谥貜?fù)的短語(yǔ)中的每對(duì)符號(hào)需要規(guī)則的建立和刪除。因此,重 復(fù)的每個(gè)附加的出現(xiàn)會(huì)招致多次規(guī)則的建立和刪除的計(jì)算上的過(guò)度開(kāi)銷。為了將規(guī) 則的第二次出現(xiàn)作為指針發(fā)送,Sequitur的技術(shù)也需要額外的處理與存儲(chǔ)開(kāi)銷。第四個(gè)壓縮算法是遞歸配對(duì)(Re-Pair)算法,它在下文中描述,Larsson和 Moffat 的 "Offline Dictionary-Based Compression ,, , Proceeding Data Compression Conference, 196-305 (1999),它被整體加入于此作為參考。Re-pair 算法試圖通過(guò)遞歸地檢査整個(gè)輸入序列以識(shí)別最頻繁出現(xiàn)的符號(hào)對(duì)來(lái)計(jì)算用于壓 縮的最優(yōu)詞典。在該算法的每個(gè)階段,最頻繁出現(xiàn)的符號(hào)對(duì)用表示該詞典中的新增 加的新的符號(hào)來(lái)替代。然后再次檢查整個(gè)經(jīng)修改的序列以找到當(dāng)前最頻繁出現(xiàn)的 對(duì)。此過(guò)程迭代,直到?jīng)]有出現(xiàn)大于一次的對(duì)。然后編碼最終的壓縮的序列和詞典, 以產(chǎn)生最終的壓縮輸出。這些算法的主要缺點(diǎn)是在于它們基本上是非增量及非連續(xù)的。在任何輸出能 夠產(chǎn)生之前,整個(gè)輸入序列必須通過(guò)遞歸配對(duì)處理。這些作者本身將算法描述為"離 線"技術(shù)。需要一種數(shù)據(jù)壓縮的系統(tǒng)及方法,它們(1)是通用壓縮算法;(2)是無(wú)損 壓縮算法;(3)對(duì)數(shù)據(jù)的線性增加不需要執(zhí)行時(shí)間的非線性增加;(4)不需要有 限的數(shù)據(jù)窗口大小;(5)是增量壓縮算法;(6)是連續(xù)壓縮算法。發(fā)明概述本發(fā)明是有效的壓縮算法,它能在實(shí)際上無(wú)限大小的窗口中刪除和消除重復(fù) 的可變長(zhǎng)度短語(yǔ)。窗口的大小只受可用的系統(tǒng)存儲(chǔ)的數(shù)量的限制且不影響算法的速 度。本發(fā)明是在線性執(zhí)行時(shí)間內(nèi)運(yùn)行的通用無(wú)損壓縮算法,能使用無(wú)限的窗口大小, 隱含地是增量的,且能在連續(xù)的輸入流上連續(xù)地運(yùn)行。附圖簡(jiǎn)述
圖1是本發(fā)明的一個(gè)實(shí)施例可以在其中運(yùn)行的計(jì)算機(jī)系統(tǒng)的圖示。圖2是按本發(fā)明的一個(gè)實(shí)施例編碼和封裝(EE)單元和解碼和解封裝(DD)單元的部件的圖示。圖3是本發(fā)明的檢測(cè)器部件的實(shí)施例的圖示。圖4是按本發(fā)明的一個(gè)實(shí)施例的檢測(cè)技術(shù)的例子的圖示。圖5是示出按本發(fā)明的一個(gè)實(shí)施例的發(fā)送過(guò)程的流程圖。圖6是示出本發(fā)明的一個(gè)實(shí)施例的解壓縮算法的流程圖。圖7是按本發(fā)明的一個(gè)實(shí)施例的發(fā)送技術(shù)的例子的圖示。圖8a和8b是按本發(fā)明的一個(gè)實(shí)施例刪除技術(shù)的LRU和父指針的例子的圖示。圖9是按本發(fā)明的一個(gè)實(shí)施例的刪除技術(shù)的流程圖示。較佳實(shí)施例詳述現(xiàn)參考附圖描述本發(fā)明的較佳實(shí)施例,其中類似的參照號(hào)指示等同的或功能 上類似的單元。而且在圖中,每個(gè)參照號(hào)的最左邊數(shù)字對(duì)應(yīng)于該參照號(hào)首次使用的 圖。圖1是本發(fā)明的一個(gè)實(shí)施例可以在其中運(yùn)行的計(jì)算機(jī)系統(tǒng)的圖示。計(jì)算機(jī)系 統(tǒng)100包括第一系統(tǒng)102A和第二系統(tǒng)102B。每個(gè)系統(tǒng)是獨(dú)立的計(jì)算機(jī)或軟件過(guò)程。 每個(gè)系統(tǒng)包括傳統(tǒng)的處理器110,存儲(chǔ)設(shè)備112,輸入/輸出設(shè)備114和操作系統(tǒng) 116。每個(gè)系統(tǒng)還包括編碼和封裝(EE)單元106和解碼及解封裝(DD)單元108。 EE和DD能作為在處理器上運(yùn)行的軟件或作為專門(mén)設(shè)計(jì)的硬件(在此情況處理器不 是必須的)嵌入。兩個(gè)系統(tǒng)102A和102B能通過(guò)任何物理的或邏輯的網(wǎng)絡(luò)鏈路連接??梢韵胂螅景l(fā)明能完全在兩個(gè)系統(tǒng)中運(yùn)行且在圖1中的實(shí)施例是示例性的,它不試圖限制本發(fā)明的范圍。下面將更詳細(xì)地描述EE單元106和DD單元108的操作。 例如,在另外的實(shí)施例中,EE單元106及DD單元108可以是專用集成電路(ASIC)的一部分。EE單元106實(shí)現(xiàn)本發(fā)明的壓縮技術(shù)。例如,EE單元106能作為計(jì)算機(jī)軟件程 序、硬件、固件或它們的組合來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本發(fā)明的壓縮技術(shù)能以存 儲(chǔ)在傳統(tǒng)的EE單元106中的存儲(chǔ)模塊并由處理器110執(zhí)行軟件來(lái)實(shí)現(xiàn)。本發(fā)明的 壓縮技術(shù)是時(shí)間線性的,完全增量的,和連續(xù)的數(shù)據(jù)壓縮算法。為便于參照,該算 法在此文件中稱為"IZ"。本發(fā)明的解壓縮工作在DD單元中完成,并能作為如計(jì) 算機(jī)軟件程序,硬件,固件,或它們的組合而實(shí)現(xiàn)。本發(fā)明包括同時(shí)操作的三個(gè)組件。圖2是按本發(fā)明的一個(gè)實(shí)施例的編碼和封 裝(EE)單元106和解碼和解封裝(DD)單元組件的圖示。第一組件是檢測(cè)器組件 202,它檢測(cè)在線性時(shí)間輸入流中任何處的重復(fù)短語(yǔ)/項(xiàng)。為本專利的目的。術(shù)語(yǔ)"項(xiàng)" 和"符號(hào)"可交替使用。"短語(yǔ)"或"數(shù)據(jù)短語(yǔ)"包括固定數(shù)目的順序數(shù)據(jù)項(xiàng)。數(shù) 據(jù)項(xiàng)可以是數(shù)據(jù)符號(hào)和/或數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。檢測(cè)器組件202通過(guò)使用實(shí)際上無(wú)限 的窗口大小識(shí)別并消除重復(fù)的短語(yǔ),增量地壓縮輸入流。此過(guò)程能使用作為檢測(cè)器 組件的部分的識(shí)別單元,壓縮單元,和庫(kù)建立單元(散列建立單元)完成。這些單 元的操作在下面參考圖3和4描述。第二組件是發(fā)送組件204,它以隱含的增量方 式發(fā)送經(jīng)壓縮的序列和有關(guān)的短語(yǔ)的詞典。發(fā)送組件204還保證壓縮和解壓縮算法 總是完全同步。第三組件是刪除組件206,它使IZ算法能刪除并有效地"忘記" 不常使用的短語(yǔ)和符號(hào)以釋放系統(tǒng)資源。因而該刪除組件使IZ能在無(wú)限的輸入數(shù) 據(jù)流上連續(xù)地運(yùn)行。DD單元108包括解壓縮單元,這在下面詳述。檢測(cè)器組件202,發(fā)送組件204和刪除組件206能以各種方式實(shí)現(xiàn)。檢測(cè)器組 件的一個(gè)實(shí)現(xiàn)方法示于圖3。短語(yǔ)檢測(cè)算法使用下列步驟,以增量地將輸入序列S轉(zhuǎn)換成被壓縮的序列S'。重復(fù)的符號(hào)對(duì)的檢測(cè)能使用散列表(如庫(kù))完成以記錄所有已被檢測(cè)組件202 觀察到的所有唯一的符號(hào)對(duì)。每個(gè)散列表的項(xiàng)包括指向唯一符號(hào)對(duì)的位置的指針。 若該符號(hào)對(duì)只出現(xiàn)一次,則對(duì)此符號(hào)對(duì)的散列表項(xiàng)將指向S'中第一符號(hào)的位置。 若該符號(hào)對(duì)已發(fā)生多于一次,且因而由詞典短語(yǔ)表示,則對(duì)該符號(hào)對(duì)的散列表項(xiàng)將指向?qū)?yīng)的詞典短語(yǔ)。為保證檢測(cè)所有重復(fù)的符號(hào)對(duì),該算法必須保證每當(dāng)一個(gè)符 號(hào)被加入或從S'中刪除,該散列表被適本地更新。例如,在圖3中示出的算法中的步驟314導(dǎo)致增加新的項(xiàng)到表中。類似地,步驟314, 318和332將導(dǎo)致從散列表中刪除一個(gè)或多個(gè)項(xiàng)?,F(xiàn)參考圖4中示出的例子描述圖3的流程圖。在圖4中示出的例中的輸入序列是"abcdcdabcd"。在步驟302 "Y"被設(shè)成 等于下一個(gè)輸入符號(hào)"a",并在304附在S,之后(它以前等于空)。X然后被設(shè) 成序列中"a"之前的符號(hào)(空)。在308, XY的組合以前未發(fā)生,所以XY在309 被加到散列表,過(guò)程在步驟302重復(fù)。圖4的第1行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成等于下一個(gè)符號(hào)b,在304附在S'之后,并在304 X被設(shè) 成Y前的符號(hào)("a")。在308 XY的組合(ab)以前未出現(xiàn),所以XY在309被 加到散列表,過(guò)程在步驟302處重復(fù)。圖4的第2行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"c",在304附在S,之后,在306 X被設(shè)成 Y之前的符號(hào)("b")。在308 XY的組合(bc)以前未出現(xiàn),所以在309 XY被 加到散列表,過(guò)程在步驟302處重復(fù)。圖4的第3行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"d",在304附在S,之后,在306 X被設(shè)成 Y之前的符號(hào)("c"),在308 XY的組合(cd)以前未出現(xiàn),所以在309 XY被 加散列表,過(guò)程在步驟302處重復(fù)。圖4的第4行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"c",在304附在S,之后,在306 X被設(shè)成 Y之前的符號(hào)("d")。在308 XY的組合(dc)以前未出現(xiàn),所以在309 XY被 加到散列表,過(guò)程在步驟302處重復(fù)。圖4的第5行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"d",在304附在S'之后,在306 X被設(shè)成 Y之前的符號(hào)("c" ) 。 XY的組合(cd)以前已經(jīng)出現(xiàn),所以過(guò)程繼續(xù)。因?yàn)閄Y 的以前出現(xiàn)是在序列S',且在310不是作為詞典短語(yǔ)的右端項(xiàng),這意味著XY是應(yīng) 該新建并加到詞典中去的新短語(yǔ)。因此,在312通過(guò)建立新的詞典短語(yǔ)P,且將其 設(shè)成等于XY,過(guò)程繼續(xù)。在此例中P,設(shè)成等于"cd"。然后XY的以前出現(xiàn)在314 中在S'由Pi替代。注意,此替代步驟314導(dǎo)致從散列表去除兩個(gè)項(xiàng)并將兩個(gè)新的 項(xiàng)加到散列表。這些散列表更新包括X以前的符號(hào)(稱為Xp)和Y之后的符號(hào)(稱 為Y。)。因?yàn)閄Y從S'中去除,符號(hào)對(duì)XpX和YL必須也從散列表中去除。因?yàn)閄Y被P,替代,符號(hào)對(duì)XpP,和PiYn必須加到散列表。在此例子中,"be"和"dc"從散列表被去除,"bP,"和"P,c"被加到散列表。然后,在316 Y從S,的末端去除, 在318 X從S,的末端去除。而且,在318 X從S'的末端去除將導(dǎo)致符號(hào)對(duì)(對(duì)應(yīng) 于X前的符號(hào)及X)從散列表去除。在此例子中,"PlC"將從散列表去除。然后Y 被設(shè)成等于Pl,且在步驟304過(guò)程繼續(xù)。在此點(diǎn)該例的狀態(tài)是S、abP,且Y等于P,。 然后在304 Y附于S'之后(現(xiàn)在S,二abPA)且在306 X被設(shè)成等于在S'中Y 前的符號(hào)("P/')。在308,序列中XY (P,P,)未出現(xiàn),所以XY在309被加到散 列表,過(guò)程在步驟302處重復(fù)。在圖4的第6行用S、abPA示出在此點(diǎn)該例子的 狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"a",在304附在S,之后,在306 X被設(shè)成 Y之前的符號(hào)("P1")。在308 XY的組合(P,a)以前未出現(xiàn),所以在309 XY 被加到散列表,過(guò)程在步驟302處重復(fù)。圖4的第7行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"b",在304附在S,之后,在306 XY被設(shè) 成Y之前的符號(hào)("a" ) 。 XY的組合(ab)以前已在序列中出現(xiàn),所以過(guò)程繼續(xù)。 因?yàn)閄Y的以前出現(xiàn)是在序列S'中,且不是作為詞典短語(yǔ)310的右端項(xiàng),這意味著 XY是應(yīng)該新建并加到詞典中去的新短語(yǔ)。因此,在312通過(guò)建立新的詞典短語(yǔ)P2 且將其設(shè)成等于XY,過(guò)程繼續(xù)。在此例中,P2設(shè)成等于"ab"。然后在314中XY 的以前出現(xiàn)在S'由h替代。如之前,該步驟導(dǎo)致從散列表去除兩個(gè)符號(hào)并加上兩 個(gè)符號(hào)。然后,在316 Y從S'的末端去除,在318 X從S'的末端去除(這也導(dǎo)致 從散列表去除一個(gè)符號(hào)對(duì))。然后Y被設(shè)成等于P2,且在步驟304過(guò)程繼續(xù)。在此 點(diǎn)該例的狀態(tài)是S、PJMV且Y等于P。然后在304 Y附于S,之后(現(xiàn)在S、P2P,PJ52)且在306 X被設(shè)成等于在S,中Y 前的符號(hào)(在此情況它實(shí)際上是數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符"P/,)。在308,序列XY (PA) 未出現(xiàn),所以在309 XY被加到散列表,過(guò)程在步驟302處重復(fù)。在圖4的第8行用S、P2P^P2示出在此點(diǎn)該例子的狀態(tài)。然后在302 Y被設(shè)成下一個(gè)符號(hào)"c",在304附在S'之后,在306 X被設(shè)成 Y之前的符號(hào)("P2")。在308 XY的組合(P2c)以前未出現(xiàn),所以在309 XY被 加到散列表,過(guò)程在步驟302重復(fù)。圖4的第9行示出在此點(diǎn)處該例子的狀態(tài)。然后在302 Y等于下一個(gè)符號(hào)"d",在304附在S,之后,在306 X被設(shè)成Y之前的符號(hào)("C" ) 。 XY的組合(Cd)前面己經(jīng)在序列中出現(xiàn),所以過(guò)程繼續(xù)。因?yàn)閄Y等于詞典短語(yǔ)310的右端項(xiàng),通過(guò)在330從S'的末端去除Y,在332從S' 的末端去除X,過(guò)程繼續(xù)。在332從S'的末端去除X導(dǎo)致從散列表去除符號(hào)對(duì)(對(duì) 應(yīng)于X前的符號(hào)及X)。然后在334中Y被設(shè)為等于XY的詞典短語(yǔ)。在此例中Y 被設(shè)成等于P,。過(guò)程在步驟304繼續(xù)。在這點(diǎn)此例的狀態(tài)是S,4^P1P2且Y等于Pi。然后在304 Y附于S,之后(現(xiàn)在S—P2P,PiP2P,),且在306 X設(shè)成等于在S,中 Y之前的符號(hào)("P2" ) 。 XY的組合(P2PJ在序列中以前己出現(xiàn)且因?yàn)閄Y不等于 詞典短語(yǔ)310的右端項(xiàng),通過(guò)在312建立新的詞典短語(yǔ)P3并將其設(shè)成等于XY,過(guò) 程繼續(xù)。在此例中,P:,被設(shè)成等于"PJV'。然后在314XY在序列S'以前的出現(xiàn)由 P:,所替代。然后在316Y從S'的末端除去,在318X從S'的末端除去。隨后Y被設(shè) 成等于P,,過(guò)程在步驟304繼續(xù),在此點(diǎn)上本例的狀態(tài)是S'^3P,而Y等于P3。隨后在304 Y附在S,之后(現(xiàn)在S,寸3P,P:,)且X在306被設(shè)成等于S,中Y之 前的符號(hào)("P/')。在308 XY (P,P3)在序列中以前未出現(xiàn),所以在309 XY被加 到散列表且過(guò)程在步驟302重復(fù)。圖4中的第10行用S、P3P,P:,示出在此點(diǎn)本例的 狀態(tài)。過(guò)程能對(duì)任何數(shù)目的輸入繼續(xù)。本發(fā)明能檢測(cè)在輸入流中任何處的重復(fù)。本發(fā)明不需要直接的搜索窗口,且 因而能夠檢測(cè)重復(fù)性而不論重復(fù)發(fā)生得多遠(yuǎn)。也應(yīng)用某些加窗口技術(shù)使得該算法如 下述那樣繼續(xù),但是此窗口是基于系統(tǒng)存儲(chǔ)器的大小且不影響該算法的速度。上述 算法已示出在時(shí)間和空間上是線性的。線性度的證明是根據(jù)計(jì)算處理長(zhǎng)度n的序列 所需的總操作數(shù)。此數(shù)示作為O(n)(即應(yīng)是正比于n的數(shù))。因而,本發(fā)明能經(jīng)過(guò) 實(shí)際只在線性時(shí)間中無(wú)限的窗口檢測(cè)可變大小的重復(fù)。重復(fù)的短語(yǔ)的檢測(cè)也比如上 述Sequitur技術(shù)那樣的其他技術(shù)更有效,因?yàn)镮Z對(duì)在短語(yǔ)中的每個(gè)符號(hào)對(duì)不需要 任何不是必須的規(guī)則的建立和刪除。發(fā)送組件204保證被壓縮的序列(S')和短語(yǔ)(Pi)的詞典均被發(fā)送,以確保 精確的解壓縮。因而,發(fā)送組件必須保證壓縮單元永不發(fā)送參照到詞典短語(yǔ),它在 解壓縮單元中不存在,從而不能由解壓縮單元進(jìn)行解參照。為保證該算法是完全增 量的,IZ使用下面的圖5中描述的過(guò)程發(fā)送S'和短語(yǔ)詞典。圖5是示出按本發(fā)明的一個(gè)實(shí)施例的發(fā)送過(guò)程的流程圖。在502使用指針(T)指向已被發(fā)送的壓縮序列(S')中的最后符號(hào)。從T到S'的末端的所有符號(hào)在將新的短語(yǔ)加入到詞典(如圖3中的步驟312)以前被發(fā)送。然后重復(fù)短語(yǔ)的兩次出現(xiàn) 在506用新建的短語(yǔ)替代,包括如在步驟312-320中在S'的末端的出現(xiàn)。然后, 在508指針(T)被設(shè)成指向附在S,末端之后的新的短語(yǔ)。圖5中示出的實(shí)施例的效果是頭兩次發(fā)生重復(fù)短語(yǔ)時(shí),它被不加修改地發(fā)送 (可以想象在本發(fā)明的另外實(shí)施例中出現(xiàn)其他變化,下面將描述其中一些)。因?yàn)?每次重復(fù)由嵌入的符號(hào)對(duì)組成,重復(fù)短語(yǔ)的第二次出現(xiàn)通常借助直接送出其內(nèi)容 (它只包括兩個(gè)符號(hào))而更有效地發(fā)送,而不是使用指針,后者需要額外的處理開(kāi) 銷。因而解壓縮算法以與壓縮算法完全相同的形式接收重復(fù)短語(yǔ)的頭兩次出現(xiàn)。這 就允許解壓縮算法產(chǎn)生與壓縮算法所產(chǎn)生的對(duì)重復(fù)的完全相同的詞典短語(yǔ)。解壓縮 算法利用與壓縮算法相同的短語(yǔ)編號(hào)技術(shù),從而允許壓縮算法將所有短語(yǔ)的未來(lái)出 現(xiàn)只作為一個(gè)短語(yǔ)號(hào)發(fā)送。DD108包括解壓縮單元208,它在解壓縮組件210中包括以如計(jì)算機(jī)程序,固 件,或硬件形式的解壓縮算法。圖6是示出本發(fā)明的一個(gè)實(shí)施例的解壓縮算法的流 程圖。該解壓縮算法產(chǎn)生原始的輸入流,同時(shí)保證完全與壓縮算法同步。每個(gè)壓縮的符號(hào)在602被接收,而解壓縮單元208在604判定,該符號(hào)是否 為對(duì)如P,那樣的詞典短語(yǔ)號(hào)的參照,若符號(hào)是那樣的參照,解壓縮單元208在606 提取該短語(yǔ)號(hào)的內(nèi)容并產(chǎn)生原始的輸入序列。然后解壓縮單元在608借助將短語(yǔ)的 內(nèi)容通過(guò)除最后發(fā)送步驟的所有壓縮步驟而同步壓縮和解壓縮算法。若符號(hào)不是對(duì)詞典短語(yǔ)號(hào)的參照,則解壓縮單元208在610將該符號(hào)通過(guò)所 有壓縮步驟(除最后的發(fā)送)以保證解壓縮與壓縮算法同步。此處理過(guò)程對(duì)所有接 收的符號(hào)在612重復(fù)。因?yàn)楸景l(fā)明的一個(gè)實(shí)施例恰恰在產(chǎn)生短語(yǔ)之前發(fā)送產(chǎn)生該短語(yǔ)所需的內(nèi)容, 它保證解壓縮算法永不會(huì)在解壓縮算法產(chǎn)生特定的短語(yǔ)之前接收對(duì)短語(yǔ)的參照。因 此,壓縮及解壓縮之前接收對(duì)短語(yǔ)的參照。因此,壓縮及解壓縮算法能隱含地保證, 它們保持同樣的短語(yǔ)編號(hào)方案,并它們對(duì)應(yīng)的詞典包含同樣的信息。注意,此隱含 的詞典同步技術(shù)需要被壓縮算法發(fā)送的經(jīng)壓縮的數(shù)據(jù)以與發(fā)送完全相同的次序被 解壓縮單元接收。若某些被壓縮的數(shù)據(jù)被解壓縮單元次序紊亂地接收,或若某些被 壓縮的數(shù)據(jù)丟失,解壓縮算法可以構(gòu)成與壓縮算法不同的詞典,這可能轉(zhuǎn)而導(dǎo)致不正確的解壓縮。因此,在網(wǎng)絡(luò)情況中,在壓縮和解壓縮單元之間發(fā)送的被壓縮數(shù)據(jù) 必須在可靠的傳輸信道發(fā)送。IZ算法隱含地是增量的,因?yàn)榘l(fā)送點(diǎn)自動(dòng)地由壓縮算法確定,并不需要特定 算法的選擇。因此,也沒(méi)有附加的計(jì)算開(kāi)銷來(lái)選擇發(fā)送點(diǎn)或計(jì)算對(duì)發(fā)送的指針(如 在LZ77或Sequitur的情況)。圖7是按本發(fā)明的一個(gè)實(shí)施例的發(fā)送技術(shù)的例子的圖示。在圖7中,數(shù)據(jù)序列是"abababcabc"。注意,這不同于在圖4中示出的例 子。開(kāi)始,指針T在502被設(shè)成第一個(gè)接收數(shù)據(jù)位置的前一個(gè)位置。在此例中使用 上述參考圖3的壓縮技術(shù)。使用此壓縮技術(shù)第一個(gè)新的詞典短語(yǔ)被加到第4行。然 而,在增加新的詞典短語(yǔ)之前,發(fā)送組件204將S'中的發(fā)送從T到S'的末端所有 符號(hào)。在此例子中,發(fā)送包括如圖7中的第4行示出的符號(hào)"abab"。然后,在 506使用圖3所述的技術(shù)替代重復(fù)短語(yǔ)的所有出現(xiàn)。然后,指針(T)被設(shè)成等于 剛加入的新的短語(yǔ)。在此例中,T被設(shè)成等于Pi在第4行中的第二次出現(xiàn)。符號(hào)繼續(xù)被接收及累積而不發(fā)送,直到接收到圖7中第10行的序列。此時(shí), 第二個(gè)短語(yǔ)被加到詞典(P2=PlC)。在加入第二短語(yǔ)之前,發(fā)送組件204在504將 發(fā)送從指針(T)到S'的末端所有S'中的符號(hào)。在此例中,發(fā)送符號(hào)"P,cP工"。 新短語(yǔ)在S'中的出現(xiàn)在506中按圖3中描述的技術(shù)替代,且指針(T)在508被設(shè) 成新加入短語(yǔ)的末端。在此例中,T被設(shè)成等于在圖7的第10行中示出的S'中的 第二個(gè)h。此過(guò)程對(duì)任何數(shù)量的數(shù)據(jù)繼續(xù)。上面發(fā)送過(guò)程隱含地同步了壓縮和解壓縮詞典并保證解壓縮單元總能解參照 它接收的每個(gè)詞典短語(yǔ)。本發(fā)明的另一個(gè)實(shí)施例使用直接的詞典發(fā)送過(guò)程以保證所 有短語(yǔ)的可解壓縮性。此另外的發(fā)送過(guò)程是基于將短語(yǔ)在獨(dú)立而并行的通信信道中 發(fā)送到解壓縮算法。每當(dāng)壓縮算法發(fā)現(xiàn)新的詞典短語(yǔ),它被加上標(biāo)記 "installed=0",指出該短語(yǔ)尚未被安裝在解壓縮詞典中。此新的短語(yǔ)號(hào)和它的 內(nèi)容經(jīng)可靠的傳輸信道被發(fā)送到解壓縮單元。解壓縮算法對(duì)每個(gè)它收到的規(guī)則送回 確認(rèn)。當(dāng)壓縮算法對(duì)短語(yǔ)收到確認(rèn),它在該短語(yǔ)上設(shè)置標(biāo)記"installed=l",指 出該短語(yǔ)已被接收并安裝在解壓縮詞典中。在由壓縮算法發(fā)送任何短語(yǔ) 之前,該算 法校驗(yàn)"installed"標(biāo)記。若installed等于0,即FALSE (假),則發(fā)送該短語(yǔ) 的內(nèi)容。注意,當(dāng)短語(yǔ)的內(nèi)容被發(fā)送時(shí),該算法也必須遞歸地對(duì)在這些內(nèi)容中的任何嵌入短語(yǔ)校驗(yàn)installed標(biāo)記。若installed等于1,即TRUE (真),發(fā)送短語(yǔ) 本身。通過(guò)使用此另外的直接詞典發(fā)送過(guò)程,壓縮算法能同步兩個(gè)詞典并保證解壓 縮算法永不會(huì)接收不能解參照的短語(yǔ)。此方法還顯著地改變了解壓縮算法的結(jié)構(gòu)。 因?yàn)樵诖朔椒ㄖ性~典短語(yǔ)直接發(fā)送到解壓縮算法,它不需要從數(shù)據(jù)流中發(fā)現(xiàn)這些短 語(yǔ)。因此,解壓縮算法只需要解參照(即解壓縮)它接收的數(shù)據(jù)并不需要處理通過(guò) 壓縮算法的短語(yǔ)檢測(cè)器和刪除組件的數(shù)據(jù)(在以前描述的隱含詞典同步實(shí)施例中是 必須的)。還注意到,在此直接詞典發(fā)送模型中,詞典同步不需要被壓縮的數(shù)據(jù)在 可靠的傳輸信道(即保證按順序遞交所有數(shù)據(jù)包的信道)中發(fā)送。因?yàn)楸粔嚎s的數(shù) 據(jù)不用于隱含地同步詞典,在壓縮單元和解壓縮單元之間的數(shù)據(jù)的丟失或數(shù)據(jù)提交 次序紊亂將不導(dǎo)致不一致的詞典,從而不導(dǎo)致不精確的解壓縮。在上述直接詞典中,同步技術(shù)能以各種方法進(jìn)一步優(yōu)化。例如,只有遇到大 于"N"次的短語(yǔ)能選擇由壓縮算法發(fā)送。設(shè)N=l,將導(dǎo)致所有短語(yǔ)被發(fā)送,并因 此提供最大的壓縮和最快的收斂。但同時(shí),為同步兩個(gè)詞典所需的附加帶外詞典發(fā) 送通信量也將最大。當(dāng)N增加時(shí),壓縮和收斂將降低,但額外的帶外詞典同步通信 量也將降低。因而N能根據(jù)所遇到的通信量的類型動(dòng)態(tài)地選擇以便使總的輸出通信量最小。而且,若有任何與發(fā)送單獨(dú)詞典短語(yǔ)更新有關(guān)的開(kāi)銷,可以緩存多個(gè)短語(yǔ) 并作為單個(gè)數(shù)據(jù)包一起發(fā)送。上述直接詞典發(fā)送模型也能通過(guò)從解壓縮算法對(duì)每個(gè)由壓縮算法發(fā)送的詞典 更新消除確認(rèn)的需要而優(yōu)化。在上面實(shí)施例中,壓縮單元必須從解壓縮單元接收"短 語(yǔ)收到"的確認(rèn),以便將對(duì)該短語(yǔ)的"installed"標(biāo)記從0(即假)改到1 (即真), 并從而允許壓縮算法能在未來(lái)的壓縮中使用該短語(yǔ)。此過(guò)程保證由壓縮單元在被壓 縮的數(shù)據(jù)中發(fā)送的所有短語(yǔ)參照能由解壓縮單元解參照以產(chǎn)生該短語(yǔ)的原始內(nèi)容。 在直接詞典發(fā)送模型的另一個(gè)實(shí)施例中,在預(yù)定但動(dòng)態(tài)調(diào)節(jié)的時(shí)間間隔之后,壓縮 算法自動(dòng)地將對(duì)新發(fā)送的短語(yǔ)的installed標(biāo)記從0改變到1。當(dāng)短語(yǔ)從壓縮單元 (經(jīng)獨(dú)立可靠的詞典傳輸信道)發(fā)送時(shí),它被本地標(biāo)記一時(shí)間標(biāo)簽(t。)指出發(fā)送 的時(shí)間。同時(shí)對(duì)被發(fā)送的短語(yǔ)的"installed"標(biāo)記被初始化成0。在預(yù)定的時(shí)間 間隔(T)以后,該短語(yǔ)的"installed"標(biāo)記從0改變成1,從而允許壓縮算法使 用該短語(yǔ)于未來(lái)的壓縮。此詞典發(fā)送模式推測(cè),若短語(yǔ)的更新在時(shí)間t。從壓縮單 元發(fā)送到解壓縮單元,則任何使用此短語(yǔ)并從壓縮單元在時(shí)間t。+T之后發(fā)送的被壓縮數(shù)據(jù)在短語(yǔ)更新之后到達(dá)解壓縮單元。時(shí)間間隔T能考慮到在壓縮和解壓縮單 之間數(shù)據(jù)發(fā)送的速率和等待時(shí)間的可變性加以調(diào)節(jié)。此推測(cè)的詞典發(fā)送模型改進(jìn)了 壓縮的程度,因?yàn)樗试S壓縮單元在短語(yǔ)的更新被發(fā)送之后開(kāi)始使用短語(yǔ)T秒,而不必等待從解壓縮單元來(lái)的對(duì)該短語(yǔ)的確認(rèn)。從而短語(yǔ)更快地成為可用,它產(chǎn)生更 高的壓縮。因?yàn)樯鲜鐾茰y(cè)的詞典發(fā)送模型是基于在壓縮和解壓縮單元之間發(fā)送時(shí)間變化 的估計(jì),有可能在特定的短語(yǔ)的內(nèi)容經(jīng)由獨(dú)立的詞典同步信道被接收之前,解壓縮 單元接收在被壓縮數(shù)據(jù)中的該短語(yǔ)的參照。當(dāng)發(fā)生此情況時(shí),解壓縮單元發(fā)送信號(hào) 給壓縮單元,指出它(解壓縮單元)在經(jīng)由詞典更新信道接收短語(yǔ)內(nèi)容之前經(jīng)數(shù)據(jù) 信道接收到該短語(yǔ)。壓縮單元使用從解壓縮單元來(lái)的這些誤差信號(hào)適本地調(diào)節(jié)在發(fā) 送新短語(yǔ)和將該短語(yǔ)的installed標(biāo)記改成l之間的時(shí)間間隔(T)。上面推測(cè)詞典發(fā)送模型的另一個(gè)組件是當(dāng)解壓縮算法接收到它不能精確地解 參照的短語(yǔ)時(shí)它應(yīng)能檢測(cè)。這能用許多方法達(dá)到。推測(cè)的詞典發(fā)送模型的一個(gè)實(shí)施 例對(duì)在壓縮單元和解壓縮單元中發(fā)送和安裝的短語(yǔ)的總數(shù)保持一個(gè)計(jì)數(shù)器。因?yàn)樗?有短語(yǔ)有序地發(fā)送和接收(由于它們經(jīng)由可靠的傳輸信道發(fā)送),這些計(jì)數(shù)器能用 于檢測(cè)在短語(yǔ)的內(nèi)容經(jīng)由詞典同步信道接收之前是否解壓縮信道經(jīng)數(shù)據(jù)信道收到 該短語(yǔ)的參照。在壓縮單元的每個(gè)短語(yǔ)根據(jù)被安裝的計(jì)數(shù)器的當(dāng)前值用"本地安裝 的計(jì)數(shù)器"本地標(biāo)記。每個(gè)從壓縮單元發(fā)送的壓縮的數(shù)據(jù)包,對(duì)在壓縮數(shù)據(jù)包中參 照的所有短語(yǔ)用"本地安裝的計(jì)數(shù)器"的最大值標(biāo)記。此"最大安裝計(jì)數(shù)器"指出在壓縮的數(shù)據(jù)包中使用的最近"安裝"的短語(yǔ)。 當(dāng)解壓縮單元接收被壓縮的數(shù)據(jù)包時(shí),通過(guò)校驗(yàn)"最大安裝計(jì)數(shù)器"是否大于其自己當(dāng)前的安裝計(jì)數(shù)器來(lái)檢測(cè)該數(shù)據(jù)包是否包含非可解參照的短語(yǔ)。若是這樣情況, 則在壓縮的數(shù)據(jù)包內(nèi)至少存在一個(gè)解壓縮單元尚未收到其更新的內(nèi)容的短語(yǔ)。此事 件隨后被用于啟動(dòng)上述反饋機(jī)制以發(fā)送誤差信號(hào)給壓縮單元。用于計(jì)數(shù)發(fā)送和安裝 短語(yǔ)數(shù)的計(jì)數(shù)器最終能達(dá)到其最大值并返回到零。借助保證超過(guò)當(dāng)前安裝計(jì)數(shù)器的 任何"本地安裝的計(jì)數(shù)器"被復(fù)位到某個(gè)初始值(可能為0)來(lái)處理此情況。系統(tǒng) 還保證,當(dāng)發(fā)送計(jì)數(shù)器達(dá)到其最大值時(shí),在對(duì)應(yīng)于最大的計(jì)數(shù)器值的短語(yǔ)被壓縮單 元確認(rèn),壓縮單元才發(fā)送任何新的短語(yǔ)更新。因而發(fā)送的解壓縮單元除了對(duì)應(yīng)于最 大接收的計(jì)數(shù)器的短語(yǔ)更新以外不需要確認(rèn)任何被接收的短語(yǔ)更新。如上所述,為了使壓縮技術(shù)在無(wú)窮盡的數(shù)據(jù)上連續(xù)地工作而不需要大的系統(tǒng) 資源,壓縮系統(tǒng)和技術(shù)應(yīng)有效地可行地刪除短語(yǔ)和符號(hào)以減少詞典的大小。本發(fā)明 達(dá)到了此目標(biāo)。即因?yàn)槎陶Z(yǔ)詞典和被壓縮的序列S'使用系統(tǒng)資源(如系統(tǒng)存儲(chǔ)器) 保持它們的狀態(tài)信息,為了保證本發(fā)明能在無(wú)限的數(shù)據(jù)流上連續(xù)地運(yùn)行,必須提供 有效的方法來(lái)從詞典中刪除老的短語(yǔ)并刪除被壓縮的序列S'的最老的部分。若這 些"忘記"(刪除)措施不具備,該算法最終將用完系統(tǒng)資源并必須終止。因?yàn)槎陶Z(yǔ)是分層的(即短語(yǔ)能包含輸入字(符號(hào))或?qū)ζ渌陶Z(yǔ)(數(shù)據(jù)短語(yǔ) 標(biāo)識(shí)符)的參照),不可能簡(jiǎn)單地刪除短語(yǔ)而不管它是否被更高層短語(yǔ)參照。例如, 若短語(yǔ)Pi被P」參照(如P尸Pia),且Pi被刪除,則P,的任何未來(lái)使用將導(dǎo)致錯(cuò)誤。 因而,必須判定的不僅是哪個(gè)短語(yǔ)能刪除,而且還要保證參照這些短語(yǔ)的所有短語(yǔ) 也被刪除。本發(fā)明通過(guò)在"最近最少使用(LRU)"的數(shù)據(jù)結(jié)構(gòu)中表示所有短語(yǔ)來(lái)解決所有這些問(wèn)題。在本發(fā)明的一個(gè)實(shí)施例中LRU作為鏈表實(shí)現(xiàn),并每當(dāng)在壓縮期 使用短語(yǔ)時(shí)使用LRU有效地將其移到表的前端。因而,若短語(yǔ)"P產(chǎn)ab"在LRU的 中間且符號(hào)ab出現(xiàn)在輸入流中,則Pi從它在表的當(dāng)前位置去除并附到該表當(dāng)前前 端(或頭部)。建立的新短語(yǔ)也放在表的當(dāng)前前端(或頭部)。因而,在算法的任 何點(diǎn),在表的末端(或尾部)的短語(yǔ)是最近最少使用的短語(yǔ)。若必須刪除短語(yǔ)以釋 放系統(tǒng)資源再度使用,則最近最少使用的短語(yǔ)將是首先要?jiǎng)h除的。雖然能使用LRU識(shí)別哪個(gè)短語(yǔ)要?jiǎng)h除,但它沒(méi)有指出哪個(gè)較高層短語(yǔ)參照此 短語(yǔ),因而也必須刪除。本發(fā)明通過(guò)要求每個(gè)短語(yǔ)保持一個(gè)"父指針"來(lái)解決此問(wèn) 題,它總是保持該短語(yǔ)最近一次被參照的軌跡。例如,若Pi最近被P」參照,而Pj 最近被壓縮的字符串S'參照,則P,應(yīng)包含到Pj的父指針,而P」應(yīng)包含指向S'中被 使用的位置的父指針。圖8a和8b是按本發(fā)明的一個(gè)實(shí)施例的刪除技術(shù)的LRU和父 指針的例子的圖示。在圖8a中短語(yǔ)LRU和父指針直接圖示在輸入符號(hào)"ab"到達(dá)之后。 在圖8b中短語(yǔ)LRU和父指針直接圖示在輸入符號(hào)"c"到達(dá)之后。 在圖8中示出的數(shù)據(jù)結(jié)構(gòu)允許算法能精確地判定實(shí)際哪個(gè)短語(yǔ)被另外的較高 層短語(yǔ)參照。因此,能按照?qǐng)D9實(shí)現(xiàn)短語(yǔ)的刪除。圖9是示出按本發(fā)明的一個(gè)實(shí)施 例的刪除技術(shù)的流程圖。使用圖9示出的技術(shù),X在902設(shè)成在LRU尾部的短語(yǔ)。然后Y在904設(shè)成X的父指針。若在906如圖8a, Y指向一個(gè)短語(yǔ),則在LRU中從位置X到Y(jié)的所有短 語(yǔ)在908被刪除(包括X但不包括Y) , X在910設(shè)成Y,過(guò)程在步驟904處重復(fù)。 若當(dāng)906 Y指向符號(hào),則刪除單元208在919刪除X并隨后在920刪除從S'的尾 部到Y(jié)的所有符號(hào)。此算法遞歸地保證,若任何短語(yǔ)被刪除,在短語(yǔ)詞典和在S'中對(duì)該短語(yǔ)的參 照也被刪除。此算法還導(dǎo)致從壓縮的序列S'刪除符號(hào)。因此,由不常訪問(wèn)的短語(yǔ) 和S,中的老的符號(hào)占用的系統(tǒng)資源通過(guò)此技術(shù)能再度使用。若必須釋放附加的資 源,也能刪除S,的尾部的符號(hào)而不應(yīng)用上述短語(yǔ)刪除算法。這能簡(jiǎn)單地從S'的尾 部去除所需數(shù)目的符號(hào)(只要這些符號(hào)以前已被發(fā)送過(guò))來(lái)完成。若被刪除的符號(hào) 是對(duì)一個(gè)短語(yǔ)的參照,則校驗(yàn)該特定的短語(yǔ),判斷其父指針是否指向S'中被刪除 的符號(hào)的位置。若是這樣情況,則該父指針被設(shè)成空值,說(shuō)明在S'中它所指向的 符號(hào)已被刪除。或者該短語(yǔ)及其后代(即指向它的其他短語(yǔ))也能被刪除。也能使用上述短語(yǔ)和符號(hào)刪除算法設(shè)定由本發(fā)明的系統(tǒng)和方法使用的系統(tǒng)存 儲(chǔ)器的數(shù)量的固定限制。兩種刪除算法招致最小的計(jì)算開(kāi)銷且不影響IZ算法的線 性度。在處理無(wú)限輸入流時(shí),連續(xù)運(yùn)行的IZ過(guò)程動(dòng)態(tài)地選擇要?jiǎng)h除的短語(yǔ)和符號(hào) 并重新使用釋放的資源,以保證它不會(huì)超過(guò)預(yù)定的或浮動(dòng)的限制。在上述本發(fā)明的實(shí)施例中,對(duì)重復(fù)兩次的每個(gè)符號(hào)對(duì)在詞典中建立新的短語(yǔ)。 它可以修改,使得僅當(dāng)一個(gè)符號(hào)對(duì)至少重復(fù)K次時(shí)建立新的詞典短語(yǔ),其中K二3, 4, 5等。此修改將減少在詞典中短語(yǔ)的數(shù)目,并可增加或減少壓縮的效率。用本發(fā)明發(fā)送的數(shù)據(jù)能使用如算術(shù)編碼那樣的增量編碼方案統(tǒng)計(jì)地編碼。此 步驟常常是不必要的,因?yàn)橛山y(tǒng)計(jì)編碼得到的附加壓縮與去除大的重復(fù)短語(yǔ)得到的 壓縮相比是微不足道的。例如,因?yàn)镮Z能用單個(gè)短語(yǔ)號(hào)替代隔開(kāi)很大距離的大的 重復(fù),通過(guò)刪除和消除重復(fù)短語(yǔ)得到高度的壓縮。在那樣情況,由編碼和壓縮的序 列得到的附加壓縮將是微小的。因此,能避免與統(tǒng)計(jì)編碼及其相關(guān)的計(jì)算開(kāi)銷而不 會(huì)在壓縮效率上有大的降低。這是與其他基于詞典的技術(shù)相反,它們只能檢測(cè)相當(dāng) 小的窗口內(nèi)的重復(fù)并因此通過(guò)統(tǒng)計(jì)編碼步驟得到它們主要的壓縮。因此如果這些其 他程序的輸出不作統(tǒng)計(jì)編碼,它們將大大地降低了壓縮效率。若由本發(fā)明產(chǎn)生的壓縮數(shù)據(jù)在發(fā)送前包裝成數(shù)據(jù)包,則該數(shù)據(jù)包能借助應(yīng)用 其他增量的或非增量的統(tǒng)計(jì)編碼或壓縮技術(shù)(如Huffman編碼)作進(jìn)一步處理。這可以是應(yīng)用到輸出的后處理步驟,因而不影響本發(fā)明的增量本質(zhì)。本發(fā)明在邏輯上對(duì)每個(gè)信道由兩個(gè)通信模塊組成,它們是壓縮的。壓縮模塊 在信道源處壓縮數(shù)據(jù),而解壓縮模塊在信道目標(biāo)處解壓縮數(shù)據(jù)。若單個(gè)源與多個(gè)目 標(biāo)通信,本發(fā)明能伸縮并重復(fù),使得對(duì)每個(gè)目標(biāo)存在單獨(dú)的壓縮模塊。所有這些壓 縮模塊能駐留在同一個(gè)壓縮單元或設(shè)備。類似地,若多個(gè)源和單個(gè)目標(biāo)通信,本發(fā) 明能伸縮并重復(fù),使得對(duì)每個(gè)源存在一個(gè)單獨(dú)的解壓縮模塊。而且所有這些解壓縮 模塊能駐留在同一個(gè)解壓縮單元或設(shè)備。此外,多個(gè)壓縮和解壓縮模塊能駐留在同 一單元或設(shè)備上,它然后成為組合的壓縮和解壓縮單元。本發(fā)明的本實(shí)施例對(duì)每壓縮和解壓縮模塊使用獨(dú)立的詞典。本發(fā)明的另外的 實(shí)施例使用在共存于同一源的多個(gè)壓縮模塊之間的共享詞典。此另外的共享詞典實(shí) 施例能使用上述直接詞典同步技術(shù)保證共享的壓縮詞典與每個(gè)解壓縮詞典同步。在 壓縮單元的共享詞典能通過(guò)建立單個(gè)共享數(shù)據(jù)結(jié)構(gòu)以存儲(chǔ)所有由壓縮算法學(xué)到的 短語(yǔ)來(lái)實(shí)現(xiàn)。每個(gè)短語(yǔ)還保持共享的總體版本號(hào),每當(dāng)屬于該短語(yǔ)的內(nèi)容被刪除或 用新的短語(yǔ)替代時(shí),此版本號(hào)增加。因此,在此共享的詞典實(shí)施例中,所有壓縮單 元的檢測(cè)器和刪除組件能被共享。每個(gè)壓縮單元具有它自己?jiǎn)为?dú)的發(fā)送單元,它保 持獨(dú)立的本地短語(yǔ)版本號(hào)和狀態(tài)標(biāo)志。當(dāng)新的短語(yǔ)參照從檢測(cè)器組件傳送到發(fā)送組 件以備發(fā)送到解壓縮單元時(shí),共享的總體版本號(hào)與對(duì)特定于給定的發(fā)送組件的本地 版本號(hào)相比較。若兩個(gè)號(hào)相同,則發(fā)送組件校驗(yàn)與短語(yǔ)相關(guān)的其本地狀態(tài)標(biāo)志,以 判定該短語(yǔ)是否已被發(fā)送和安裝。若兩個(gè)號(hào)不同,則發(fā)送組件知道它是由共享的檢 測(cè)器組件建立的新短語(yǔ)。在此情況,發(fā)送組件復(fù)位狀態(tài)標(biāo)志以指出該短語(yǔ)尚未被發(fā) 送,并根據(jù)上述直接詞典發(fā)送協(xié)議處理該短語(yǔ)。此共享的詞典發(fā)送實(shí)施例使能更有 效的使用系統(tǒng)存儲(chǔ)器資源,因?yàn)樗泄泊嬗谕辉O(shè)備的壓縮單元共享單個(gè)短語(yǔ)層次 和符號(hào)數(shù)據(jù)結(jié)構(gòu)。所有短語(yǔ)的內(nèi)容僅存入共享的數(shù)據(jù)結(jié)構(gòu)中。加入到該設(shè)備的每個(gè) 附加的壓縮單元實(shí)際上只需要一個(gè)附加的短語(yǔ)索引表來(lái)存儲(chǔ)每個(gè)短語(yǔ)的本地版本 號(hào)及狀態(tài)。用于每個(gè)輸入符號(hào)的字長(zhǎng)是可變的。本發(fā)明用1, 2, 4個(gè)字節(jié)的字長(zhǎng)實(shí)現(xiàn), 產(chǎn)生變化的結(jié)果。字長(zhǎng)也能設(shè)成大于4個(gè)字節(jié)。因?yàn)樗惴ǖ乃俣热Q于它處理的符 號(hào)的數(shù)目,較大的字長(zhǎng)產(chǎn)生較大的數(shù)據(jù)通量。若每個(gè)符號(hào)對(duì)應(yīng)于4個(gè)字節(jié)(即字長(zhǎng)-二4字節(jié)),該算法近似于在任何時(shí)間周期處理相當(dāng)于每個(gè)符號(hào)對(duì)應(yīng)于1個(gè)字節(jié)時(shí),使用4字節(jié)的字長(zhǎng)使該算法不能檢測(cè)在4個(gè)字節(jié)邊界 上發(fā)生的重復(fù)(即由一系列字節(jié)數(shù)分離的重復(fù),而字節(jié)數(shù)不是4的倍數(shù))。在短語(yǔ)檢測(cè)算法中使用的散列函數(shù)和表是靈活的。它們能優(yōu)化成最適合于被 壓縮數(shù)據(jù)的類型。用于短語(yǔ)LRU和壓縮序列S,的鏈表能作為單鏈表或雙鏈表實(shí)現(xiàn)。如陣列那樣 的其他數(shù)據(jù)結(jié)構(gòu)也能使用并能提供更好的存儲(chǔ)器使用。如上所述,本發(fā)明是有效的壓縮算法,它能檢測(cè)并消除在實(shí)際上無(wú)限大小窗 口內(nèi)可變長(zhǎng)度的重復(fù)短語(yǔ)。窗口的大小只受可用的系統(tǒng)存儲(chǔ)器的大小的限制,并不 影響算法的速度。不是使用在LZ77壓縮技術(shù)中常用的幾千字節(jié)的窗口大小,本發(fā) 明能使用從數(shù)十到數(shù)千兆字節(jié)的窗口大小(只受系統(tǒng)資源的限制),而在程序速度 方面沒(méi)有大的變化。因?yàn)樵诒景l(fā)明中窗口只由壓縮數(shù)據(jù)組成,關(guān)于未壓縮的數(shù)據(jù)的 窗口的實(shí)際大小能變化并超過(guò)數(shù)千兆字節(jié)(取決于壓縮程度)。在窗口大小方面驚 人的增加是重要的優(yōu)點(diǎn),因?yàn)樗顾惴軝z測(cè)分隔很大距離的重復(fù)。因此不僅能壓 縮單個(gè)文件或?qū)ο?,本發(fā)明能用于壓縮多個(gè)文件或?qū)ο笠黄鸬娜我饧?,并因而達(dá) 到高得多的壓縮程度。因而本發(fā)明能用于壓縮累積的交互對(duì)話的網(wǎng)絡(luò)信息量的連續(xù) 流,其中在不同對(duì)象或數(shù)據(jù)包之間的重復(fù)可被大量數(shù)據(jù)隔離。因而本發(fā)明能夠既作 對(duì)象內(nèi)部的(本地的)壓縮又作對(duì)象之間的(全局的或交互會(huì)話的)壓縮而不是只 作對(duì)象內(nèi)部的壓縮。本發(fā)明的另外優(yōu)點(diǎn)是它是完全增量的和連續(xù)的。因此,本發(fā)明能應(yīng)用于無(wú)限 數(shù)據(jù)流而沒(méi)有算法失敗或終止的危險(xiǎn)。本發(fā)明增量地處理到達(dá)的輸入并在線性的時(shí) 間內(nèi)連續(xù)地產(chǎn)生輸出。本發(fā)明能配置成總是保持在固定大小的系統(tǒng)存儲(chǔ)器內(nèi)并永遠(yuǎn) 不超過(guò)此預(yù)置的限制。算法通過(guò)動(dòng)態(tài)地刪除短語(yǔ)和符號(hào)并重新使用它們的資源以學(xué) 到新的詞典短語(yǔ)而達(dá)到此連續(xù)和流式的功能。該算法也是自適應(yīng)的并學(xué)到新的詞典短語(yǔ)以適應(yīng)輸入數(shù)據(jù)的變化。IZ算法的此隱含的增量的,連續(xù)的和線性的特性(除 了它實(shí)際上無(wú)限搜索窗口大小)是獨(dú)一無(wú)二的特征,它不包括在任何其他的通用無(wú) 損壓縮技術(shù)中。本發(fā)明的另外優(yōu)點(diǎn)是它的有效性。本發(fā)明線性地執(zhí)行。即當(dāng)輸入數(shù)據(jù)量增加 時(shí)執(zhí)行時(shí)間不是非線性地(如指數(shù)地)增加。本發(fā)明的線性度不受程序的增量發(fā)送 和連續(xù)短語(yǔ)/符號(hào)刪除組件的影響。線性度也不受從中能檢測(cè)重復(fù)的窗口大小的影響。因此,任何輸入流能在正比于輸入大小的時(shí)間內(nèi)通過(guò)本發(fā)明壓縮。此外,因?yàn)楸景l(fā)明使用短語(yǔ)的分層表示,整個(gè)詞典能比其他基于詞典的技術(shù)(如LZ77)更有效地存儲(chǔ)。本發(fā)明只有當(dāng)短語(yǔ)出現(xiàn)多于一次時(shí)才將它們加入詞典。因此,詞典項(xiàng)比在LZ78中更好地被利用,后者使用更積極和推測(cè)性的詞典結(jié)構(gòu)技術(shù)。本發(fā)明還比其他基于分層規(guī)則的技術(shù)更有效,因?yàn)樗恍枰魏胃郊拥奶幚韥?lái)選擇增量發(fā)送點(diǎn) (如Sequitur的為選擇發(fā)送點(diǎn)的計(jì)算量大的算法)。本發(fā)明的隱含的詞典短語(yǔ)的發(fā)送比其他基于指針的技術(shù)(如LZ77和 Sequitur)更有效,因?yàn)楸景l(fā)明不需要使用標(biāo)記或其他方法來(lái)計(jì)算并發(fā)送對(duì)每個(gè)指 針的起始位置。由本發(fā)明使用的表示短語(yǔ)和符號(hào)的數(shù)據(jù)結(jié)構(gòu)也比由Sequitur使用 的有更高的存儲(chǔ)效率。此外,本發(fā)明的重復(fù)的檢測(cè)方法在檢測(cè)長(zhǎng)的重復(fù)時(shí)比 Sequitur更有效,因?yàn)楫?dāng)重復(fù)的短語(yǔ)被擴(kuò)展時(shí),本發(fā)明不需要連續(xù)地建立和刪除 短語(yǔ)。本發(fā)明是結(jié)合上述四個(gè)優(yōu)點(diǎn)的僅有的通用無(wú)損壓縮算法,它們是線性速度, 實(shí)際上無(wú)限的窗口大小,隱含的增量性,和完全連續(xù)的壓縮。這四個(gè)優(yōu)點(diǎn)使本發(fā)明 能在以前壓縮尚未被成功地應(yīng)用的廣泛的領(lǐng)域中使用。例如,本發(fā)明能通過(guò)檢測(cè)和 消除類似的或同樣的對(duì)象或數(shù)據(jù)包用于壓縮網(wǎng)絡(luò)數(shù)據(jù)流。本發(fā)明能用于改善在網(wǎng)絡(luò) 中經(jīng)過(guò)任何兩個(gè)通信節(jié)點(diǎn)的帶寬利用。發(fā)送類似或相同的對(duì)象的任何網(wǎng)絡(luò)結(jié)構(gòu)能從 此發(fā)明大大得益。例如,從內(nèi)容提供者發(fā)出的萬(wàn)維網(wǎng)信息量常包含發(fā)送到不同用戶 的相同的或相似的對(duì)象。在此情況,本發(fā)明有用于趨同和壓縮發(fā)送到不同用戶的數(shù) 據(jù),并因而大大地減少了經(jīng)因特網(wǎng)傳輸該數(shù)據(jù)的帶寬需求。解壓縮算法能在靠近終 端用戶處選出壓縮流,并在將該數(shù)據(jù)送到用戶之前將其擴(kuò)展成其原始大小。這將不 僅導(dǎo)致在壓縮方和解壓縮方之間大大降低帶寬的使用,而且導(dǎo)致大大加快了數(shù)據(jù)向 用戶的傳遞。有若干本發(fā)明提供很大應(yīng)用價(jià)值的其他網(wǎng)絡(luò)情況,如在壓縮經(jīng)過(guò)專線 網(wǎng)或虛擬專線網(wǎng)發(fā)送的數(shù)據(jù)中。此外,本發(fā)明能用于有效地壓縮整個(gè)數(shù)據(jù)庫(kù)以便更 有效地存儲(chǔ)和發(fā)送。在所有這些情況中,本發(fā)明將提供高于其他壓縮技術(shù)的附加實(shí)用價(jià)值,因?yàn)樗茉诰€性時(shí)間內(nèi)達(dá)到對(duì)象之間和對(duì)象內(nèi)部(交互會(huì)話的)壓縮。本發(fā)明在線性時(shí) 間內(nèi)運(yùn)行,使用實(shí)際上無(wú)限的窗口大小,隱含地是增量的,并能連續(xù)地在無(wú)限輸入 流上運(yùn)行,由于這些事實(shí)所有這些應(yīng)用和益處是可能的。雖然本發(fā)明參照較佳實(shí)施例和若干另選的實(shí)施例己予以特別示出和描述,但 在相關(guān)領(lǐng)域中的技術(shù)人員可以理解,在不背離本發(fā)明的精神和范圍的前提下可以作 出在形式和細(xì)節(jié)方面的各種變化。
權(quán)利要求
1.一種方法,包括在壓縮設(shè)備接收數(shù)據(jù)流;在所接收的數(shù)據(jù)流中檢測(cè)重復(fù)的數(shù)據(jù)短語(yǔ),其中在所述數(shù)據(jù)流中每一數(shù)據(jù)短語(yǔ)包括一組順序數(shù)據(jù)符號(hào);將與所述重復(fù)數(shù)據(jù)短語(yǔ)相關(guān)的一組庫(kù)短語(yǔ)發(fā)送到解壓縮設(shè)備;以及在從所述解壓縮設(shè)備接收對(duì)于接收到所述一組庫(kù)短語(yǔ)的確認(rèn)之前,發(fā)送與所述一組庫(kù)短語(yǔ)中任何庫(kù)短語(yǔ)相關(guān)的數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。
2. 如權(quán)利要求l所述的方法,還包括其中在接收確認(rèn)之前發(fā)送數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符包括在發(fā)送所述數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符之前等待一時(shí)間間隔;以及即使當(dāng)在所述時(shí)間間隔之內(nèi)沒(méi)有接收到來(lái)自所述解壓縮設(shè)備的確認(rèn)時(shí),也在 所述時(shí)間間隔到時(shí)后就發(fā)送所述數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。
3. 如權(quán)利要求2所述的方法,還包括從所述解壓縮設(shè)備接收誤差信號(hào),指示所述解壓縮設(shè)備在所述一組庫(kù)短語(yǔ)之前接收到所述數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符;以及響應(yīng)于所述誤差信號(hào)動(dòng)態(tài)調(diào)節(jié)所述時(shí)間間隔。
4. 如權(quán)利要求3所述的方法,還包括動(dòng)態(tài)調(diào)節(jié)所述時(shí)間間隔包括根據(jù)從所述解壓縮設(shè)備接收的多個(gè)誤差信號(hào)設(shè)置 所述時(shí)間間隔。
5. 如權(quán)利要求l所述的方法,還包括設(shè)置表示發(fā)送所述一組庫(kù)短語(yǔ)的時(shí)間的 時(shí)間標(biāo)簽。
6. 如權(quán)利要求l所述的方法,還包括 對(duì)所發(fā)送和安裝的短語(yǔ)的總數(shù)保持一計(jì)數(shù)器;根據(jù)所保持的計(jì)數(shù)器的當(dāng)前值,用本地安裝的計(jì)數(shù)器本地標(biāo)記每一庫(kù)短語(yǔ); 對(duì)由一壓縮數(shù)據(jù)包中任何數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符參照的所有庫(kù)短語(yǔ),用所述本地安 裝的計(jì)數(shù)器的最大值標(biāo)記所述壓縮數(shù)據(jù)包;以及 將所述壓縮數(shù)據(jù)包發(fā)送到所述解壓縮設(shè)備。
7. 如權(quán)利要求6的方法,還包括 在所述解壓縮設(shè)備接收所述壓縮數(shù)據(jù)包;確定在所接收的數(shù)據(jù)包上標(biāo)記的最大值大于所保持的計(jì)數(shù)器的值;以及響應(yīng)于所述確定發(fā)送誤差信號(hào)。
8. —種壓縮設(shè)備,包括壓縮單元,用于接收數(shù)據(jù)流并在所接收的數(shù)據(jù)流中檢測(cè)重復(fù)的數(shù)據(jù)短語(yǔ),其中在所述數(shù)據(jù)流中每一數(shù)據(jù)短語(yǔ)包括一組順序數(shù)據(jù)符號(hào);發(fā)送組件,用于將與所述重復(fù)數(shù)據(jù)短語(yǔ)相關(guān)的一組庫(kù)短語(yǔ)發(fā)送到解壓縮設(shè)備, 并在從所述解壓縮設(shè)備接收對(duì)于接收到所述一組庫(kù)短語(yǔ)的確認(rèn)之前,發(fā)送與所述一 組庫(kù)短語(yǔ)中任何庫(kù)短語(yǔ)相關(guān)的數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。
9. 如權(quán)利要求8所述的壓縮設(shè)備,其特征在于所述發(fā)送組件在發(fā)送所述數(shù)據(jù) 短語(yǔ)標(biāo)識(shí)符之前等待一時(shí)間間隔,并且即使當(dāng)在所述時(shí)間間隔之內(nèi)沒(méi)有接收到來(lái)自 所述解壓縮設(shè)備的確認(rèn)時(shí),也在所述時(shí)間間隔到時(shí)后就發(fā)送所述數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。
10. 如權(quán)利要求9所述的壓縮設(shè)備,其特征在于所述壓縮單元從所述解壓縮 設(shè)備接收誤差信號(hào),指示所述解壓縮設(shè)備在所述一組庫(kù)短語(yǔ)之前接收到所述數(shù)據(jù)短 語(yǔ)標(biāo)識(shí)符,并且響應(yīng)于所述誤差信號(hào)動(dòng)態(tài)調(diào)節(jié)所述時(shí)間間隔。
11. 如權(quán)利要求10所述的壓縮設(shè)備,其特征在于所述壓縮單元根據(jù)從所述解 壓縮設(shè)備接收的多個(gè)誤差信號(hào)設(shè)置所述時(shí)間間隔。
12. 如權(quán)利要求8所述的壓縮設(shè)備,其特征在于所述壓縮單元設(shè)置表示發(fā)送 所述一組庫(kù)短語(yǔ)的時(shí)間的時(shí)間標(biāo)簽。
全文摘要
本發(fā)明提供一種增量和連續(xù)的數(shù)據(jù)壓縮技術(shù)。一種方法,包括在壓縮設(shè)備接收數(shù)據(jù)流;在所接收的數(shù)據(jù)流中檢測(cè)重復(fù)的數(shù)據(jù)短語(yǔ),其中在數(shù)據(jù)流中每一數(shù)據(jù)短語(yǔ)包括一組順序數(shù)據(jù)符號(hào);將與重復(fù)數(shù)據(jù)短語(yǔ)相關(guān)的一組庫(kù)短語(yǔ)發(fā)送到解壓縮設(shè)備;以及在從解壓縮設(shè)備接收對(duì)于接收到一組庫(kù)短語(yǔ)的確認(rèn)之前,發(fā)送與一組庫(kù)短語(yǔ)中任何庫(kù)短語(yǔ)相關(guān)的數(shù)據(jù)短語(yǔ)標(biāo)識(shí)符。
文檔編號(hào)H03M7/30GK101277117SQ20081008154
公開(kāi)日2008年10月1日 申請(qǐng)日期2001年7月18日 優(yōu)先權(quán)日2000年7月25日
發(fā)明者A·P·辛格 申請(qǐng)人:瞻博網(wǎng)絡(luò)公司