亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

增量和連續(xù)的數(shù)據(jù)壓縮的制作方法

文檔序號:7513247閱讀:280來源:國知局
專利名稱:增量和連續(xù)的數(shù)據(jù)壓縮的制作方法
增量和連續(xù)的數(shù)據(jù)壓縮本申請是申請日為2001年7月18日申請?zhí)枮榈?1816213. 4號發(fā)明名稱為"增 量和連續(xù)的數(shù)據(jù)壓縮"的中國專利申請的分案申請。 有關(guān)申請本申請要求在2000年7月25日提交的美國臨時申請?zhí)枮?0/221, 262的專利 申請的優(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ù),而是使用壓縮算法來減少從源到目標(biāo)需要發(fā)送的數(shù)據(jù)量。兩類壓縮算 法,無損壓縮算法和有損壓縮算法。無損壓縮算法將數(shù)據(jù)轉(zhuǎn)換成一種形式,其中包 含在該數(shù)據(jù)中的信息不受損失。相反,有損壓縮算法產(chǎn)生一種表示方式,其中,該 數(shù)據(jù)的某些細(xì)節(jié)可能被排除。壓縮算法也能粗略地分成兩個類別專用的及通用的。專用壓縮及解壓縮應(yīng) 用于那樣的數(shù)據(jù),對那些數(shù)據(jù)它們的數(shù)據(jù)特征的先驗知識是可以得到的。例如,視 頻數(shù)據(jù)已知由各個幀組成,每幀與其以前幀及后續(xù)幀的區(qū)別很少。在那樣的情況, 專用壓縮方案能得益于此先驗知識而設(shè)計更專門的因而可能更有效的壓縮及解壓 縮算法。通用壓縮算法(也稱為萬能壓縮算法)不假設(shè)數(shù)據(jù)特征或產(chǎn)生數(shù)據(jù)的源的 任何先驗知識。因此,通用壓縮常常比較低效,它更經(jīng)常地導(dǎo)致比對于特殊數(shù)據(jù)類 型的專用壓縮算法更少程度的壓縮。然而,通用壓縮算法更靈活,因為如上所述, 它們能有效地用于許多不同類型的數(shù)據(jù),并在事先不知道有關(guān)數(shù)據(jù)的信息的情況下 應(yīng)用。一類通用壓縮算法是根據(jù)對數(shù)據(jù)中的重復(fù)的識別及消除。這些方法稱為基于 詞典的壓縮技術(shù),因為它們試圖發(fā)現(xiàn)重復(fù)項及短語的詞典。學(xué)到的詞典項隨后被用于消除在目標(biāo)數(shù)據(jù)組中的這些項的重復(fù)性。兩個其他類型的壓縮算法是增量壓縮算法和連續(xù)壓縮算法。此兩類算法不是 互相排斥的,即一個壓縮算法能既是增量的又是連續(xù)的,增量壓縮算法是不需要處 理整個輸入流或輸入流中的整個數(shù)據(jù)塊來產(chǎn)生其輸出的算法。相反,增量壓縮算法 在逐個符號的基礎(chǔ)上(即增量地)處理輸入,并在其仍然處理輸入的過程中產(chǎn)生其 輸出,而不是在其處理整個輸入之后。例如,計算在一段文字中的元音數(shù)的算法基 本上是非增量算法,因為它必須處理整個文字輸入來計算元音的總數(shù)。另外,將小 寫文字轉(zhuǎn)換成大寫文字的算法是增量的,因為它能獨立地處理每個輸入字符,并能 在其處理每個輸入字符時產(chǎn)生其輸出。連續(xù)算法是能在無限的輸入數(shù)據(jù)流上無限地運行而不會用完如存儲器及盤空 間等那樣的系統(tǒng)資源的算法。連續(xù)算法也常常稱為流算法。注意,僅僅在處理所有輸入后產(chǎn)生輸出的非增量算法根據(jù)定義是非連續(xù)的(因為在連續(xù)算法中輸入是無限 長)。數(shù)據(jù)的存儲和傳輸?shù)拇鷥r直接與數(shù)據(jù)對象的大小相關(guān)。因此,從數(shù)據(jù)中消除 冗余是改善數(shù)據(jù)存儲和傳輸?shù)男实母叨扔行У姆椒āW钔ㄓ玫臒o損數(shù)據(jù)壓縮算法 試圖根據(jù)兩個主要方法從數(shù)據(jù)中消除冗余(1)識別和消除重復(fù)的項及短語;和 (2)以更有效的方式編碼數(shù)據(jù)。能通過各種技術(shù)實現(xiàn)重復(fù)項或短語的識別。涉及的通常原則能借助例子說明。 考慮到等式(1)中的字符序列。S二aabcaabdaabeaabf 等式(1)基于詞典的壓縮算法能識別,短語"aab"在此序列中重復(fù)了 4次。若算法用 新的符號,如A替代"aab"的所有出現(xiàn),該序列則被更有效地存儲或傳輸。被壓 縮的序列然后看來如等式(2)中的序列。S=AcAdAeAf 等式(2)除了上述壓縮序列以外,該算法也必須存儲或發(fā)送附加指令,指出在解壓縮 期間A的所有出現(xiàn)應(yīng)由"aab"替代。因此,指令A(yù)^aab是壓縮所根據(jù)的詞典項。 為了能解壓縮,該詞典和壓縮的字符串必須被存儲或發(fā)送。雖然在此情況詞典是易 于確定的,對給定的輸入序列已經(jīng)示出,尋找產(chǎn)生高度壓縮的詞典的問題是NP— 完成,它在計算機(jī)協(xié)會雜志29(4) (1982) 925-951頁J. A. Storer所著"Datacompression via textual Substitution"中描述,該文整個加入于此作為參考。 數(shù)據(jù)編碼包括在每個字符的基礎(chǔ)上修改數(shù)據(jù)的表示,使得經(jīng)常發(fā)生的字符能更有效地表示(如用更少的位數(shù))??紤]在等式(3)中14個字符的序列。 S二abacadaeafagah 等式(3)在此情況字符"a"發(fā)生7次而字符"b-h"的每一個只發(fā)生一次。若整個字 符表只有8個字符"a-h"組成,它們能對每個字符使用3個位的二進(jìn)制形式表示, 如表1所示。a 000 b 001 c 010 d Oil e 100 f 101 g 110 h 111 表l這使得序列(S)需要總共14X3=42位。另外,因為我們看到在數(shù)據(jù)中字符"a"出現(xiàn)得更頻繁,可以更有效地用更少的位表示"a",其代價是對字符表中的其余字符增加位數(shù)。例如,8個字符能改成如表2中那樣地表示。a 0b 1000c 1001d 1010e 1011f 1100g iioih 1110表2在此情況,字符串S需要1位表示7個"a"字符中每一個,4位表示余下字 符的每一個。因而對S所需的總空間是7*1+7*4=35位。這表示節(jié)省了超過有百分 之16。有這樣統(tǒng)計編碼技術(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),它們整個被加入于此作為參考。應(yīng)用于許多那樣的統(tǒng)計編碼技術(shù)的一般原則由Shannon于1948年在下文中提出 "A Mathematical Theory of Coraraunication,, , Bell System Technical Jonrnal, 27:389-403(1948),它作為整體加入于此作為參考。Shannon表示,需 要編碼以概率P出現(xiàn)的字符或字符串的位數(shù)是-log2P。因此,若8個字符a-h每個 以等概率出現(xiàn),P=l/8,每個字符能以-log2 (1/8) =3位編碼。但在我們上述例子 中,我們知道"a"以概率7/14出現(xiàn),而其余字符以概率1/14出現(xiàn)。因此,a能 以-log2 (7/14) =1位編碼,而每個余下的字符能以-log2 (1/14) =3.8位編碼。另外的編碼方法是游程長度編碼。在此情況,同樣字符的序列用單個字符跟 著指出字符重復(fù)次數(shù)的數(shù)來替代。在等式(4)中給出一個例子。S二aaaaabbbbb 等式(4)此字符串能使用游程長度編碼法編碼,如等式(5)所示。 S=a5b5 等式(5)許多傳統(tǒng)的基于詞典的,通用的,無損的壓縮算法是根據(jù)上述兩種方法的組 合,例如,首先是基于詞典的壓縮重復(fù)的短語,隨后最終壓縮流作統(tǒng)計編碼?,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ù)稱之為LZ77,并形成若干其他壓縮算法的基礎(chǔ)。例如,廣 泛地與基于Unix的操作系統(tǒng)一起發(fā)行的"gzip"壓縮程序使用LZ77方法的一個變 例。LZ77是根據(jù)在固定大小的窗口中將指針用于短語以前的出現(xiàn)。通過穿過輸入 序列滑動窗口并搜索在該窗口中的任何重復(fù)字符串來尋找數(shù)據(jù)中重復(fù)的短語。例如,考慮在等式(6)中的輸入序列。S二abcdefbcdgh 等式(6)LZ77方法判定,短語"bed"重復(fù)兩次,并使用此信息壓縮該序列。"bed" 的第一次出現(xiàn)不加修改。第二次出現(xiàn)被從S的起點到"bed"第一次出現(xiàn)的距離和 重復(fù)的長度組成的指針?biāo)娲?。因此,序列S由LZ77被表示成如等式(7)那樣。S二abcdef (1, 3)gh指針(1,3)表示,在從窗口起點距離為1并向右延伸3個字符的短語在當(dāng)前 的指針位置被重復(fù)。此方案的一個變例使用從當(dāng)前位置反向的距離作為指針的第一 元素(而不是從窗口起點向前的距離)。在此情況S表示成如等式(8)那樣。S=abcdef (5,3)gh 等式(8)此處,指針(5, 3)指出,從當(dāng)前位置反向距離5處開始并向右延伸3個字符 的短語被重復(fù)。傳統(tǒng)的基于LZ77的壓縮程序根據(jù)將可變長重復(fù)轉(zhuǎn)換成固定長指針的方法使用 上述指針。然后通過應(yīng)用統(tǒng)計編碼技術(shù)壓縮得到的符號和指針序列。這些程序能使 用不同的方法發(fā)現(xiàn)重復(fù)的短語并編碼最終的數(shù)據(jù)流。LZ77方法的一個問題是它只能在固定大小的窗口中檢測重復(fù)。有限的窗口大 小不能檢測離開距離大于窗口大小的重復(fù)數(shù)據(jù)。例如,在上述例子中,若窗口大小 減少到5個字符,"bed"的重復(fù)將不被檢測,因為從"bed"的第一次出現(xiàn)的開始 到第二次出現(xiàn)的結(jié)束總的距離大于5。在LZ77方法中限制窗口的大小是為了限制 搜索重復(fù)性所需要的時間。使用LZ77方法的搜索算法的復(fù)雜性和執(zhí)行時間通常是 所搜索的輸入字符串的大小的函數(shù)。因而,通常傳統(tǒng)的LZ77壓縮技術(shù)將窗口大小 限制到幾千字符。例如,"gzip"程序使用32K字節(jié)的窗口。窗口大小的增加導(dǎo)致 LZ77算法執(zhí)行時間的很大增加。LZ77壓縮方法的另外的問題是它需要第二階段的統(tǒng)計編碼以提供足夠的壓縮 率。由LZ77方法使用的統(tǒng)計編碼技術(shù)是非增量的,因而是非連續(xù)的(如gzip使用 Huffman編碼,它是非增量的)。非增量編碼技術(shù)在對一個數(shù)據(jù)塊輸出編碼樹以前 必須完全地處理這塊數(shù)據(jù)。由非增量技術(shù)使用的塊的大小也需足夠大以保證編碼方 案產(chǎn)生有效的編碼樹。因而LZ77技術(shù)不適合于實時或在線的壓縮,其中有必須被 增量地處理的連續(xù)流。LZ77的另一個問題是可能的指針數(shù)目很大,因為它們能指向窗口內(nèi)任何位置。Ziv和Lempell針對LZ77技術(shù)中的某些問題在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方法使用在輸入流中遇到的所有短語的詞典的直接表示。 詞典通過建立在以前詞典項之上增量式地構(gòu)造。每當(dāng)見到新的短語,在認(rèn)為它可能 以后被使用的前提下,將其加到詞典中??紤]在等式(9)中的輸入序列。S=cbaabacaccacccacccc 等式(9)LZ78產(chǎn)生短語(O,c),其中0是空字符串而c是第一字符,下面兩個字符也 導(dǎo)致兩個新的短語(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" 的詞典項被再使用以增量地產(chǎn)生"acc" , "accc",禾B "acccc",對"ab"的詞 典項不再使用,因而是無用的。LZ78技術(shù)的一個問題是它使用積極的和推測的詞典結(jié)構(gòu)方案,這常導(dǎo)致不能 有效地使用的項的結(jié)構(gòu)。因此,詞典能變成很大,并導(dǎo)致不能有效使用系統(tǒng)資源并 降低壓縮效率。此外,LZ78方案的收斂速率是慢的,因為詞典以慢的速率增長。 基于LZ78的壓縮程序也常使用非增量的統(tǒng)計編碼技術(shù)來改善壓縮效率和程序速 度,因而不能用于在線或連續(xù)的數(shù)據(jù)。而且沒有措施來忘記(刪除)不再使用的短語或詞典項。對連續(xù)的,潛在無限的數(shù)據(jù)流,必要的是不僅動態(tài)地產(chǎn)生新的詞典項,還在于忘記不常使用的項以重新使用系統(tǒng)資源,這用LZ78算法不能實現(xiàn)。因此, LZ78算法不是連續(xù)壓縮算法。第三種壓縮算法是Sequitur算法,它在下文中描述Nevill-Manning和 Witten 的"Compression and Explanation Using Hierarchical Grammars", Computer Journal, 40 (2) : 103-116 (1997),它作為整體加入于此作為參考。 Sequitur算法從離散的符號序列推導(dǎo)出與上下文自由的語法。該語法分層地表示 該序列的結(jié)構(gòu),并能用于產(chǎn)生該序列的結(jié)構(gòu)的有用可視說明并推導(dǎo)在該序列中的詞 法單元。因為該語法完全地表示了整個輸入序列,Sequitur也能用于數(shù)據(jù)壓縮。Sequitur通過在輸入序列中施加兩個約束而工作。第一約束是沒有相鄰符號 對能出現(xiàn)多于一次。第二約束是由算法產(chǎn)生的每個規(guī)則應(yīng)使用多于一次。Sequitur 通過增量地檢查該輸入序列并保證在該序列的每一點滿足此兩個約束而應(yīng)用這些 約束。例如,在等式(10)中示出的輸入序列中,S=abcdbcabcd 等式(10)Sequitur將產(chǎn)生在等式(11)中的語法S=BABA=bc 等式(11)B二aAd其中A和B是語法中的規(guī)則,它們類似于詞典項。上述語法滿足第一約束, 因為沒有符號對出現(xiàn)多于一次。第二約束也滿足,因為在該語法中A和B均使用至少二次。因為整個輸入序列由語法表示,Sequitur使用此算法于通過應(yīng)用算術(shù)編碼壓 縮以編碼整個語法。語法的規(guī)則(即詞典項)被指針發(fā)送到重復(fù)以前的出現(xiàn)處,這 類似于上述對于LZ77的技術(shù)。當(dāng)在語法中第一次遇到規(guī)則時,其內(nèi)容被發(fā)送。該 規(guī)則的第二次出現(xiàn)作為指向用于構(gòu)造該規(guī)則的序列的區(qū)域(如該規(guī)劃第一次出現(xiàn)的 內(nèi)容)的指針被發(fā)送。在解碼器及編碼器能保留互相的規(guī)則號的軌跡的假設(shè)下,所 有此規(guī)則的后續(xù)出現(xiàn)作為規(guī)則號被發(fā)送。Sequitur壓縮技術(shù)的一個問題是它不是隱含地增量的。為保證語法用最少的 符號數(shù)發(fā)送,Sequitur需要語法在被發(fā)送前被完全構(gòu)成。通過將序列S的發(fā)送點10選在發(fā)送額外符號的概率低的地方,能使Sequitur看上去象增量的。用于檢測在 被壓縮的序列中的某一點是否為發(fā)送該序列的安全點的算法需要檢查就在此點以 前該符號的所有以前的出現(xiàn)。因為Sequitur需要在輸入序列的整個壓縮中動態(tài)地 選擇這些點,為了連續(xù)地搜索這些發(fā)送點,該算法引起大量額外處理。此附加的處 理(為使Sequitur成為增量的這是必需的)使得整個壓縮算法是非線性,并因而 大大減少了有效性。Sequitur算法的另外問題是它是不連續(xù)的。該算法不提供任何手段來增量地 發(fā)送被壓縮的輸出而同時刪除不常訪問的規(guī)則和符號(為了再使用系統(tǒng)資源)。因 此,Sequitur不能應(yīng)用于無限或很大的輸入數(shù)據(jù)流,在線性時間內(nèi)產(chǎn)生被壓縮輸 出的連續(xù)流。Sequitur算法還在其使用系統(tǒng)資源方面不太有效,因為它需要復(fù)雜的數(shù)據(jù)結(jié) 構(gòu)使能夠作可變長度的規(guī)則的頻繁建立及刪除。此外,該算法在刪除長的重復(fù)時計 算上不太有效,因為在重復(fù)的短語中的每對符號需要規(guī)則的建立和刪除。因此,重 復(fù)的每個附加的出現(xiàn)會招致多次規(guī)則的建立和刪除的計算上的過度開銷。為了將規(guī) 則的第二次出現(xiàn)作為指針發(fā)送,Sequitur的技術(shù)也需要額外的處理與存儲開銷。第四個壓縮算法是遞歸配對(Re-Pair)算法,它在下文中描述,Larsson和 Moffat 的 "Offline Dictionary-Based Compression ,, , Proceeding Data Compression Conference, 196-305 (1999),它被整體加入于此作為參考。Re-pair 算法試圖通過遞歸地檢査整個輸入序列以識別最頻繁出現(xiàn)的符號對來計算用于壓 縮的最優(yōu)詞典。在該算法的每個階段,最頻繁出現(xiàn)的符號對用表示該詞典中的新增 加的新的符號來替代。然后再次檢查整個經(jīng)修改的序列以找到當(dāng)前最頻繁出現(xiàn)的 對。此過程迭代,直到?jīng)]有出現(xiàn)大于一次的對。然后編碼最終的壓縮的序列和詞典, 以產(chǎn)生最終的壓縮輸出。這些算法的主要缺點是在于它們基本上是非增量及非連續(xù)的。在任何輸出能 夠產(chǎn)生之前,整個輸入序列必須通過遞歸配對處理。這些作者本身將算法描述為"離 線"技術(shù)。需要一種數(shù)據(jù)壓縮的系統(tǒng)及方法,它們(1)是通用壓縮算法;(2)是無損 壓縮算法;(3)對數(shù)據(jù)的線性增加不需要執(zhí)行時間的非線性增加;(4)不需要有 限的數(shù)據(jù)窗口大?。?5)是增量壓縮算法;(6)是連續(xù)壓縮算法。發(fā)明概述本發(fā)明是有效的壓縮算法,它能在實際上無限大小的窗口中刪除和消除重復(fù) 的可變長度短語。窗口的大小只受可用的系統(tǒng)存儲的數(shù)量的限制且不影響算法的速 度。本發(fā)明是在線性執(zhí)行時間內(nèi)運行的通用無損壓縮算法,能使用無限的窗口大小, 隱含地是增量的,且能在連續(xù)的輸入流上連續(xù)地運行。附圖簡述

