<listing id="vjp15"></listing><menuitem id="vjp15"></menuitem><var id="vjp15"></var><cite id="vjp15"></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><menuitem id="vjp15"></menuitem></video></cite>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<menuitem id="vjp15"><strike id="vjp15"></strike></menuitem>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"></strike></var>
<var id="vjp15"></var>
<var id="vjp15"></var>
<var id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></var>
<menuitem id="vjp15"></menuitem><cite id="vjp15"><video id="vjp15"></video></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></cite>
<var id="vjp15"></var>
<var id="vjp15"></var>
<menuitem id="vjp15"><span id="vjp15"><thead id="vjp15"></thead></span></menuitem>
<cite id="vjp15"><video id="vjp15"></video></cite>
<menuitem id="vjp15"></menuitem>

增量和連續的數據壓縮的制作方法

文檔序號:7664444閱讀:831來源:國知局
專利名稱:增量和連續的數據壓縮的制作方法
有關申請本申請要求在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 000b 001c 010d 011e 100f 101g 110h 111表1這使得序列(S)需要總共14×3=42位。另外,因為我們看到在數據中字符“a”出現得更頻繁,可以更有效地用更少的位表示“a”,其代價是對字符表中的其余字符增加位數。例如,8個字符能改成如表2中那樣地表示。
a 0b 1000c 1001d 1010e 1011f 1100g 1101h 1110表2在此情況,字符串S需要1位表示7個“a”字符中每一個,4位表示余下字符的每一個。因而對S所需的總空間是7*1+7*4=35位。這表示節省了超過有百分之16。
有這樣統計編碼技術的各種例子,如Huffman編碼和算術編碼。那樣的方法的更詳細描述在D.A.Huffman的“A Method for the construction ofminimum-redudancy codes”,Proceeding IRE,401098-1101(1952)和Witten,Neal和Cleary的“Arithmetic coding for data compression”Communications of theAssociation for Computing Machinary,30(6)520-540(1987),它們整個被加入于此作為參考。
應用于許多那樣的統計編碼技術的一般原則由Shannon于1948年在下文中提出“A Mathematical Theory of Communication”,Bell System TechnicalJonrnal,27389-403(1948),它作為整體加入于此作為參考。Shannon表示,需要編碼以概率P出現的字符或字符串的位數是-log2P。因此,若8個字符a-h每個以等概率出現,P=1/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 Algorithmfor Sequential Data Compression”,IEEE Transaction of Information Theory,IT-23(3)337-343(1977),它作為整體加入于此作為參考。此廣泛使用的基于詞典的通用壓縮技術稱之為LZ77,并形成若干其他壓縮算法的基礎。例如,廣泛地與基于Unix的操作系統一起發行的“gzip”壓縮程序使用LZ77方法的一個變例。LZ77是根據在固定大小的窗口中將指針用于短語以前的出現。通過穿過輸入序列滑動窗口并搜索在該窗口中的任何重復字符串來尋找數據中重復的短語。例如,考慮在等式(6)中的輸入序列。
S=abcdefbcdgh等式(6)
LZ77方法判定,短語“bcd”重復兩次,并使用此信息壓縮該序列。“bcd”的第一次出現不加修改。第二次出現被從S的起點到“bcd”第一次出現的距離和重復的長度組成的指針所替代。因此,序列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個字符,“bcd”的重復將不被檢測,因為從“bcd”的第一次出現的開始到第二次出現的結束總的距離大于5。在LZ77方法中限制窗口的大小是為了限制搜索重復性所需要的時間。使用LZ77方法的搜索算法的復雜性和執行時間通常是所搜索的輸入字符串的大小的函數。因而,通常傳統的LZ77壓縮技術將窗口大小限制到幾千字符。例如,“gzip”程序使用32K字節的窗口。窗口大小的增加導致LZ77算法執行時間的很大增加。
LZ77壓縮方法的另外的問題是它需要第二階段的統計編碼以提供足夠的壓縮率。由LZ77方法使用的統計編碼技術是非增量的,因而是非連續的(如gzip使用Huffman編碼,它是非增量的)。非增量編碼技術在對一個數據塊輸出編碼樹以前必須完全地處理這塊數據。由非增量技術使用的塊的大小也需足夠大以保證編碼方案產生有效的編碼樹。因而LZ77技術不適合于實時或在線的壓縮,其中有必須被增量地處理的連續流。
LZ77的另一個問題是可能的指針數目很大,因為它們能指向窗口內任何位置。
Ziv和Lempell針對LZ77技術中的某些問題在1978年提出新的壓縮方案,稱之為LZ78。這在下文中描述Ziv和Lempell的“Compression of IndividualSequences Via Variable Rate Coding”,IEEE Transaction on InformationTheory,IT-24(5)530-536(1978),它作為整體被加入于此作為參考。不是使用指向窗口中位置的指針,LZ78方法使用在輸入流中遇到的所有短語的詞典的直接表示。詞典通過建立在以前詞典項之上增量式地構造。每當見到新的短語,在認為它可能以后被使用的前提下,將其加到詞典中。考慮在等式(9)中的輸入序列。
S=cbaabacaccacccacccc 等式(9)LZ78產生短語(0,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)accc7(6,c)acccc 8(7,c)表3因而序列S的最終編碼將是表3中示出的輸出短語列。如在此例能看出,詞典項1,2,4在此編碼中永不使用,因而是詞典中的無用項。例如,雖然對“ac”的詞典項被再使用以增量地產生“acc”,“accc”,和“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的發送點選在發送額外符號的概率低的地方,能使Sequitur看上去象增量的。用于檢測在被壓縮的序列中的某一點是否為發送該序列的安全點的算法需要檢查就在此點以前該符號的所有以前的出現。因為Sequitur需要在輸入序列的整個壓縮中動態地選擇這些點,為了連續地搜索這些發送點,該算法引起大量額外處理。此附加的處理(為使Sequitur成為增量的這是必需的)使得整個壓縮算法是非線性,并因而大大減少了有效性。
Sequitur算法的另外問題是它是不連續的。該算法不提供任何手段來增量地發送被壓縮的輸出而同時刪除不常訪問的規則和符號(為了再使用系統資源)。因此,Sequitur不能應用于無限或很大的輸入數據流,在線性時間內產生被壓縮輸出的連續流。
Sequitur算法還在其使用系統資源方面不太有效,因為它需要復雜的數據結構使能夠作可變長度的規則的頻繁建立及刪除。此外,該算法在刪除長的重復時計算上不太有效,因為在重復的短語中的每對符號需要規則的建立和刪除。因此,重復的每個附加的出現會招致多次規則的建立和刪除的計算上的過度開銷。為了將規則的第二次出現作為指針發送,Sequitur的技術也需要額外的處理與存儲開銷。
第四個壓縮算法是遞歸配對(Re-Pair)算法,它在下文中描述,Larsson和Moffat的“Offline Dictionary-Based Compression”,Proceeding DataCompression 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通過建立新的詞典短語P1且將其設成等于XY,過程繼續。在此例中P1設成等于“cd”。然后XY的以前出現在314中在S’由P1替代。注意,此替代步驟314導致從散列表去除兩個項并將兩個新的項加到散列表。這些散列表更新包括X以前的符號(稱為Xp)和Y之后的符號(稱為Yn)。因為XY從S’中去除,符號對XpX和YYn必須也從散列表中去除。因為XY被Pi替代,符號對XpPi和PiYn必須加到散列表。在此例子中,“bc”和“dc”從散列表被去除,“bP1”和“P1c”被加到散列表。然后,在316 Y從S’的末端去除,在318 X從S’的末端去除。而且,在318 X從S’的末端去除將導致符號對(對應于X前的符號及X)從散列表去除。在此例子中,“P1c”將從散列表去除。然后Y被設成等于P1,且在步驟304過程繼續。在此點該例的狀態是S’=abP1且Y等于P1。
然后在304 Y附于S’之后(現在S’=abP1P1)且在306 X被設成等于在S’中Y前的符號(“P1”)。在308,序列中XY(P1P1)未出現,所以XY在309被加到散列表,過程在步驟302處重復。在圖4的第6行用S’=abP1P1示出在此點該例子的狀態。
然后在302 Y被設成下一個符號“a”,在304附在S’之后,在306 X被設成Y之前的符號(“P1”)。在308 XY的組合(P1a)以前未出現,所以在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’由P2替代。如之前,該步驟導致從散列表去除兩個符號并加上兩個符號。然后,在316 Y從S’的末端去除,在318 X從S’的末端去除(這也導致從散列表去除一個符號對)。然后Y被設成等于P2,且在步驟304過程繼續。在此點該例的狀態是S’=P2P1P1,且Y等于P。
然后在304 Y附于S’之后(現在S’=P2P1P1P2)且在306 X被設成等于在S’中Y前的符號(在此情況它實際上是數據短語標識符“P1”)。在308,序列XY(P1P2)未出現,所以在309 XY被加到散列表,過程在步驟302處重復。在圖4的第8行用S’=P2P1P1P2示出在此點該例子的狀態。
然后在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被設成等于P1。過程在步驟304繼續。在這點此例的狀態是S’=P2P1P1P2且Y等于P1。
然后在304 Y附于S’之后(現在S’=P2P1P1P2P1),且在306 X設成等于在S’中Y之前的符號(“P2”)。XY的組合(P2P1)在序列中以前已出現且因為XY不等于詞典短語310的右端項,通過在312建立新的詞典短語P3并將其設成等于XY,過程繼續。在此例中,P3被設成等于“P2P1”。然后在314 XY在序列S’以前的出現由P3所替代。然后在316 Y從S’的末端除去,在318 X從S’的末端除去。隨后Y被設成等于P3,過程在步驟304繼續,在此點上本例的狀態是S’=P3P1而Y等于P3。
隨后在304 Y附在S’之后(現在S’=P3P1P3)且X在306被設成等于S’中Y之前的符號(“P1”)。在308 XY(P1P3)在序列中以前未出現,所以在309 XY被加到散列表且過程在步驟302重復。圖4中的第10行用S’=P3P1P3示出在此點本例的狀態。過程能對任何數目的輸入繼續。
本發明能檢測在輸入流中任何處的重復。本發明不需要直接的搜索窗口,且因而能夠檢測重復性而不論重復發生得多遠。也應用某些加窗口技術使得該算法如下述那樣繼續,但是此窗口是基于系統存儲器的大小且不影響該算法的速度。上述算法已示出在時間和空間上是線性的。線性度的證明是根據計算處理長度n的序列所需的總操作數。此數示作為0(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判定,該符號是否為對如Pi那樣的詞典短語號的參照,若符號是那樣的參照,解壓縮單元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被設成等于P1在第4行中的第二次出現。
符號繼續被接收及累積而不發送,直到接收到圖7中第10行的序列。此時,第二個短語被加到詞典(P2=P1c)。在加入第二短語之前,發送組件204在504將發送從指針(T)到S’的末端所有S’中的符號。在此例中,發送符號“P1cP1c”。新短語在S’中的出現在506中按圖3中描述的技術替代,且指針(T)在508被設成新加入短語的末端。在此例中,T被設成等于在圖7的第10行中示出的S’中的第二個P2。此過程對任何數量的數據繼續。
上面發送過程隱含地同步了壓縮和解壓縮詞典并保證解壓縮單元總能解參照它接收的每個詞典短語。本發明的另一個實施例使用直接的詞典發送過程以保證所有短語的可解壓縮性。此另外的發送過程是基于將短語在獨立而并行的通信信道中發送到解壓縮算法。每當壓縮算法發現新的詞典短語,它被加上標記“installed=0”,指出該短語尚未被安裝在解壓縮詞典中。此新的短語號和它的內容經可靠的傳輸信道被發送到解壓縮單元。解壓縮算法對每個它收到的規則送回確認。當壓縮算法對短語收到確認,它在該短語上設置標記“installed=1”,指出該短語已被接收并安裝在解壓縮詞典中。在由壓縮算法發送任何短語之前,該算法校驗“installed”標記。若installed等于0,即FALSE(假),則發送該短語的內容。注意,當短語的內容被發送時,該算法也必須遞歸地對在這些內容中的任何嵌入短語校驗installed標記。若installed等于1,即TRUE(真),發送短語本身。通過使用此另外的直接詞典發送過程,壓縮算法能同步兩個詞典并保證解壓縮算法永不會接收不能解參照的短語。此方法還顯著地改變了解壓縮算法的結構。因為在此方法中詞典短語直接發送到解壓縮算法,它不需要從數據流中發現這些短語。因此,解壓縮算法只需要解參照(即解壓縮)它接收的數據并不需要處理通過壓縮算法的短語檢測器和刪除組件的數據(在以前描述的隱含詞典同步實施例中是必須的)。還注意到,在此直接詞典發送模型中,詞典同步不需要被壓縮的數據在可靠的傳輸信道(即保證按順序遞交所有數據包的信道)中發送。因為被壓縮的數據不用于隱含地同步詞典,在壓縮單元和解壓縮單元之間的數據的丟失或數據提交次序紊亂將不導致不一致的詞典,從而不導致不精確的解壓縮。
在上述直接詞典中,同步技術能以各種方法進一步優化。例如,只有遇到大于“N”次的短語能選擇由壓縮算法發送。設N=1,將導致所有短語被發送,并因此提供最大的壓縮和最快的收斂。但同時,為同步兩個詞典所需的附加帶外詞典發送通信量也將最大。當N增加時,壓縮和收斂將降低,但額外的帶外詞典同步通信量也將降低。因而N能根據所遇到的通信量的類型動態地選擇以便使總的輸出通信量最小。而且,若有任何與發送單獨詞典短語更新有關的開銷,可以緩存多個短語并作為單個數據包一起發送。
上述直接詞典發送模型也能通過從解壓縮算法對每個由壓縮算法發送的詞典更新消除確認的需要而優化。在上面實施例中,壓縮單元必須從解壓縮單元接收“短語收到”的確認,以便將對該短語的“installed”標記從0(即假)改到1(即真),并從而允許壓縮算法能在未來的壓縮中使用該短語。此過程保證由壓縮單元在被壓縮的數據中發送的所有短語參照能由解壓縮單元解參照以產生該短語的原始內容。在直接詞典發送模型的另一個實施例中,在預定但動態調節的時間間隔之后,壓縮算法自動地將對新發送的短語的installed標記從0改變到1。當短語從壓縮單元(經獨立可靠的詞典傳輸信道)發送時,它被本地標記一時間標簽(t0)指出發送的時間。同時對被發送的短語的“installed”標記被初始化成0。在預定的時間間隔(T)以后,該短語的“installed”標記從0改變成1,從而允許壓縮算法使用該短語于未來的壓縮。此詞典發送模式推測,若短語的更新在時間t0從壓縮單元發送到解壓縮單元,則任何使用此短語并從壓縮單元在時間t0+T之后發送的被壓縮數據在短語更新之后到達解壓縮單元。時間間隔T能考慮到在壓縮和解壓縮單之間數據發送的速率和等待時間的可變性加以調節。此推測的詞典發送模型改進了壓縮的程度,因為它允許壓縮單元在短語的更新被發送之后開始使用短語T秒,而不必等待從解壓縮單元來的對該短語的確認。從而短語更快地成為可用,它產生更高的壓縮。
因為上述推測的詞典發送模型是基于在壓縮和解壓縮單元之間發送時間變化的估計,有可能在特定的短語的內容經由獨立的詞典同步信道被接收之前,解壓縮單元接收在被壓縮數據中的該短語的參照。當發生此情況時,解壓縮單元發送信號給壓縮單元,指出它(解壓縮單元)在經由詞典更新信道接收短語內容之前經數據信道接收到該短語。壓縮單元使用從解壓縮單元來的這些誤差信號適本地調節在發送新短語和將該短語的installed標記改成1之間的時間間隔(T)。
上面推測詞典發送模型的另一個組件是當解壓縮算法接收到它不能精確地解參照的短語時它應能檢測。這能用許多方法達到。推測的詞典發送模型的一個實施例對在壓縮單元和解壓縮單元中發送和安裝的短語的總數保持一個計數器。因為所有短語有序地發送和接收(由于它們經由可靠的傳輸信道發送),這些計數器能用于檢測在短語的內容經由詞典同步信道接收之前是否解壓縮信道經數據信道收到該短語的參照。在壓縮單元的每個短語根據被安裝的計數器的當前值用“本地安裝的計數器”本地標記。每個從壓縮單元發送的壓縮的數據包,對在壓縮數據包中參照的所有短語用“本地安裝的計數器”的最大值標記。
此“最大安裝計數器”指出在壓縮的數據包中使用的最近“安裝”的短語。當解壓縮單元接收被壓縮的數據包時,通過校驗“最大安裝計數器”是否大于其自己當前的安裝計數器來檢測該數據包是否包含非可解參照的短語。若是這樣情況,則在壓縮的數據包內至少存在一個解壓縮單元尚未收到其更新的內容的短語。此事件隨后被用于啟動上述反饋機制以發送誤差信號給壓縮單元。用于計數發送和安裝短語數的計數器最終能達到其最大值并返回到零。借助保證超過當前安裝計數器的任何“本地安裝的計數器”被復位到某個初始值(可能為0)來處理此情況。系統還保證,當發送計數器達到其最大值時,在對應于最大的計數器值的短語被壓縮單元確認,壓縮單元才發送任何新的短語更新。因而發送的解壓縮單元除了對應于最大接收的計數器的短語更新以外不需要確認任何被接收的短語更新。
如上所述,為了使壓縮技術在無窮盡的數據上連續地工作而不需要大的系統資源,壓縮系統和技術應有效地可行地刪除短語和符號以減少詞典的大小。本發明達到了此目標。即因為短語詞典和被壓縮的序列S’使用系統資源(如系統存儲器)保持它們的狀態信息,為了保證本發明能在無限的數據流上連續地運行,必須提供有效的方法來從詞典中刪除老的短語并刪除被壓縮的序列S’的最老的部分。若這些“忘記”(刪除)措施不具備,該算法最終將用完系統資源并必須終止。
因為短語是分層的(即短語能包含輸入字(符號)或對其他短語(數據短語標識符)的參照),不可能簡單地刪除短語而不管它是否被更高層短語參照。例如,若短語Pi被Pj參照(如Pj=Pia),且Pi被刪除,則Pj的任何未來使用將導致錯誤。因而,必須判定的不僅是哪個短語能刪除,而且還要保證參照這些短語的所有短語也被刪除。本發明通過在“最近最少使用(LRU)”的數據結構中表示所有短語來解決所有這些問題。在本發明的一個實施例中LRU作為鏈表實現,并每當在壓縮期使用短語時使用LRU有效地將其移到表的前端。因而,若短語“Pi=ab”在LRU的中間且符號ab出現在輸入流中,則Pi從它在表的當前位置去除并附到該表當前前端(或頭部)。建立的新短語也放在表的當前前端(或頭部)。因而,在算法的任何點,在表的末端(或尾部)的短語是最近最少使用的短語。若必須刪除短語以釋放系統資源再度使用,則最近最少使用的短語將是首先要刪除的。
雖然能使用LRU識別哪個短語要刪除,但它沒有指出哪個較高層短語參照此短語,因而也必須刪除。本發明通過要求每個短語保持一個“父指針”來解決此問題,它總是保持該短語最近一次被參照的軌跡。例如,若Pi最近被Pj參照,而Pj最近被壓縮的字符串S’參照,則Pi應包含到Pj的父指針,而Pj應包含指向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個字節邊界上發生的重復(即由一系列字節數分離的重復,而字節數不是4的倍數)。
在短語檢測算法中使用的散列函數和表是靈活的。它們能優化成最適合于被壓縮數據的類型。
用于短語LRU和壓縮序列S’的鏈表能作為單鏈表或雙鏈表實現。如陣列那樣的其他數據結構也能使用并能提供更好的存儲器使用。
如上所述,本發明是有效的壓縮算法,它能檢測并消除在實際上無限大小窗口內可變長度的重復短語。窗口的大小只受可用的系統存儲器的大小的限制,并不影響算法的速度。不是使用在LZ77壓縮技術中常用的幾千字節的窗口大小,本發明能使用從數十到數千兆字節的窗口大小(只受系統資源的限制),而在程序速度方面沒有大的變化。因為在本發明中窗口只由壓縮數據組成,關于未壓縮的數據的窗口的實際大小能變化并超過數千兆字節(取決于壓縮程度)。在窗口大小方面驚人的增加是重要的優點,因為它使算法能檢測分隔很大距離的重復。因此不僅能壓縮單個文件或對象,本發明能用于壓縮多個文件或對象一起的任意集合,并因而達到高得多的壓縮程度。因而本發明能用于壓縮累積的交互對話的網絡信息量的連續流,其中在不同對象或數據包之間的重復可被大量數據隔離。因而本發明能夠既作對象內部的(本地的)壓縮又作對象之間的(全局的或交互會話的)壓縮而不是只作對象內部的壓縮。
本發明的另外優點是它是完全增量的和連續的。因此,本發明能應用于無限數據流而沒有算法失敗或終止的危險。本發明增量地處理到達的輸入并在線性的時間內連續地產生輸出。本發明能配置成總是保持在固定大小的系統存儲器內并永遠不超過此預置的限制。算法通過動態地刪除短語和符號并重新使用它們的資源以學到新的詞典短語而達到此連續和流式的功能。該算法也是自適應的并學到新的詞典短語以適應輸入數據的變化。IZ算法的此隱含的增量的,連續的和線性的特性(除了它實際上無限搜索窗口大小)是獨一無二的特征,它不包括在任何其他的通用無損壓縮技術中。
本發明的另外優點是它的有效性。本發明線性地執行。即當輸入數據量增加時執行時間不是非線性地(如指數地)增加。本發明的線性度不受程序的增量發送和連續短語/符號刪除組件的影響。線性度也不受從中能檢測重復的窗口大小的影響。因此,任何輸入流能在正比于輸入大小的時間內通過本發明壓縮。此外,因為本發明使用短語的分層表示,整個詞典能比其他基于詞典的技術(如LZ77)更有效地存儲。本發明只有當短語出現多于一次時才將它們加入詞典。因此,詞典項比在LZ78中更好地被利用,后者使用更積極和推測性的詞典結構技術。本發明還比其他基于分層規則的技術更有效,因為它不需要任何附加的處理來選擇增量發送點(如Sequitur的為選擇發送點的計算量大的算法)。
本發明的隱含的詞典短語的發送比其他基于指針的技術(如LZ77和Sequitur)更有效,因為本發明不需要使用標記或其他方法來計算并發送對每個指針的起始位置。由本發明使用的表示短語和符號的數據結構也比由Sequitur使用的有更高的存儲效率。此外,本發明的重復的檢測方法在檢測長的重復時比Sequitur更有效,因為當重復的短語被擴展時,本發明不需要連續地建立和刪除短語。
本發明是結合上述四個優點的僅有的通用無損壓縮算法,它們是線性速度,實際上無限的窗口大小,隱含的增量性,和完全連續的壓縮。這四個優點使本發明能在以前壓縮尚未被成功地應用的廣泛的領域中使用。例如,本發明能通過檢測和消除類似的或同樣的對象或數據包用于壓縮網絡數據流。本發明能用于改善在網絡中經過任何兩個通信節點的帶寬利用。發送類似或相同的對象的任何網絡結構能從此發明大大得益。例如,從內容提供者發出的萬維網信息量常包含發送到不同用戶的相同的或相似的對象。在此情況,本發明有用于趨同和壓縮發送到不同用戶的數據,并因而大大地減少了經因特網傳輸該數據的帶寬需求。解壓縮算法能在靠近終端用戶處選出壓縮流,并在將該數據送到用戶之前將其擴展成其原始大小。這將不僅導致在壓縮方和解壓縮方之間大大降低帶寬的使用,而且導致大大加快了數據向用戶的傳遞。有若干本發明提供很大應用價值的其他網絡情況,如在壓縮經過專線網或虛擬專線網發送的數據中。此外,本發明能用于有效地壓縮整個數據庫以便更有效地存儲和發送。
在所有這些情況中,本發明將提供高于其他壓縮技術的附加實用價值,因為它能在線性時間內達到對象之間和對象內部(交互會話的)壓縮。本發明在線性時間內運行,使用實際上無限的窗口大小,隱含地是增量的,并能連續地在無限輸入流上運行,由于這些事實所有這些應用和益處是可能的。
雖然本發明參照較佳實施例和若干另選的實施例已予以特別示出和描述,但在相關領域中的技術人員可以理解,在不背離本發明的精神和范圍的前提下可以作出在形式和細節方面的各種變化。
權利要求
1.一種用于壓縮數據流的方法,包括下列步驟接收具有多個數據符號的數據流;識別第一數據短語作為第一重復短語,所述的第一數據短語是第一數據項和至少第二數據項的組合,若所述第一數據短語匹配第一庫短語,則所述第一庫短語是在短語庫中多個庫短語之一;若所述第一數據短語被識別為所述第一重復短語,則將所述第一數據短語用與所述第一庫短語相關的第一數據短語標識符替代以產生壓縮數據流;若第一數據短語不匹配所述多個庫短語的任何一個,則所述第一數據短語作為第二庫短語存儲。若所述第一數據短語沒有識別為所述第一重復短語,則將所述第一數據短語用與所述第二庫短語相關的第二數據短語標識符替代,以產生壓縮數據流;和發送所述壓縮數據流,同時還接收在所述數據流中的附加數據符號;其中每個所述的數據短語包括固定數目的數據項;其中每個所述的數據項是數據符號和數據短語標識符中之一。
2.如權利要求1的方法,其特征在于在每個所述庫短語中數據項的固定數目是2。
3.如權利要求1的方法,其特征在于所述數據流的值在接收之前未知,其中所述壓縮的數據流不損失任何數據,且其中壓縮方法對具有任何長度的數據流操作。
4.如權利要求1的方法,其特征在于僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才作為第二庫短語被存儲;且其中僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才用所述第二數據短語標識符替代。
5.如權利要求4的方法,其特征在于還包括下述步驟發送庫短語,包括下列步驟識別尚未被發送的第一組庫短語;與所述第一組中所述庫短語中任何一個相關的數據短語標識符作為所述的壓縮數據流被發送之前,發送所述第一組庫短語。
6.如權利要求5的方法,其特征在于還包括下述步驟根據第一準則刪除所述多個庫短語的第三庫短語。
7.如權利要求6的方法,其特征在于所述第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
8.如權利要求7的方法,其特征在于還包括下述步驟當所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
9.如權利要求4的方法,其特征在于還包括下列步驟接收所述的壓縮數據流;和根據所述的壓縮數據流確定所述庫短語。
10.如權利要求1的方法,其特征在于還包括下述步驟發送庫短語,包括下列步驟識別尚未被發送的第一組庫短語;與所述第一組的所述庫短語的任一個相關的數據短語標識符作為所述的壓縮數據流被發送之前,發送所述的第一組庫短語。
11.如權利要求10的方法,其特征在于還包括下述步驟根據第一準則刪除所述多個庫短語的第三庫短語。
12.如權利要求11的方法,其特征在于所述第一準則是第一時間周期終止的準則,在此期間所述第一庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
13.發權利要求12的方法,其特征在于還包括下述步驟當所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
14.如權利要求1的方法,其特征在于還包括下列步驟接收所述的壓縮數據流;和根據所述的壓縮數據流確定所述庫短語。
15.如權利要求1的方法,其特征在于還包括下述步驟根據第一準則刪除所述多個庫短語的第三庫短語。
16.如權利要求15的方法,其特征在于所述第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
17.一種用于壓縮數據流的系統,包括接收裝置,用于接收具有多個數據符號的數據流;識別裝置,用于識別第一數據短語作為第一重復生語,所述第一數據短語是第一數據項和至少第二數據項的組合,若所述第一數據短語匹配第一庫短語,則所述第一庫短語是在短語庫中多個庫短語之一;第一替代裝置,用于若所述第一數據短語被識別為所述第一重復短語,則將所述第一數據短語用與所述第一庫短語相關的第一數據短語標識符替代以產生壓縮數據流;第一存儲裝置,用于若第一數據短語不匹配所述多個庫短語的任何一個,則將所述第一數據短語作為第二庫短語存儲;第二替代裝置,用于若所述第一數據短語沒有識別為所述第一重復短語,則將所述第一數據短語用與所述第二庫短語相關的第二數據短語標識符替代,以產生壓縮數據流;和發送裝置,用于發送所述壓縮數據流,同時還接收在所述數據流中的附加數據符號;其中每個所述的數據短語包括固定數目的數據項;其中每個所述的數據項是數據符號和數據短語標識符中之一。
18.如權利要求17的系統,其特征在于在每個所述庫短語中數據項的固定數目是2。
19.如權利要求17的系統,其特征在于所述數據流的值在接收之前未知,其中所述壓縮數據流不損失任何數據,且其中壓縮方法對具有任何長度的數據流操作。
20.如權利要求17的系統,其特征在于僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才作為第二庫短語被存儲;且其中僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才用所述第二數據短語標識符替代。
21.如權利要求20的系統,其特征在于還包括短語識別裝置,用于識別尚未被發送的第一組庫短語;短語發送裝置,用于在與所述第一組中所述庫短語中任何一個相關的數據短語標識符作為所述的壓縮數據流被發送之前,發送所述第一組庫短語。
22.如權利要求21的系統,其特征在于還包括短語刪除裝置,用于根據第一準則刪除所述多個庫短語的第三庫短語。
23.如權利要求22的系統,其特征在于所述第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
24.如權利要求23的系統,其特征在于所述的刪除裝置在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
25.如權利要求20的系統,其特征在于還包括接收裝置,用于接收所述的壓縮數據流;和庫建立裝置,用于根據所述的壓縮數據流確定所述庫短語。
26.如權利要求17的系統,其特征在于還包括短語識別裝置,用于識別尚未被發送的第一組庫短語;短語發送裝置,用于在與所述第一組的所述庫短語的任一個相關的數據短語標識符作為所述的壓縮數據流被發送之前,發送所述的第一組庫短語。
27.如權利要求26的系統,其特征在于還包括短語刪除裝置,用于根據第一準則刪除所述多個庫短語的第三庫短語。
28.如權利要求27的系統,其特征在于所述的第一準則是第一時間周期走完的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
29.如權利要求28的系統,其特征在于所述的短語刪除裝置在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
30.如權利要求17的系統,其特征在于還包括接收裝置,用于接收所述壓縮數據流;和庫建立裝置,用于根據所述的壓縮數據流確定所述庫短語。
31.發權利要求17的系統,其特征在于還包括短語刪除裝置,用于根據第一準則刪除所述多個庫短語的第三庫短語。
32.如權利要求31的系統,其特征在于所述的第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
33.如權利要求32的系統,其特征在于所述的短語刪除裝置在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
34.一種用于壓縮數據流的系統,包括數據接收器,用于接收具有多個數據符號的數據流;具有多個庫短語的短語庫;連接到所述數據接收器的刪除單元,包括第一識別單元,用于識別第一數據短語作為第一重復短語,所述第一數據短語是第一數據項和至少第二數據項的組合,若所述第一數據短語匹配第一庫短語,則所述第一庫短語是在短語庫中多個庫短語之一;庫建立單元,用于若第一數據短語不匹配所述多個庫短語的任何一個,則將所述第一數據短語作為第二庫短語存儲;替代單元,用于若所述第一數據短語被識別為所述第一重復短語,則將所述第一數據短語用與所述第一庫短語相關的第一數據短語標識符替代以產生壓縮數據流,并用于若所述第一數據短語沒有識別為所述第一重復短語時,則將所述第一數據短語用與所述第二庫短語相關的第二數據短語標識符替代,以產生壓縮的數據流;和發送單元,用于發送所述壓縮數據流,同時還接收在所述數據流中的附加數據符號;其中每個所述的數據短語包括固定數目的數據項;其中每個所述的數據項是數據符號和數據短語標識符中之一。
35.如權利要求34的系統,其特征在于每個所述庫短語中數據項的固定數目是2。
36.如權利要求34的系統,其特征在于所述數據流的值在接收之前未知,其中所述壓縮的數據流不損失任何數據,且其中壓縮方法對具有任何長度的數據流操作。
37.如權利要求34的系統,其特征在于僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才作為第二庫短語被存儲;且其中僅當所述第一數據短語在數據流的第一部分中出現固定次數時,所述第一數據短語才用所述第二數據短語標識符替代。
38.如權利要求37的系統,其特征在于還包括庫短語識別器,用于識別尚未被發送的第一組庫短語;庫發送器,用于在與所述第一組中所述庫短語中任何一個相關的數據短語標識符作為所述的壓縮數據流被發送之前,發送所述第一組庫短語。
39.如權利要求38的系統,其特征在于還包括刪除單元,用于根據第一準則刪除所述多個庫短語的第三庫短語。
40.如權利要求39的系統,其特征在于所述第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中中所述第三數據短語未被參照。
41.如權利要求40的系統,其特征在于所述的刪除單元在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
42.如權利要求37的系統,其特征在于還包括接收單元,用于接收所述壓縮數據流;和庫確定單元,用于根據所述的壓縮數據流確定所述庫短語。
43.如權利要求34的系統,其特征在于還包括庫短語識別器,用于識別尚未被發送的第一組庫單元。庫發送器,用于在與所述第一組中的所述庫短語的任一個相關的數據短語標識符作為所述壓縮數據流被發送之前,發送所述的第一組庫短語。
44.如權利要求43的系統,其特征在于還包括刪除單元,用于根據第一準則刪除所述多個庫短語的第三庫短語。
45.如權利要求44的系統,其特征在于所述的第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
46.如權利要求45的系統,其特征在于所述刪除單元在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
47.如權利要求34的系統,其特征在于還包括接收單元,用于接收所述壓縮數據流;和庫確定單元,用于根據所述壓縮數據流確定所述庫短語。
48.如權利要求34的系統,其特征在于還包括刪除單元,用于根據第一準則刪除所述多個庫短語的第三庫短語。
49.如權利要求48的系統,其特征在于所述的第一準則是第一時間周期終止的準則,在此期間所述第三庫短語未被參照,并接收第一數量的符號,其中所述第三數據短語未被參照。
50.如權利要求49的系統,其特征在于所述刪除單元在所述第四庫短語包括所述第三庫短語時,刪除第四庫短語。
全文摘要
一種數據壓縮系統及方法,它能在實際上無限大小的窗口中刪除(202)和消除(206)可變長度的重復短語。
文檔編號H04L29/06GK1630984SQ01816213
公開日2005年6月22日 申請日期2001年7月18日 優先權日2000年7月25日
發明者A·P·辛格 申請人:派里比特網絡股份有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韩国伦理电影