圖1是本發(fā)明的一個實施例可以在其中運行的計算機(jī)系統(tǒng)的圖示。圖2是按本發(fā)明的一個實施例編碼和封裝(EE)單元和解碼和解封裝(DD)單元的部件的圖示。圖3是本發(fā)明的檢測器部件的實施例的圖示。圖4是按本發(fā)明的一個實施例的檢測技術(shù)的例子的圖示。圖5是示出按本發(fā)明的一個實施例的發(fā)送過程的流程圖。圖6是示出本發(fā)明的一個實施例的解壓縮算法的流程圖。圖7是按本發(fā)明的一個實施例的發(fā)送技術(shù)的例子的圖示。圖8a和8b是按本發(fā)明的一個實施例刪除技術(shù)的LRU和父指針的例子的圖示。圖9是按本發(fā)明的一個實施例的刪除技術(shù)的流程圖示。較佳實施例詳述現(xiàn)參考附圖描述本發(fā)明的較佳實施例,其中類似的參照號指示等同的或功能 上類似的單元。而且在圖中,每個參照號的最左邊數(shù)字對應(yīng)于該參照號首次使用的 圖。圖1是本發(fā)明的一個實施例可以在其中運行的計算機(jī)系統(tǒng)的圖示。計算機(jī)系 統(tǒng)100包括第一系統(tǒng)102A和第二系統(tǒng)102B。每個系統(tǒng)是獨立的計算機(jī)或軟件過程。 每個系統(tǒng)包括傳統(tǒng)的處理器110,存儲設(shè)備112,輸入/輸出設(shè)備114和操作系統(tǒng) 116。每個系統(tǒng)還包括編碼和封裝(EE)單元106和解碼及解封裝(DD)單元108。 EE和DD能作為在處理器上運行的軟件或作為專門設(shè)計的硬件(在此情況處理器不 是必須的)嵌入。兩個系統(tǒng)102A和102B能通過任何物理的或邏輯的網(wǎng)絡(luò)鏈路連接??梢韵胂?,本發(fā)明能完全在兩個系統(tǒng)中運行且在圖1中的實施例是示例性的,它不試圖限制本發(fā)明的范圍。下面將更詳細(xì)地描述EE單元106和DD單元108的操作。 例如,在另外的實施例中,EE單元106及DD單元108可以是專用集成電路(ASIC)的一部分。EE單元106實現(xiàn)本發(fā)明的壓縮技術(shù)。例如,EE單元106能作為計算機(jī)軟件程 序、硬件、固件或它們的組合來實現(xiàn)。在一個實施例中,本發(fā)明的壓縮技術(shù)能以存 儲在傳統(tǒng)的EE單元106中的存儲模塊并由處理器110執(zhí)行軟件來實現(xiàn)。本發(fā)明的 壓縮技術(shù)是時間線性的,完全增量的,和連續(xù)的數(shù)據(jù)壓縮算法。為便于參照,該算 法在此文件中稱為"IZ"。本發(fā)明的解壓縮工作在DD單元中完成,并能作為如計 算機(jī)軟件程序,硬件,固件,或它們的組合而實現(xiàn)。本發(fā)明包括同時操作的三個組件。圖2是按本發(fā)明的一個實施例的編碼和封 裝(EE)單元106和解碼和解封裝(DD)單元組件的圖示。第一組件是檢測器組件 202,它檢測在線性時間輸入流中任何處的重復(fù)短語/項。為本專利的目的。術(shù)語"項" 和"符號"可交替使用。"短語"或"數(shù)據(jù)短語"包括固定數(shù)目的順序數(shù)據(jù)項。數(shù) 據(jù)項可以是數(shù)據(jù)符號和/或數(shù)據(jù)短語標(biāo)識符。檢測器組件202通過使用實際上無限 的窗口大小識別并消除重復(fù)的短語,增量地壓縮輸入流。此過程能使用作為檢測器 組件的部分的識別單元,壓縮單元,和庫建立單元(散列建立單元)完成。這些單 元的操作在下面參考圖3和4描述。第二組件是發(fā)送組件204,它以隱含的增量方 式發(fā)送經(jīng)壓縮的序列和有關(guān)的短語的詞典。發(fā)送組件204還保證壓縮和解壓縮算法 總是完全同步。第三組件是刪除組件206,它使IZ算法能刪除并有效地"忘記" 不常使用的短語和符號以釋放系統(tǒng)資源。因而該刪除組件使IZ能在無限的輸入數(shù) 據(jù)流上連續(xù)地運行。DD單元108包括解壓縮單元,這在下面詳述。檢測器組件202,發(fā)送組件204和刪除組件206能以各種方式實現(xiàn)。檢測器組 件的一個實現(xiàn)方法示于圖3。短語檢測算法使用下列步驟,以增量地將輸入序列S轉(zhuǎn)換成被壓縮的序列S'。重復(fù)的符號對的檢測能使用散列表(如庫)完成以記錄所有已被檢測組件202 觀察到的所有唯一的符號對。每個散列表的項包括指向唯一符號對的位置的指針。 若該符號對只出現(xiàn)一次,則對此符號對的散列表項將指向S'中第一符號的位置。 若該符號對已發(fā)生多于一次,且因而由詞典短語表示,則對該符號對的散列表項將指向?qū)?yīng)的詞典短語。為保證檢測所有重復(fù)的符號對,該算法必須保證每當(dāng)一個符 號被加入或從S'中刪除,該散列表被適本地更新。例如,在圖3中示出的算法中的步驟314導(dǎo)致增加新的項到表中。類似地,步驟314, 318和332將導(dǎo)致從散列表中刪除一個或多個項?,F(xiàn)參考圖4中示出的例子描述圖3的流程圖。在圖4中示出的例中的輸入序列是"abcdcdabcd"。在步驟302 "Y"被設(shè)成 等于下一個輸入符號"a",并在304附在S,之后(它以前等于空)。X然后被設(shè) 成序列中"a"之前的符號(空)。在308, XY的組合以前未發(fā)生,所以XY在309 被加到散列表,過程在步驟302重復(fù)。圖4的第1行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成等于下一個符號b,在304附在S'之后,并在304 X被設(shè) 成Y前的符號("a")。在308 XY的組合(ab)以前未出現(xiàn),所以XY在309被 加到散列表,過程在步驟302處重復(fù)。圖4的第2行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"c",在304附在S,之后,在306 X被設(shè)成 Y之前的符號("b")。在308 XY的組合(bc)以前未出現(xiàn),所以在309 XY被 加到散列表,過程在步驟302處重復(fù)。圖4的第3行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"d",在304附在S,之后,在306 X被設(shè)成 Y之前的符號("c"),在308 XY的組合(cd)以前未出現(xiàn),所以在309 XY被 加散列表,過程在步驟302處重復(fù)。圖4的第4行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"c",在304附在S,之后,在306 X被設(shè)成 Y之前的符號("d")。在308 XY的組合(dc)以前未出現(xiàn),所以在309 XY被 加到散列表,過程在步驟302處重復(fù)。圖4的第5行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"d",在304附在S'之后,在306 X被設(shè)成 Y之前的符號("c" ) 。 XY的組合(cd)以前已經(jīng)出現(xiàn),所以過程繼續(xù)。因為XY 的以前出現(xiàn)是在序列S',且在310不是作為詞典短語的右端項,這意味著XY是應(yīng) 該新建并加到詞典中去的新短語。因此,在312通過建立新的詞典短語P,且將其 設(shè)成等于XY,過程繼續(xù)。在此例中P,設(shè)成等于"cd"。然后XY的以前出現(xiàn)在314 中在S'由Pi替代。注意,此替代步驟314導(dǎo)致從散列表去除兩個項并將兩個新的 項加到散列表。這些散列表更新包括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'的末端去除將導(dǎo)致符號對(對應(yīng) 于X前的符號及X)從散列表去除。在此例子中,"PlC"將從散列表去除。然后Y 被設(shè)成等于Pl,且在步驟304過程繼續(xù)。在此點該例的狀態(tài)是S、abP,且Y等于P,。 然后在304 Y附于S'之后(現(xiàn)在S,二abPA)且在306 X被設(shè)成等于在S'中Y 前的符號("P/')。在308,序列中XY (P,P,)未出現(xiàn),所以XY在309被加到散 列表,過程在步驟302處重復(fù)。在圖4的第6行用S、abPA示出在此點該例子的 狀態(tài)。然后在302 Y被設(shè)成下一個符號"a",在304附在S,之后,在306 X被設(shè)成 Y之前的符號("P1")。在308 XY的組合(P,a)以前未出現(xiàn),所以在309 XY 被加到散列表,過程在步驟302處重復(fù)。圖4的第7行示出在此點處該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"b",在304附在S,之后,在306 XY被設(shè) 成Y之前的符號("a" ) 。 XY的組合(ab)以前已在序列中出現(xiàn),所以過程繼續(xù)。 因為XY的以前出現(xiàn)是在序列S'中,且不是作為詞典短語310的右端項,這意味著 XY是應(yīng)該新建并加到詞典中去的新短語。因此,在312通過建立新的詞典短語P2 且將其設(shè)成等于XY,過程繼續(xù)。在此例中,P2設(shè)成等于"ab"。然后在314中XY 的以前出現(xiàn)在S'由h替代。如之前,該步驟導(dǎo)致從散列表去除兩個符號并加上兩 個符號。然后,在316 Y從S'的末端去除,在318 X從S'的末端去除(這也導(dǎo)致 從散列表去除一個符號對)。然后Y被設(shè)成等于P2,且在步驟304過程繼續(xù)。在此 點該例的狀態(tài)是S、PJMV且Y等于P。然后在304 Y附于S,之后(現(xiàn)在S、P2P,PJ52)且在306 X被設(shè)成等于在S,中Y 前的符號(在此情況它實際上是數(shù)據(jù)短語標(biāo)識符"P/,)。在308,序列XY (PA) 未出現(xiàn),所以在309 XY被加到散列表,過程在步驟302處重復(fù)。在圖4的第8行用S、P2P^P2示出在此點該例子的狀態(tài)。然后在302 Y被設(shè)成下一個符號"c",在304附在S'之后,在306 X被設(shè)成 Y之前的符號("P2")。在308 XY的組合(P2c)以前未出現(xiàn),所以在309 XY被 加到散列表,過程在步驟302重復(fù)。圖4的第9行示出在此點處該例子的狀態(tài)。然后在302 Y等于下一個符號"d",在304附在S,之后,在306 X被設(shè)成Y之前的符號("C" ) 。 XY的組合(Cd)前面己經(jīng)在序列中出現(xiàn),所以過程繼續(xù)。因為XY等于詞典短語310的右端項,通過在330從S'的末端去除Y,在332從S' 的末端去除X,過程繼續(xù)。在332從S'的末端去除X導(dǎo)致從散列表去除符號對(對 應(yīng)于X前的符號及X)。然后在334中Y被設(shè)為等于XY的詞典短語。在此例中Y 被設(shè)成等于P,。過程在步驟304繼續(xù)。在這點此例的狀態(tài)是S,4^P1P2且Y等于Pi。然后在304 Y附于S,之后(現(xiàn)在S—P2P,PiP2P,),且在306 X設(shè)成等于在S,中 Y之前的符號("P2" ) 。 XY的組合(P2PJ在序列中以前己出現(xiàn)且因為XY不等于 詞典短語310的右端項,通過在312建立新的詞典短語P3并將其設(shè)成等于XY,過 程繼續(xù)。在此例中,P:,被設(shè)成等于"PJV'。然后在314XY在序列S'以前的出現(xiàn)由 P:,所替代。然后在316Y從S'的末端除去,在318X從S'的末端除去。隨后Y被設(shè) 成等于P,,過程在步驟304繼續(xù),在此點上本例的狀態(tài)是S'^3P,而Y等于P3。隨后在304 Y附在S,之后(現(xiàn)在S,寸3P,P:,)且X在306被設(shè)成等于S,中Y之 前的符號("P/')。在308 XY (P,P3)在序列中以前未出現(xiàn),所以在309 XY被加 到散列表且過程在步驟302重復(fù)。圖4中的第10行用S、P3P,P:,示出在此點本例的 狀態(tài)。過程能對任何數(shù)目的輸入繼續(xù)。本發(fā)明能檢測在輸入流中任何處的重復(fù)。本發(fā)明不需要直接的搜索窗口,且 因而能夠檢測重復(fù)性而不論重復(fù)發(fā)生得多遠(yuǎn)。也應(yīng)用某些加窗口技術(shù)使得該算法如 下述那樣繼續(xù),但是此窗口是基于系統(tǒng)存儲器的大小且不影響該算法的速度。上述 算法已示出在時間和空間上是線性的。線性度的證明是根據(jù)計算處理長度n的序列 所需的總操作數(shù)。此數(shù)示作為O(n)(即應(yīng)是正比于n的數(shù))。因而,本發(fā)明能經(jīng)過 實際只在線性時間中無限的窗口檢測可變大小的重復(fù)。重復(fù)的短語的檢測也比如上 述Sequitur技術(shù)那樣的其他技術(shù)更有效,因為IZ對在短語中的每個符號對不需要 任何不是必須的規(guī)則的建立和刪除。發(fā)送組件204保證被壓縮的序列(S')和短語(Pi)的詞典均被發(fā)送,以確保 精確的解壓縮。因而,發(fā)送組件必須保證壓縮單元永不發(fā)送參照到詞典短語,它在 解壓縮單元中不存在,從而不能由解壓縮單元進(jìn)行解參照。為保證該算法是完全增 量的,IZ使用下面的圖5中描述的過程發(fā)送S'和短語詞典。圖5是示出按本發(fā)明的一個實施例的發(fā)送過程的流程圖。在502使用指針(T)指向已被發(fā)送的壓縮序列(S')中的最后符號。從T到S'的末端的所有符號在將新的短語加入到詞典(如圖3中的步驟312)以前被發(fā)送。然后重復(fù)短語的兩次出現(xiàn) 在506用新建的短語替代,包括如在步驟312-320中在S'的末端的出現(xiàn)。然后, 在508指針(T)被設(shè)成指向附在S,末端之后的新的短語。圖5中示出的實施例的效果是頭兩次發(fā)生重復(fù)短語時,它被不加修改地發(fā)送 (可以想象在本發(fā)明的另外實施例中出現(xiàn)其他變化,下面將描述其中一些)。因為 每次重復(fù)由嵌入的符號對組成,重復(fù)短語的第二次出現(xiàn)通常借助直接送出其內(nèi)容 (它只包括兩個符號)而更有效地發(fā)送,而不是使用指針,后者需要額外的處理開 銷。因而解壓縮算法以與壓縮算法完全相同的形式接收重復(fù)短語的頭兩次出現(xiàn)。這 就允許解壓縮算法產(chǎn)生與壓縮算法所產(chǎn)生的對重復(fù)的完全相同的詞典短語。解壓縮 算法利用與壓縮算法相同的短語編號技術(shù),從而允許壓縮算法將所有短語的未來出 現(xiàn)只作為一個短語號發(fā)送。DD108包括解壓縮單元208,它在解壓縮組件210中包括以如計算機(jī)程序,固 件,或硬件形式的解壓縮算法。圖6是示出本發(fā)明的一個實施例的解壓縮算法的流 程圖。該解壓縮算法產(chǎn)生原始的輸入流,同時保證完全與壓縮算法同步。每個壓縮的符號在602被接收,而解壓縮單元208在604判定,該符號是否 為對如P,那樣的詞典短語號的參照,若符號是那樣的參照,解壓縮單元208在606 提取該短語號的內(nèi)容并產(chǎn)生原始的輸入序列。然后解壓縮單元在608借助將短語的 內(nèi)容通過除最后發(fā)送步驟的所有壓縮步驟而同步壓縮和解壓縮算法。若符號不是對詞典短語號的參照,則解壓縮單元208在610將該符號通過所 有壓縮步驟(除最后的發(fā)送)以保證解壓縮與壓縮算法同步。此處理過程對所有接 收的符號在612重復(fù)。因為本發(fā)明的一個實施例恰恰在產(chǎn)生短語之前發(fā)送產(chǎn)生該短語所需的內(nèi)容, 它保證解壓縮算法永不會在解壓縮算法產(chǎn)生特定的短語之前接收對短語的參照。因 此,壓縮及解壓縮之前接收對短語的參照。因此,壓縮及解壓縮算法能隱含地保證, 它們保持同樣的短語編號方案,并它們對應(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算法隱含地是增量的,因為發(fā)送點自動地由壓縮算法確定,并不需要特定 算法的選擇。因此,也沒有附加的計算開銷來選擇發(fā)送點或計算對發(fā)送的指針(如 在LZ77或Sequitur的情況)。圖7是按本發(fā)明的一個實施例的發(fā)送技術(shù)的例子的圖示。在圖7中,數(shù)據(jù)序列是"abababcabc"。注意,這不同于在圖4中示出的例 子。開始,指針T在502被設(shè)成第一個接收數(shù)據(jù)位置的前一個位置。在此例中使用 上述參考圖3的壓縮技術(shù)。使用此壓縮技術(shù)第一個新的詞典短語被加到第4行。然 而,在增加新的詞典短語之前,發(fā)送組件204將S'中的發(fā)送從T到S'的末端所有 符號。在此例子中,發(fā)送包括如圖7中的第4行示出的符號"abab"。然后,在 506使用圖3所述的技術(shù)替代重復(fù)短語的所有出現(xiàn)。然后,指針(T)被設(shè)成等于 剛加入的新的短語。在此例中,T被設(shè)成等于Pi在第4行中的第二次出現(xiàn)。符號繼續(xù)被接收及累積而不發(fā)送,直到接收到圖7中第10行的序列。此時, 第二個短語被加到詞典(P2=PlC)。在加入第二短語之前,發(fā)送組件204在504將 發(fā)送從指針(T)到S'的末端所有S'中的符號。在此例中,發(fā)送符號"P,cP工"。 新短語在S'中的出現(xiàn)在506中按圖3中描述的技術(shù)替代,且指針(T)在508被設(shè) 成新加入短語的末端。在此例中,T被設(shè)成等于在圖7的第10行中示出的S'中的 第二個h。此過程對任何數(shù)量的數(shù)據(jù)繼續(xù)。上面發(fā)送過程隱含地同步了壓縮和解壓縮詞典并保證解壓縮單元總能解參照 它接收的每個詞典短語。本發(fā)明的另一個實施例使用直接的詞典發(fā)送過程以保證所 有短語的可解壓縮性。此另外的發(fā)送過程是基于將短語在獨立而并行的通信信道中 發(fā)送到解壓縮算法。每當(dāng)壓縮算法發(fā)現(xiàn)新的詞典短語,它被加上標(biāo)記 "installed=0",指出該短語尚未被安裝在解壓縮詞典中。此新的短語號和它的 內(nèi)容經(jīng)可靠的傳輸信道被發(fā)送到解壓縮單元。解壓縮算法對每個它收到的規(guī)則送回 確認(rèn)。當(dāng)壓縮算法對短語收到確認(rèn),它在該短語上設(shè)置標(biāo)記"installed=l",指 出該短語已被接收并安裝在解壓縮詞典中。在由壓縮算法發(fā)送任何短語 之前,該算 法校驗"installed"標(biāo)記。若installed等于0,即FALSE (假),則發(fā)送該短語 的內(nèi)容。注意,當(dāng)短語的內(nèi)容被發(fā)送時,該算法也必須遞歸地對在這些內(nèi)容中的任何嵌入短語校驗installed標(biāo)記。若installed等于1,即TRUE (真),發(fā)送短語 本身。通過使用此另外的直接詞典發(fā)送過程,壓縮算法能同步兩個詞典并保證解壓 縮算法永不會接收不能解參照的短語。此方法還顯著地改變了解壓縮算法的結(jié)構(gòu)。 因為在此方法中詞典短語直接發(fā)送到解壓縮算法,它不需要從數(shù)據(jù)流中發(fā)現(xiàn)這些短 語。因此,解壓縮算法只需要解參照(即解壓縮)它接收的數(shù)據(jù)并不需要處理通過 壓縮算法的短語檢測器和刪除組件的數(shù)據(jù)(在以前描述的隱含詞典同步實施例中是 必須的)。還注意到,在此直接詞典發(fā)送模型中,詞典同步不需要被壓縮的數(shù)據(jù)在 可靠的傳輸信道(即保證按順序遞交所有數(shù)據(jù)包的信道)中發(fā)送。因為被壓縮的數(shù) 據(jù)不用于隱含地同步詞典,在壓縮單元和解壓縮單元之間的數(shù)據(jù)的丟失或數(shù)據(jù)提交 次序紊亂將不導(dǎo)致不一致的詞典,從而不導(dǎo)致不精確的解壓縮。在上述直接詞典中,同步技術(shù)能以各種方法進(jìn)一步優(yōu)化。例如,只有遇到大 于"N"次的短語能選擇由壓縮算法發(fā)送。設(shè)N=l,將導(dǎo)致所有短語被發(fā)送,并因 此提供最大的壓縮和最快的收斂。但同時,為同步兩個詞典所需的附加帶外詞典發(fā) 送通信量也將最大。當(dāng)N增加時,壓縮和收斂將降低,但額外的帶外詞典同步通信 量也將降低。因而N能根據(jù)所遇到的通信量的類型動態(tài)地選擇以便使總的輸出通信量最小。而且,若有任何與發(fā)送單獨詞典短語更新有關(guān)的開銷,可以緩存多個短語 并作為單個數(shù)據(jù)包一起發(fā)送。上述直接詞典發(fā)送模型也能通過從解壓縮算法對每個由壓縮算法發(fā)送的詞典 更新消除確認(rèn)的需要而優(yōu)化。在上面實施例中,壓縮單元必須從解壓縮單元接收"短 語收到"的確認(rèn),以便將對該短語的"installed"標(biāo)記從0(即假)改到1 (即真), 并從而允許壓縮算法能在未來的壓縮中使用該短語。此過程保證由壓縮單元在被壓 縮的數(shù)據(jù)中發(fā)送的所有短語參照能由解壓縮單元解參照以產(chǎn)生該短語的原始內(nèi)容。 在直接詞典發(fā)送模型的另一個實施例中,在預(yù)定但動態(tài)調(diào)節(jié)的時間間隔之后,壓縮 算法自動地將對新發(fā)送的短語的installed標(biāo)記從0改變到1。當(dāng)短語從壓縮單元 (經(jīng)獨立可靠的詞典傳輸信道)發(fā)送時,它被本地標(biāo)記一時間標(biāo)簽(t。)指出發(fā)送 的時間。同時對被發(fā)送的短語的"installed"標(biāo)記被初始化成0。在預(yù)定的時間 間隔(T)以后,該短語的"installed"標(biāo)記從0改變成1,從而允許壓縮算法使 用該短語于未來的壓縮。此詞典發(fā)送模式推測,若短語的更新在時間t。從壓縮單 元發(fā)送到解壓縮單元,則任何使用此短語并從壓縮單元在時間t。+T之后發(fā)送的被壓縮數(shù)據(jù)在短語更新之后到達(dá)解壓縮單元。時間間隔T能考慮到在壓縮和解壓縮單 之間數(shù)據(jù)發(fā)送的速率和等待時間的可變性加以調(diào)節(jié)。此推測的詞典發(fā)送模型改進(jìn)了 壓縮的程度,因為它允許壓縮單元在短語的更新被發(fā)送之后開始使用短語T秒,而不必等待從解壓縮單元來的對該短語的確認(rèn)。從而短語更快地成為可用,它產(chǎn)生更 高的壓縮。因為上述推測的詞典發(fā)送模型是基于在壓縮和解壓縮單元之間發(fā)送時間變化 的估計,有可能在特定的短語的內(nèi)容經(jīng)由獨立的詞典同步信道被接收之前,解壓縮 單元接收在被壓縮數(shù)據(jù)中的該短語的參照。當(dāng)發(fā)生此情況時,解壓縮單元發(fā)送信號 給壓縮單元,指出它(解壓縮單元)在經(jīng)由詞典更新信道接收短語內(nèi)容之前經(jīng)數(shù)據(jù) 信道接收到該短語。壓縮單元使用從解壓縮單元來的這些誤差信號適本地調(diào)節(jié)在發(fā) 送新短語和將該短語的installed標(biāo)記改成l之間的時間間隔(T)。上面推測詞典發(fā)送模型的另一個組件是當(dāng)解壓縮算法接收到它不能精確地解 參照的短語時它應(yīng)能檢測。這能用許多方法達(dá)到。推測的詞典發(fā)送模型的一個實施 例對在壓縮單元和解壓縮單元中發(fā)送和安裝的短語的總數(shù)保持一個計數(shù)器。因為所 有短語有序地發(fā)送和接收(由于它們經(jīng)由可靠的傳輸信道發(fā)送),這些計數(shù)器能用 于檢測在短語的內(nèi)容經(jīng)由詞典同步信道接收之前是否解壓縮信道經(jīng)數(shù)據(jù)信道收到 該短語的參照。在壓縮單元的每個短語根據(jù)被安裝的計數(shù)器的當(dāng)前值用"本地安裝 的計數(shù)器"本地標(biāo)記。每個從壓縮單元發(fā)送的壓縮的數(shù)據(jù)包,對在壓縮數(shù)據(jù)包中參 照的所有短語用"本地安裝的計數(shù)器"的最大值標(biāo)記。此"最大安裝計數(shù)器"指出在壓縮的數(shù)據(jù)包中使用的最近"安裝"的短語。 當(dāng)解壓縮單元接收被壓縮的數(shù)據(jù)包時,通過校驗"最大安裝計數(shù)器"是否大于其自己當(dāng)前的安裝計數(shù)器來檢測該數(shù)據(jù)包是否包含非可解參照的短語。若是這樣情況, 則在壓縮的數(shù)據(jù)包內(nèi)至少存在一個解壓縮單元尚未收到其更新的內(nèi)容的短語。此事 件隨后被用于啟動上述反饋機(jī)制以發(fā)送誤差信號給壓縮單元。用于計數(shù)發(fā)送和安裝 短語數(shù)的計數(shù)器最終能達(dá)到其最大值并返回到零。借助保證超過當(dāng)前安裝計數(shù)器的 任何"本地安裝的計數(shù)器"被復(fù)位到某個初始值(可能為0)來處理此情況。系統(tǒng) 還保證,當(dāng)發(fā)送計數(shù)器達(dá)到其最大值時,在對應(yīng)于最大的計數(shù)器值的短語被壓縮單 元確認(rèn),壓縮單元才發(fā)送任何新的短語更新。因而發(fā)送的解壓縮單元除了對應(yīng)于最 大接收的計數(shù)器的短語更新以外不需要確認(rèn)任何被接收的短語更新。如上所述,為了使壓縮技術(shù)在無窮盡的數(shù)據(jù)上連續(xù)地工作而不需要大的系統(tǒng) 資源,壓縮系統(tǒng)和技術(shù)應(yīng)有效地可行地刪除短語和符號以減少詞典的大小。本發(fā)明 達(dá)到了此目標(biāo)。即因為短語詞典和被壓縮的序列S'使用系統(tǒng)資源(如系統(tǒng)存儲器) 保持它們的狀態(tài)信息,為了保證本發(fā)明能在無限的數(shù)據(jù)流上連續(xù)地運行,必須提供 有效的方法來從詞典中刪除老的短語并刪除被壓縮的序列S'的最老的部分。若這 些"忘記"(刪除)措施不具備,該算法最終將用完系統(tǒng)資源并必須終止。因為短語是分層的(即短語能包含輸入字(符號)或?qū)ζ渌陶Z(數(shù)據(jù)短語 標(biāo)識符)的參照),不可能簡單地刪除短語而不管它是否被更高層短語參照。例如, 若短語Pi被P」參照(如P尸Pia),且Pi被刪除,則P,的任何未來使用將導(dǎo)致錯誤。 因而,必須判定的不僅是哪個短語能刪除,而且還要保證參照這些短語的所有短語 也被刪除。本發(fā)明通過在"最近最少使用(LRU)"的數(shù)據(jù)結(jié)構(gòu)中表示所有短語來解決所有這些問題。在本發(fā)明的一個實施例中LRU作為鏈表實現(xiàn),并每當(dāng)在壓縮期 使用短語時使用LRU有效地將其移到表的前端。因而,若短語"P產(chǎn)ab"在LRU的 中間且符號ab出現(xiàn)在輸入流中,則Pi從它在表的當(dāng)前位置去除并附到該表當(dāng)前前 端(或頭部)。建立的新短語也放在表的當(dāng)前前端(或頭部)。因而,在算法的任 何點,在表的末端(或尾部)的短語是最近最少使用的短語。若必須刪除短語以釋 放系統(tǒng)資源再度使用,則最近最少使用的短語將是首先要刪除的。雖然能使用LRU識別哪個短語要刪除,但它沒有指出哪個較高層短語參照此 短語,因而也必須刪除。本發(fā)明通過要求每個短語保持一個"父指針"來解決此問 題,它總是保持該短語最近一次被參照的軌跡。例如,若Pi最近被P」參照,而Pj 最近被壓縮的字符串S'參照,則P,應(yīng)包含到Pj的父指針,而P」應(yīng)包含指向S'中被 使用的位置的父指針。圖8a和8b是按本發(fā)明的一個實施例的刪除技術(shù)的LRU和父 指針的例子的圖示。在圖8a中短語LRU和父指針直接圖示在輸入符號"ab"到達(dá)之后。 在圖8b中短語LRU和父指針直接圖示在輸入符號"c"到達(dá)之后。 在圖8中示出的數(shù)據(jù)結(jié)構(gòu)允許算法能精確地判定實際哪個短語被另外的較高 層短語參照。因此,能按照圖9實現(xiàn)短語的刪除。圖9是示出按本發(fā)明的一個實施 例的刪除技術(shù)的流程圖。使用圖9示出的技術(shù),X在902設(shè)成在LRU尾部的短語。然后Y在904設(shè)成X的父指針。若在906如圖8a, Y指向一個短語,則在LRU中從位置X到Y(jié)的所有短 語在908被刪除(包括X但不包括Y) , X在910設(shè)成Y,過程在步驟904處重復(fù)。 若當(dāng)906 Y指向符號,則刪除單元208在919刪除X并隨后在920刪除從S'的尾 部到Y(jié)的所有符號。此算法遞歸地保證,若任何短語被刪除,在短語詞典和在S'中對該短語的參 照也被刪除。此算法還導(dǎo)致從壓縮的序列S'刪除符號。因此,由不常訪問的短語 和S,中的老的符號占用的系統(tǒng)資源通過此技術(shù)能再度使用。若必須釋放附加的資 源,也能刪除S,的尾部的符號而不應(yīng)用上述短語刪除算法。這能簡單地從S'的尾 部去除所需數(shù)目的符號(只要這些符號以前已被發(fā)送過)來完成。若被刪除的符號 是對一個短語的參照,則校驗該特定的短語,判斷其父指針是否指向S'中被刪除 的符號的位置。若是這樣情況,則該父指針被設(shè)成空值,說明在S'中它所指向的 符號已被刪除?;蛘咴摱陶Z及其后代(即指向它的其他短語)也能被刪除。也能使用上述短語和符號刪除算法設(shè)定由本發(fā)明的系統(tǒng)和方法使用的系統(tǒng)存 儲器的數(shù)量的固定限制。兩種刪除算法招致最小的計算開銷且不影響IZ算法的線 性度。在處理無限輸入流時,連續(xù)運行的IZ過程動態(tài)地選擇要刪除的短語和符號 并重新使用釋放的資源,以保證它不會超過預(yù)定的或浮動的限制。在上述本發(fā)明的實施例中,對重復(fù)兩次的每個符號對在詞典中建立新的短語。 它可以修改,使得僅當(dāng)一個符號對至少重復(fù)K次時建立新的詞典短語,其中K二3, 4, 5等。此修改將減少在詞典中短語的數(shù)目,并可增加或減少壓縮的效率。用本發(fā)明發(fā)送的數(shù)據(jù)能使用如算術(shù)編碼那樣的增量編碼方案統(tǒng)計地編碼。此 步驟常常是不必要的,因為由統(tǒng)計編碼得到的附加壓縮與去除大的重復(fù)短語得到的 壓縮相比是微不足道的。例如,因為IZ能用單個短語號替代隔開很大距離的大的 重復(fù),通過刪除和消除重復(fù)短語得到高度的壓縮。在那樣情況,由編碼和壓縮的序 列得到的附加壓縮將是微小的。因此,能避免與統(tǒng)計編碼及其相關(guān)的計算開銷而不 會在壓縮效率上有大的降低。這是與其他基于詞典的技術(shù)相反,它們只能檢測相當(dāng) 小的窗口內(nèi)的重復(fù)并因此通過統(tǒng)計編碼步驟得到它們主要的壓縮。因此如果這些其 他程序的輸出不作統(tǒng)計編碼,它們將大大地降低了壓縮效率。若由本發(fā)明產(chǎn)生的壓縮數(shù)據(jù)在發(fā)送前包裝成數(shù)據(jù)包,則該數(shù)據(jù)包能借助應(yīng)用 其他增量的或非增量的統(tǒng)計編碼或壓縮技術(shù)(如Huffman編碼)作進(jìn)一步處理。這可以是應(yīng)用到輸出的后處理步驟,因而不影響本發(fā)明的增量本質(zhì)。本發(fā)明在邏輯上對每個信道由兩個通信模塊組成,它們是壓縮的。壓縮模塊 在信道源處壓縮數(shù)據(jù),而解壓縮模塊在信道目標(biāo)處解壓縮數(shù)據(jù)。若單個源與多個目 標(biāo)通信,本發(fā)明能伸縮并重復(fù),使得對每個目標(biāo)存在單獨的壓縮模塊。所有這些壓 縮模塊能駐留在同一個壓縮單元或設(shè)備。類似地,若多個源和單個目標(biāo)通信,本發(fā) 明能伸縮并重復(fù),使得對每個源存在一個單獨的解壓縮模塊。而且所有這些解壓縮 模塊能駐留在同一個解壓縮單元或設(shè)備。此外,多個壓縮和解壓縮模塊能駐留在同 一單元或設(shè)備上,它然后成為組合的壓縮和解壓縮單元。本發(fā)明的本實施例對每壓縮和解壓縮模塊使用獨立的詞典。本發(fā)明的另外的 實施例使用在共存于同一源的多個壓縮模塊之間的共享詞典。此另外的共享詞典實 施例能使用上述直接詞典同步技術(shù)保證共享的壓縮詞典與每個解壓縮詞典同步。在 壓縮單元的共享詞典能通過建立單個共享數(shù)據(jù)結(jié)構(gòu)以存儲所有由壓縮算法學(xué)到的 短語來實現(xiàn)。每個短語還保持共享的總體版本號,每當(dāng)屬于該短語的內(nèi)容被刪除或 用新的短語替代時,此版本號增加。因此,在此共享的詞典實施例中,所有壓縮單 元的檢測器和刪除組件能被共享。每個壓縮單元具有它自己單獨的發(fā)送單元,它保 持獨立的本地短語版本號和狀態(tài)標(biāo)志。當(dāng)新的短語參照從檢測器組件傳送到發(fā)送組 件以備發(fā)送到解壓縮單元時,共享的總體版本號與對特定于給定的發(fā)送組件的本地 版本號相比較。若兩個號相同,則發(fā)送組件校驗與短語相關(guān)的其本地狀態(tài)標(biāo)志,以 判定該短語是否已被發(fā)送和安裝。若兩個號不同,則發(fā)送組件知道它是由共享的檢 測器組件建立的新短語。在此情況,發(fā)送組件復(fù)位狀態(tài)標(biāo)志以指出該短語尚未被發(fā) 送,并根據(jù)上述直接詞典發(fā)送協(xié)議處理該短語。此共享的詞典發(fā)送實施例使能更有 效的使用系統(tǒng)存儲器資源,因為所有共存于同一設(shè)備的壓縮單元共享單個短語層次 和符號數(shù)據(jù)結(jié)構(gòu)。所有短語的內(nèi)容僅存入共享的數(shù)據(jù)結(jié)構(gòu)中。加入到該設(shè)備的每個 附加的壓縮單元實際上只需要一個附加的短語索引表來存儲每個短語的本地版本 號及狀態(tài)。用于每個輸入符號的字長是可變的。本發(fā)明用1, 2, 4個字節(jié)的字長實現(xiàn), 產(chǎn)生變化的結(jié)果。字長也能設(shè)成大于4個字節(jié)。因為算法的速度取決于它處理的符 號的數(shù)目,較大的字長產(chǎn)生較大的數(shù)據(jù)通量。若每個符號對應(yīng)于4個字節(jié)(即字長-二4字節(jié)),該算法近似于在任何時間周期處理相當(dāng)于每個符號對應(yīng)于1個字節(jié)時,使用4字節(jié)的字長使該算法不能檢測在4個字節(jié)邊界 上發(fā)生的重復(fù)(即由一系列字節(jié)數(shù)分離的重復(fù),而字節(jié)數(shù)不是4的倍數(shù))。在短語檢測算法中使用的散列函數(shù)和表是靈活的。它們能優(yōu)化成最適合于被 壓縮數(shù)據(jù)的類型。用于短語LRU和壓縮序列S,的鏈表能作為單鏈表或雙鏈表實現(xiàn)。如陣列那樣 的其他數(shù)據(jù)結(jié)構(gòu)也能使用并能提供更好的存儲器使用。如上所述,本發(fā)明是有效的壓縮算法,它能檢測并消除在實際上無限大小窗 口內(nèi)可變長度的重復(fù)短語。窗口的大小只受可用的系統(tǒng)存儲器的大小的限制,并不 影響算法的速度。不是使用在LZ77壓縮技術(shù)中常用的幾千字節(jié)的窗口大小,本發(fā) 明能使用從數(shù)十到數(shù)千兆字節(jié)的窗口大小(只受系統(tǒng)資源的限制),而在程序速度 方面沒有大的變化。因為在本發(fā)明中窗口只由壓縮數(shù)據(jù)組成,關(guān)于未壓縮的數(shù)據(jù)的 窗口的實際大小能變化并超過數(shù)千兆字節(jié)(取決于壓縮程度)。在窗口大小方面驚 人的增加是重要的優(yōu)點,因為它使算法能檢測分隔很大距離的重復(fù)。因此不僅能壓 縮單個文件或?qū)ο?,本發(fā)明能用于壓縮多個文件或?qū)ο笠黄鸬娜我饧希⒁蚨_(dá) 到高得多的壓縮程度。因而本發(fā)明能用于壓縮累積的交互對話的網(wǎng)絡(luò)信息量的連續(xù) 流,其中在不同對象或數(shù)據(jù)包之間的重復(fù)可被大量數(shù)據(jù)隔離。因而本發(fā)明能夠既作 對象內(nèi)部的(本地的)壓縮又作對象之間的(全局的或交互會話的)壓縮而不是只 作對象內(nèi)部的壓縮。本發(fā)明的另外優(yōu)點是它是完全增量的和連續(xù)的。因此,本發(fā)明能應(yīng)用于無限 數(shù)據(jù)流而沒有算法失敗或終止的危險。本發(fā)明增量地處理到達(dá)的輸入并在線性的時 間內(nèi)連續(xù)地產(chǎn)生輸出。本發(fā)明能配置成總是保持在固定大小的系統(tǒng)存儲器內(nèi)并永遠(yuǎn) 不超過此預(yù)置的限制。算法通過動態(tài)地刪除短語和符號并重新使用它們的資源以學(xué) 到新的詞典短語而達(dá)到此連續(xù)和流式的功能。該算法也是自適應(yīng)的并學(xué)到新的詞典短語以適應(yīng)輸入數(shù)據(jù)的變化。IZ算法的此隱含的增量的,連續(xù)的和線性的特性(除 了它實際上無限搜索窗口大小)是獨一無二的特征,它不包括在任何其他的通用無 損壓縮技術(shù)中。本發(fā)明的另外優(yōu)點是它的有效性。本發(fā)明線性地執(zhí)行。即當(dāng)輸入數(shù)據(jù)量增加 時執(zhí)行時間不是非線性地(如指數(shù)地)增加。本發(fā)明的線性度不受程序的增量發(fā)送 和連續(xù)短語/符號刪除組件的影響。線性度也不受從中能檢測重復(fù)的窗口大小的影響。因此,任何輸入流能在正比于輸入大小的時間內(nèi)通過本發(fā)明壓縮。此外,因為本發(fā)明使用短語的分層表示,整個詞典能比其他基于詞典的技術(shù)(如LZ77)更有效地存儲。本發(fā)明只有當(dāng)短語出現(xiàn)多于一次時才將它們加入詞典。因此,詞典項比在LZ78中更好地被利用,后者使用更積極和推測性的詞典結(jié)構(gòu)技術(shù)。本發(fā)明還比其他基于分層規(guī)則的技術(shù)更有效,因為它不需要任何附加的處理來選擇增量發(fā)送點 (如Sequitur的為選擇發(fā)送點的計算量大的算法)。本發(fā)明的隱含的詞典短語的發(fā)送比其他基于指針的技術(shù)(如LZ77和 Sequitur)更有效,因為本發(fā)明不需要使用標(biāo)記或其他方法來計算并發(fā)送對每個指 針的起始位置。由本發(fā)明使用的表示短語和符號的數(shù)據(jù)結(jié)構(gòu)也比由Sequitur使用 的有更高的存儲效率。此外,本發(fā)明的重復(fù)的檢測方法在檢測長的重復(fù)時比 Sequitur更有效,因為當(dāng)重復(fù)的短語被擴(kuò)展時,本發(fā)明不需要連續(xù)地建立和刪除 短語。本發(fā)明是結(jié)合上述四個優(yōu)點的僅有的通用無損壓縮算法,它們是線性速度, 實際上無限的窗口大小,隱含的增量性,和完全連續(xù)的壓縮。這四個優(yōu)點使本發(fā)明 能在以前壓縮尚未被成功地應(yīng)用的廣泛的領(lǐng)域中使用。例如,本發(fā)明能通過檢測和 消除類似的或同樣的對象或數(shù)據(jù)包用于壓縮網(wǎng)絡(luò)數(shù)據(jù)流。本發(fā)明能用于改善在網(wǎng)絡(luò) 中經(jīng)過任何兩個通信節(jié)點的帶寬利用。發(fā)送類似或相同的對象的任何網(wǎng)絡(luò)結(jié)構(gòu)能從 此發(fā)明大大得益。例如,從內(nèi)容提供者發(fā)出的萬維網(wǎng)信息量常包含發(fā)送到不同用戶 的相同的或相似的對象。在此情況,本發(fā)明有用于趨同和壓縮發(fā)送到不同用戶的數(shù) 據(jù),并因而大大地減少了經(jīng)因特網(wǎng)傳輸該數(shù)據(jù)的帶寬需求。解壓縮算法能在靠近終 端用戶處選出壓縮流,并在將該數(shù)據(jù)送到用戶之前將其擴(kuò)展成其原始大小。這將不 僅導(dǎo)致在壓縮方和解壓縮方之間大大降低帶寬的使用,而且導(dǎo)致大大加快了數(shù)據(jù)向 用戶的傳遞。有若干本發(fā)明提供很大應(yīng)用價值的其他網(wǎng)絡(luò)情況,如在壓縮經(jīng)過專線 網(wǎng)或虛擬專線網(wǎng)發(fā)送的數(shù)據(jù)中。此外,本發(fā)明能用于有效地壓縮整個數(shù)據(jù)庫以便更 有效地存儲和發(fā)送。在所有這些情況中,本發(fā)明將提供高于其他壓縮技術(shù)的附加實用價值,因為它能在線性時間內(nèi)達(dá)到對象之間和對象內(nèi)部(交互會話的)壓縮。本發(fā)明在線性時 間內(nèi)運行,使用實際上無限的窗口大小,隱含地是增量的,并能連續(xù)地在無限輸入 流上運行,由于這些事實所有這些應(yīng)用和益處是可能的。雖然本發(fā)明參照較佳實施例和若干另選的實施例己予以特別示出和描述,但 在相關(guān)領(lǐng)域中的技術(shù)人員可以理解,在不背離本發(fā)明的精神和范圍的前提下可以作 出在形式和細(xì)節(jié)方面的各種變化。
權(quán)利要求
1.一種方法,包括在壓縮設(shè)備接收數(shù)據(jù)流;在所接收的數(shù)據(jù)流中檢測重復(fù)的數(shù)據(jù)短語,其中在所述數(shù)據(jù)流中每一數(shù)據(jù)短語包括一組順序數(shù)據(jù)符號;將與所述重復(fù)數(shù)據(jù)短語相關(guān)的一組庫短語發(fā)送到解壓縮設(shè)備;以及在從所述解壓縮設(shè)備接收對于接收到所述一組庫短語的確認(rèn)之前,發(fā)送與所述一組庫短語中任何庫短語相關(guān)的數(shù)據(jù)短語標(biāo)識符。
2. 如權(quán)利要求l所述的方法,還包括其中在接收確認(rèn)之前發(fā)送數(shù)據(jù)短語標(biāo)識符包括在發(fā)送所述數(shù)據(jù)短語標(biāo)識符之前等待一時間間隔;以及即使當(dāng)在所述時間間隔之內(nèi)沒有接收到來自所述解壓縮設(shè)備的確認(rèn)時,也在 所述時間間隔到時后就發(fā)送所述數(shù)據(jù)短語標(biāo)識符。
3. 如權(quán)利要求2所述的方法,還包括從所述解壓縮設(shè)備接收誤差信號,指示所述解壓縮設(shè)備在所述一組庫短語之前接收到所述數(shù)據(jù)短語標(biāo)識符;以及響應(yīng)于所述誤差信號動態(tài)調(diào)節(jié)所述時間間隔。
4. 如權(quán)利要求3所述的方法,還包括動態(tài)調(diào)節(jié)所述時間間隔包括根據(jù)從所述解壓縮設(shè)備接收的多個誤差信號設(shè)置 所述時間間隔。
5. 如權(quán)利要求l所述的方法,還包括設(shè)置表示發(fā)送所述一組庫短語的時間的 時間標(biāo)簽。
6. 如權(quán)利要求l所述的方法,還包括 對所發(fā)送和安裝的短語的總數(shù)保持一計數(shù)器;根據(jù)所保持的計數(shù)器的當(dāng)前值,用本地安裝的計數(shù)器本地標(biāo)記每一庫短語; 對由一壓縮數(shù)據(jù)包中任何數(shù)據(jù)短語標(biāo)識符參照的所有庫短語,用所述本地安 裝的計數(shù)器的最大值標(biāo)記所述壓縮數(shù)據(jù)包;以及 將所述壓縮數(shù)據(jù)包發(fā)送到所述解壓縮設(shè)備。
7. 如權(quán)利要求6的方法,還包括 在所述解壓縮設(shè)備接收所述壓縮數(shù)據(jù)包;確定在所接收的數(shù)據(jù)包上標(biāo)記的最大值大于所保持的計數(shù)器的值;以及響應(yīng)于所述確定發(fā)送誤差信號。
8. —種壓縮設(shè)備,包括壓縮單元,用于接收數(shù)據(jù)流并在所接收的數(shù)據(jù)流中檢測重復(fù)的數(shù)據(jù)短語,其中在所述數(shù)據(jù)流中每一數(shù)據(jù)短語包括一組順序數(shù)據(jù)符號;發(fā)送組件,用于將與所述重復(fù)數(shù)據(jù)短語相關(guān)的一組庫短語發(fā)送到解壓縮設(shè)備, 并在從所述解壓縮設(shè)備接收對于接收到所述一組庫短語的確認(rèn)之前,發(fā)送與所述一 組庫短語中任何庫短語相關(guān)的數(shù)據(jù)短語標(biāo)識符。
9. 如權(quán)利要求8所述的壓縮設(shè)備,其特征在于所述發(fā)送組件在發(fā)送所述數(shù)據(jù) 短語標(biāo)識符之前等待一時間間隔,并且即使當(dāng)在所述時間間隔之內(nèi)沒有接收到來自 所述解壓縮設(shè)備的確認(rèn)時,也在所述時間間隔到時后就發(fā)送所述數(shù)據(jù)短語標(biāo)識符。
10. 如權(quán)利要求9所述的壓縮設(shè)備,其特征在于所述壓縮單元從所述解壓縮 設(shè)備接收誤差信號,指示所述解壓縮設(shè)備在所述一組庫短語之前接收到所述數(shù)據(jù)短 語標(biāo)識符,并且響應(yīng)于所述誤差信號動態(tài)調(diào)節(jié)所述時間間隔。
11. 如權(quán)利要求10所述的壓縮設(shè)備,其特征在于所述壓縮單元根據(jù)從所述解 壓縮設(shè)備接收的多個誤差信號設(shè)置所述時間間隔。
12. 如權(quán)利要求8所述的壓縮設(shè)備,其特征在于所述壓縮單元設(shè)置表示發(fā)送 所述一組庫短語的時間的時間標(biāo)簽。
全文摘要
本發(fā)明提供一種增量和連續(xù)的數(shù)據(jù)壓縮技術(shù)。一種方法,包括在壓縮設(shè)備接收數(shù)據(jù)流;在所接收的數(shù)據(jù)流中檢測重復(fù)的數(shù)據(jù)短語,其中在數(shù)據(jù)流中每一數(shù)據(jù)短語包括一組順序數(shù)據(jù)符號;將與重復(fù)數(shù)據(jù)短語相關(guān)的一組庫短語發(fā)送到解壓縮設(shè)備;以及在從解壓縮設(shè)備接收對于接收到一組庫短語的確認(rèn)之前,發(fā)送與一組庫短語中任何庫短語相關(guān)的數(shù)據(jù)短語標(biāo)識符。
文檔編號H03M7/30GK101277117SQ20081008154
公開日2008年10月1日 申請日期2001年7月18日 優(yōu)先權(quán)日2000年7月25日
發(fā)明者A·P·辛格 申請人:瞻博網(wǎng)絡(luò)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1