亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

與串搜索交錯進行即時字典更新的數(shù)據(jù)壓縮和解壓縮系統(tǒng)的制作方法

文檔序號:7533221閱讀:175來源:國知局
專利名稱:與串搜索交錯進行即時字典更新的數(shù)據(jù)壓縮和解壓縮系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及基于字典的數(shù)據(jù)壓縮和解壓縮,具體地涉及更新壓縮和解壓縮字典所用的方式。
稱為LZ2的Lempel-Ziv(LZ)算法為用途廣泛的基于字典的數(shù)據(jù)壓縮和解壓縮系統(tǒng)提供了理論基礎(chǔ)。在題目為“通過變速率編碼進行單個序列的壓縮”一文中描述了LZ2,作者為Jacob Ziv和Abraham Lempel,出版于1978年9月的IEEE信息理論匯刊第IT-24卷第5期第530-536頁。稱為LZW的一種普遍運用的數(shù)據(jù)壓縮和解壓縮系統(tǒng),被采用為V.42雙工調(diào)制解調(diào)器壓縮和解壓縮的標準,在Welch的美國專利4,558,302中敘述,發(fā)布于1985年12月10日。LZW還被采納為GIF和TIFF圖象通信標準中所用的壓縮和解壓縮方法。LZ2的一種變化的方式,在Storer的美國專利4,876,541中敘述,發(fā)布于1989年10月24日。敘述基于LZ字典的壓縮和解壓縮系統(tǒng)的更進一步的例子有Eastman等的美國專利4,464,650,發(fā)布于1984年8月7日;Miller等的美國專利4,817,746,發(fā)布于1989年3月21日;Clark的美國專利5,153,591,發(fā)布于1992年10月6日;以及Lempel等的歐洲專利申請公開,公開號0573208A1,公開于1993年12月8日。
在上述系統(tǒng)中,輸入字符數(shù)據(jù)流逐個字符地與存儲在字典中的字符串相比較,進行匹配。典型地,不斷進行逐個字符的比較,直到確定最長的匹配。根據(jù)匹配,輸出一個壓縮碼并且利用一個或多個附加字符串更新字典。在Stover的專利(541號)中,通過連接當前最長匹配字符串中的所有非0前綴與先前的最長匹配字符串來更新字典。這樣,如果在當前最長匹配中有N個字符,則在確定當前最長匹配之后,有N個字符串被加到字典中。在Stover的專利中,它被稱為全前綴(AP)更新技術(shù)。
另一種數(shù)據(jù)壓縮和解壓縮方法被表述為行程長度編碼(RLE)。RLE算法通過提供一個表明字符或字符組的壓縮碼以及其行程長度來壓縮一個重復的字符或字符組行程。RLE在對相同字符或字符組的長行程進行編碼時很有效。例如,RLE在壓縮一個可能包含于數(shù)據(jù)文件開頭的由空格形成的長序列時很有效。在圖象壓縮中,如果圖象中包含一連續(xù)的、具有相同值的象素點長行程時,例如在一個陸地-天空圖象中的天空部分,RLE也很有效。
上面討論的基于LZ字典的壓縮解壓縮算法在壓縮重復字符或字符組的長行程時不是特別有效。即使使用AP更新技術(shù),也需要大量的壓縮碼輸出值來壓縮一個長行程。
傳統(tǒng)上,通過把數(shù)據(jù)應用在一個行程長度編碼器,并且把這個行程長度編碼數(shù)據(jù)應用在基于LZ字典的系統(tǒng)來克服這種基于字典系統(tǒng)的缺陷。在以上結(jié)構(gòu)中,在基于字典的壓縮裝置前端運用一個行程長度編碼器,并且在基于字典的解壓縮裝置的輸出端運用一個行程長度長度解碼器。該系統(tǒng)具有以下缺陷增加設(shè)備、費用、控制開銷和處理時間。
本發(fā)明體現(xiàn)于一個克服了上述缺陷的數(shù)據(jù)壓縮和解壓縮系統(tǒng)。如果在一個字典中存在一個串A,于是將串AAA...A編碼為兩個壓縮編碼符號,而不考慮它的長度。這樣,重復字符構(gòu)成的串,如空格和0,或者例如具有相同數(shù)值的連續(xù)象素的字符組,可以在第一次遇到時非常有效地編碼。
在本發(fā)明的壓縮算法中,當每個輸入字符被讀入和匹配時,一個串被輸入到壓縮字典中。傳統(tǒng)地,當完成最長匹配時,一個更新的字符串或多個字符串被輸入到字典中,并確定輸出壓縮編碼符號。算法的操作同下面所述。每一次,一部分串W和字符C在字典中被找到,一個新的串被輸入到字典中,通過C作為串PW中的一個擴展字符,其中P是在上次傳送的壓縮編碼符號中傳送的串。這樣,當串W被匹配之后,當它們在串搜索過程中被匹配時,字符串P被字符W擴展。這也許會被稱作“實時在線”字典更新,這里,字典更新是即時的并與串搜索過程逐字符交替進行。輸入與存儲串W的逐字符匹配完成以后,每一個匹配字符被附加到不斷增長的串PW之后。當輸入數(shù)據(jù)字符與字典中的最長串W相匹配時,更新過程結(jié)束。
當被匹配的串W與先前匹配的串P相一致時,就實現(xiàn)了上面敘述的行程長度編碼的優(yōu)點。在這種情況下,壓縮裝置傳送一個壓縮編碼符號,解壓縮裝置不能認出該符號。解壓縮裝置運用一個不被認出的編碼過程來保持與壓縮字典的同步,這個過程基于當前指派的解壓縮編碼,未認出的編碼,先前解碼的串和先前解碼的串中的字符數(shù)。


圖1是用于體現(xiàn)本發(fā)明的數(shù)據(jù)壓縮子系統(tǒng)的概要框圖。
圖2是為恢復圖1中壓縮裝置的壓縮編碼輸出的一個數(shù)據(jù)解壓縮子系統(tǒng)的概要框圖。
圖3a是表示圖1和圖2中字典搜索樹中節(jié)點的一個有代表性的數(shù)據(jù)結(jié)構(gòu)圖。
圖3b是表示圖1和圖2中字典搜索樹中節(jié)點的實際數(shù)據(jù)結(jié)構(gòu)的示意圖。
圖4是一個節(jié)點概要圖,按照圖3a中數(shù)據(jù)結(jié)構(gòu)來表示圖1和圖2中字典搜索樹中的一個節(jié)點。
圖4a概要說明搜索樹的一部分,表示運用圖4中節(jié)點進行數(shù)據(jù)存儲。
圖5是一個節(jié)點概要圖,按照圖3b的數(shù)據(jù)結(jié)構(gòu)來表示圖1和圖2中字典搜索樹中的一個節(jié)點。
圖5a概要說明搜索樹的一部分,該搜索樹運用圖5中的節(jié)點并存儲與圖4a相同的串。
圖6是一個控制流程圖,表示由圖1中的壓縮子系統(tǒng)按本發(fā)明進行壓縮操作。圖6中的流程圖基于用全部單一字符串來初始化壓縮字典。
圖7是一個控制流程圖,表示用圖2中的解壓縮子系統(tǒng)來執(zhí)行的操作,目的是解壓縮按照圖6產(chǎn)生的壓縮編碼。圖7中的流程圖基于用全部單一字符串來初始化解壓縮字典。
圖8是一個控制流程圖,表示圖7和圖10中的未識別編碼處理過程。
圖9是一個與圖6相似的控制流程圖,但它是基于非初始化的壓縮字典。
圖10是一個與圖7相似的控制流程圖,但它是基于一個非初始化的解壓縮字典。圖10中的解壓縮流程圖解壓縮按照圖9產(chǎn)生的壓縮編碼。
圖11a-11e概要表示搜索樹的一部分,表示壓縮一個典型的輸入數(shù)據(jù)字符流時,壓縮字典的連續(xù)狀態(tài)。
圖12a-12g概要表示搜索樹的一部分,表示輸入數(shù)據(jù)字符流是一個重復的字符組時,壓縮字典的連續(xù)狀態(tài)。
參照圖1,圖1表示一個數(shù)據(jù)壓縮子系統(tǒng)10,它把施加在輸入端11的一個輸入數(shù)據(jù)字符信號流壓縮為輸出端12的一個相應的壓縮編碼信號流。用一個諸如RAM或CAM之類的存儲器來起到存儲字符串的字典13的作用,一般是按照上述參考文獻中所描述的方式。字符串存儲在一個搜索樹數(shù)據(jù)庫結(jié)構(gòu)中,其方式易于理解。搜索樹是由存儲在字典13的存儲單元中的相互連接的節(jié)點構(gòu)成。利用眾所周知的方法通過地址14來訪問字典13的存儲單元。
搜索樹節(jié)點的數(shù)據(jù)結(jié)構(gòu)用節(jié)點15來表示,它包括一個節(jié)點數(shù)16,一個字符域17和用作相關(guān)節(jié)點指針的域18。節(jié)點數(shù)16標志樹節(jié)點,為了方便,將存儲節(jié)點15的存儲器地址14用作節(jié)點數(shù)。字符域17用來包含這個節(jié)點的數(shù)據(jù)字符值。域18包含一些指針,用易于理解的方式將節(jié)點15與相關(guān)的樹節(jié)點,如父節(jié)點,子節(jié)點和兄弟節(jié)點等相連。
壓縮子系統(tǒng)10包括一個搜索和更新控制部分20,通過一個雙向數(shù)據(jù)總線21和一個雙向控制總線22與字典13耦合。搜索和更新控制部分20包括表示為當前字符寄存器23的工作寄存器,一個當前匹配寄存器24和一個先前匹配寄存器25。搜索和更新控制部分20進一步包括一個編碼生成器26,用來為存儲在字典13中的字符串指派壓縮編碼值。編碼生成器26可以順序或通過諸如散列之類的方法偽隨機地指派編碼數(shù)。被指派的編碼通過存儲器地址14來訪問字典13的存儲單元。這樣,容易理解,地址14(節(jié)點數(shù)16)被用作存儲在字典13中串的壓縮編碼。
搜索和更新控制部分20包括控制27,控制27利用以下將描述的方式,按照圖6和圖9中的操作流程圖來控制壓縮子系統(tǒng)10的操作。
壓縮子系統(tǒng)10包括一個字符寄存器30,緩存輸入端11接收到的輸入數(shù)據(jù)字符流。各輸入數(shù)據(jù)字符用將要敘述的方式,通過總線31從字符寄存器30作用到當前字符寄存器23中。搜索和更新控制部分20通過一個控制總線32來控制從字符寄存器30中獲得輸入數(shù)據(jù)字符的操作。
壓縮子系統(tǒng)10的操作簡述如下。將輸入數(shù)據(jù)字符連續(xù)插入到當前字符寄存器23中,并且對照存儲在字典13中的串進行搜索直到達到與它的最長匹配。在這個過程中運用當前匹配寄存器24。在輸出端12給出最長匹配串的節(jié)點數(shù)16,作為壓縮編碼。這些搜索操作與上述參考文獻中的搜索方式相同。按照本發(fā)明,當輸入數(shù)據(jù)字符與存儲在字典中的被搜索串相匹配時,通過利用當前輸入字符擴展在上一個迭代過程中匹配的最長串以便更新字典13。在這個過程中運用先前匹配寄存器25。當輸入字符被繼續(xù)取出和匹配時,如此被擴展的先前匹配串可用來匹配。這樣,用一種與逐個字符的串搜索相互交錯的方式將更新串即時添加到字典13中。
參考圖2并繼續(xù)參考圖1,圖2表示一個解壓縮子系統(tǒng)40,從壓縮子系統(tǒng)10的輸出端12提供的壓縮編碼信號恢復出原始輸入數(shù)據(jù)流中的字符。相應地,解壓縮子系統(tǒng)40在一個輸入端41接收輸入壓縮編碼信號,在一個輸出端42提供恢復的相應字符串。解壓縮子系統(tǒng)40包括一個字典43,它最好是用RAM存儲器實現(xiàn)。構(gòu)造和更新字典43,以便包含與壓縮子系統(tǒng)10中的字典13相同的搜索樹數(shù)據(jù)庫。在輸入端41接收每一個輸入壓縮編碼時,都更新字典43,以便包含與存儲在字典13中相同的數(shù)據(jù)字符串。存儲在字典43中的搜索樹數(shù)據(jù)庫結(jié)構(gòu)由字典43的存儲單元中存儲的相互連接的節(jié)點組成。用眾所周知的方式通過地址44來訪問字典43中的存儲器存儲單元。
節(jié)點45表示搜索樹的數(shù)據(jù)結(jié)構(gòu),同上述有關(guān)字典13的節(jié)點15類似,它包括一個節(jié)點數(shù)46,一個字符域47和用作相關(guān)節(jié)點指針的域48。按照上述字典13,節(jié)點數(shù)46標志樹節(jié)點,并且將存儲節(jié)點45的存儲器地址44用作節(jié)點數(shù)。字符域47用來包含這個節(jié)點的數(shù)據(jù)字符值。域48包含一些指針,該指針連接節(jié)點45與相關(guān)樹節(jié)點,如父節(jié)點,子節(jié)點和兄弟節(jié)點等。
解壓縮子系統(tǒng)40包括一個恢復和更新控制部分50,通過一個雙向數(shù)據(jù)總線51和一個雙向控制總線52與字典43耦合?;謴秃透驴刂撇糠?0包括一些表示為當前接收編碼寄存器53的工作寄存器和一個先前串寄存器54。按照本發(fā)明,恢復和更新控制部分50包括一個未識別編碼處理部分55,將按照圖8詳細解釋。
恢復和更新控制部分50進一步包括一個編碼生成器56,用來為存儲在字典43中的字符串指派壓縮編碼值。編碼生成器56可以順序或按照諸如散列之類的方式偽隨機地指派編碼數(shù)。為了系統(tǒng)的兼容性。編碼生成器56運用與壓縮子系統(tǒng)10中的編碼生成器26所運用的過程和算法相同的方式來指派編碼數(shù)。被指派的編碼通過存儲器地址44來訪問字典43的存儲單元。這樣,如上述按照壓縮子系統(tǒng)10所述,地址44(節(jié)點數(shù)46)被用作存儲在字典43中的串的編碼。
恢復和更新控制部分50包括控制57,用將要敘述的方式,按照圖7,圖8和圖10的操作流程圖來控制解壓縮子系統(tǒng)40的操作。
解壓縮子系統(tǒng)40包括一個編碼寄存器60,該寄存器緩存在輸入端41接收到的壓縮編碼信號。各壓縮編碼信號按照將要敘述的方式,通過一個總線61從編碼寄存器60中作用到當前接收編碼寄存器53?;謴秃透驴刂撇糠?0通過一個控制總線62控制從編碼寄存器60中獲得的壓縮編碼。
解壓縮子系統(tǒng)40的操作簡述如下。插入到當前接收編碼寄存器53中的一個輸入壓縮編碼信號通過地址44訪問存儲在字典43中的相應串。當恢復過程運用相關(guān)節(jié)點指針48通過搜索樹反向跟蹤串的節(jié)點時,從字符域47恢復字符串。按照適當?shù)捻樞蛟谳敵龆?2給出恢復的字符串。這些串恢復操作與上述參考文獻中所敘述的方式相同。通過利用當前恢復的串中的每一個字符擴展先前恢復的串以更新字典43。在這個過程中運用了先前串寄存器54。
其相應串沒有存儲在字典43中的未識別壓縮編碼信號會響應于壓縮一個重復的字符或字符組串的壓縮子系統(tǒng)10而被接收。當接收未識別的壓縮編碼信號后,運用未識別編碼處理過程55,來恢復對應于未識別編碼信號的串。另外,與這個壓縮過程中壓縮子系統(tǒng)10的字典13中所存儲的內(nèi)容相對應的更新串也被存儲在解壓縮子系統(tǒng)40的字典43中。未識別編碼處理過程55的細節(jié)會根據(jù)圖8在下文解釋。
參考圖3a,圖3a表示字典13和43的搜索樹的節(jié)點的一個有代表性的數(shù)據(jù)結(jié)構(gòu)。因為,在發(fā)明的最佳實施方式中,在壓縮子系統(tǒng)10和解壓縮子系統(tǒng)40中,都運用了相同的節(jié)點數(shù)據(jù)結(jié)構(gòu),圖1和圖2中共同的參考數(shù)碼示于圖3a中。節(jié)點數(shù)16,46和字符域17,47已經(jīng)在上文中解釋過了。相關(guān)節(jié)點指針域18,48包括一個父節(jié)點指針域66和一些子節(jié)點指針域67。用眾所周知的方式,父節(jié)點指針域66包含當前節(jié)點15,45的父節(jié)點的節(jié)點數(shù),并且子節(jié)點指針域67包含當前節(jié)點15,45的子節(jié)點的節(jié)點數(shù)。
利用技術(shù)人員熟知的方式,壓縮子系統(tǒng)10按下面方式向下搜索搜索樹。當駐留在當前節(jié)點時,檢查子節(jié)點的字符值,以確定是否有子節(jié)點與當前輸入字符相匹配。如果出現(xiàn)匹配,子節(jié)點就成為當前節(jié)點,并用下一個輸入字符不斷重復這個過程,直到遇到這樣一個沒有與當前輸入字符相匹配的子節(jié)點的。當前節(jié)點在這種情況下,在字典13中找到了最長匹配串且其節(jié)點數(shù)被用作這個最長匹配串的壓縮編碼信號。從父節(jié)點指針域66所在的根節(jié)點開始通過搜索樹進行的前向搜索將會含有一個空值。
用一種等效的方法,如已知的那樣,可以從當前節(jié)點數(shù)和當前輸入字符的一個散列函數(shù)開始,通過尋找下一個搜索節(jié)點來實現(xiàn)前向搜索。在該實施方式中,不會用到子節(jié)點指針域67。Welch專利(302號)公開了LZW算法的散列搜索實施方式。
用一種眾所周知的方式,在通過搜索樹進行的反向搜索中,解壓縮子系統(tǒng)40運用圖3a的數(shù)據(jù)結(jié)構(gòu),恢復與壓縮編碼信號相對應的數(shù)據(jù)字符串。壓縮編碼信號使用編碼數(shù)46,并且存儲字符域47中的字符值。利用父節(jié)點指針域66中的節(jié)點數(shù)來訪問父節(jié)點,并且存儲其中的字符值。繼續(xù)這個過程,直到到達根節(jié)點。由于該過程以相反的次序來恢復字符,所以應用一種結(jié)構(gòu),例如一個LIFO堆?;蛘咭粋€適當構(gòu)造的輸出緩沖器來反轉(zhuǎn)字符次序,因而恢復原始的數(shù)據(jù)字符串。
按照下述過程擴展存儲在壓縮字典13或解壓縮字典43中的串。由編碼生成器26或56提供一個空存儲單元的下一個可行編碼,并且將其節(jié)點數(shù)加到被擴展節(jié)點的子節(jié)點指針67中。將被擴展節(jié)點的節(jié)點數(shù)插入到空存儲單元的父節(jié)點指針域66中。將擴展字符的字符值插入到空存儲單元的字符域17或47中。
參考圖3b,圖3b表示字典13和43的搜索樹中節(jié)點的實際數(shù)據(jù)結(jié)構(gòu)。這個數(shù)據(jù)結(jié)構(gòu)和它在壓縮和解壓縮子系統(tǒng)中的實現(xiàn)過程在Clark專利(591號)中敘述。正象按照圖3a所解釋的,在壓縮字典13和解壓縮字典43中都可運用圖3b的數(shù)據(jù)結(jié)構(gòu),并且展示了圖1和圖2中的共同參考數(shù)字。再者,節(jié)點數(shù)16,46和字符域17,47在上文被解釋。在圖3b的數(shù)據(jù)結(jié)構(gòu)中相關(guān)的節(jié)點指針域18,48包含一個父指針域70,一個子節(jié)點指針域71和一個兄弟節(jié)點指針域72。與上面按照圖3a的父節(jié)點指針域66所描述的內(nèi)容相同,運用父節(jié)點指針域70。子節(jié)點指針域71和兄弟節(jié)點指針域72代替了圖3a中的子節(jié)點指針域67。在圖3b的數(shù)據(jù)結(jié)構(gòu)中一個父節(jié)點用它的子節(jié)點指針域71來指向它的一個子節(jié)點的節(jié)點數(shù),所指向的子節(jié)點利用它的兄弟節(jié)點指針域72來指向它的一個兄弟節(jié)點的節(jié)點數(shù)。而所指向的兄弟節(jié)點又利用它的兄弟節(jié)點指針域72來指向更多的兄弟節(jié)點。用這種方式,一個父節(jié)點的所有子節(jié)點的指針都包含在子節(jié)點的一個兄弟節(jié)點鏈表中。
除非在兄弟節(jié)點列表中搜索到存在一個輸入字符根據(jù)圖3a按照上述方式,進行向下搜索。根據(jù)圖3a用上述方法實現(xiàn)串恢復的目的,進行反向搜索,通過把子節(jié)點及其所有兄弟節(jié)點的父節(jié)點指針域設(shè)置為父節(jié)點的節(jié)點數(shù)來實現(xiàn)。為了簡化搜索,兄弟列表應按照字符值上升的順序排列。
如上所述,通過指派下一個可用編碼,指定下一個可用的空存儲單元,把這個空存儲單元的節(jié)點數(shù)插入到被擴展節(jié)點的子節(jié)點指針域71來擴展沒有子節(jié)點(子節(jié)點指針域=0)的串。將新創(chuàng)建的子節(jié)點的父節(jié)點指針域70,設(shè)置為父節(jié)點的節(jié)點數(shù)并且將擴展字符值插入到新創(chuàng)建的子節(jié)點的字符域中。如果要被擴展的節(jié)點已經(jīng)有了子節(jié)點,則創(chuàng)建一個新的兄弟節(jié)點,并通過調(diào)整兄弟節(jié)點列表中適當節(jié)點的兄弟節(jié)點指針域而插入到兄弟節(jié)點列表中。將父節(jié)點的節(jié)點數(shù)插入到新創(chuàng)建的兄弟節(jié)點的父節(jié)點指針域70中。
參考圖4和圖4a,圖4概要表示按照圖3a中的數(shù)據(jù)結(jié)構(gòu)的一個搜索樹節(jié)點80。地址(節(jié)點數(shù)),字符值,父節(jié)點和子節(jié)點如圖例所示。圖4a表示一部分搜索樹,表示運用圖4中節(jié)點80的結(jié)構(gòu)來進行數(shù)據(jù)存儲。圖4a中的一部分搜索樹由存儲串a(chǎn)b,ac和ad的節(jié)點81,82,83和84組成。這樣,父節(jié)點81的子節(jié)點指針域67(圖3a)將會包含子節(jié)點82,83和84的節(jié)點數(shù),而每個子節(jié)點82,83和84的父節(jié)點指針域66會包含父節(jié)點81的節(jié)點數(shù)。
參考圖5和圖5a,圖5概要表示與圖3b中數(shù)據(jù)結(jié)構(gòu)相一致的搜索樹節(jié)點90。地址(節(jié)點數(shù)),字符值,父節(jié)點,子節(jié)點和兄弟節(jié)點如圖例所示。圖5a表示一部分搜索數(shù),它運用圖5中的節(jié)點90的結(jié)構(gòu),由節(jié)點91,92,93和94組成。圖5a中這部分搜索樹存儲圖4a中存儲的相同串。這樣,將父節(jié)點91的子節(jié)點指針域71(圖3b)設(shè)置為子節(jié)點92的節(jié)點數(shù)。將子節(jié)點92的兄弟節(jié)點指針域72設(shè)置為兄弟節(jié)點93的節(jié)點數(shù),并將兄弟節(jié)點93的兄弟節(jié)點指針域72設(shè)置為兄弟節(jié)點94的節(jié)點數(shù)。將每個子節(jié)點92,93和94的父節(jié)點指針域70設(shè)置為父節(jié)點91的節(jié)點數(shù)。
在以下對圖6-10的詳細描述中,將按照圖3b的數(shù)據(jù)結(jié)構(gòu)、圖5中相應的節(jié)點結(jié)構(gòu)和圖5a中相應的搜索樹結(jié)構(gòu)來解釋操作過程。編碼被認為是由編碼生成器26和56順序指派的,盡管可以采用諸如散列法之類的偽隨機指派方法。在一個散列法實施方式中,一個節(jié)點數(shù)編碼和一個字符被散列,以便確定下一個跟隨地址。在這樣一個散列實施方式中,不會用到子節(jié)點指針和兄弟節(jié)點指針。然而,在圖6-10的流程圖中,操作框CODE=NEXT AVAILABLE CODE或包含下一個順序編碼,或包含下一個散列編碼。在順序編碼指派實施方式中,這些操作方框具體為CODE=CODE+1。
參照圖6,并繼續(xù)參照圖1和圖3b,圖6表示一個控制流程圖,表現(xiàn)搜索和更新控制部分20要執(zhí)行的操作細節(jié),以遵照本發(fā)明進行數(shù)據(jù)壓縮??刂?7被視為包含適當?shù)碾娐?,例如狀態(tài)機來控制操作的執(zhí)行。
圖6的流程圖是基于用全部單一字符串初始化的壓縮字典13。相應地,方框100提供用存儲在各個編碼(節(jié)點數(shù))中的單一字符串將字典13清零和初始化的功能。這個操作運用編碼生成器26進行,編碼生成器26為存儲這些單一字符串而順序指派節(jié)點數(shù)。在ASCII實現(xiàn)方式中,編碼生成器26指派前256個編碼,用以存儲256個單一字符串。通過把要初始化的存儲器存儲單元的字符域17設(shè)置為字母表的各個字符的字符值,實現(xiàn)初始化,利用該字母表產(chǎn)生壓縮。將以上被初始化的存儲單元的父節(jié)點指針域70、子節(jié)點指針域71和兄弟節(jié)點指針域72設(shè)置為0。可以理解被初始化的存儲單元給出根節(jié)點,以存儲字典13中的串,因此,這些被初始化的存儲單元的父節(jié)點指針域70會保持為0。
通過以上操作,字典13的初始存儲單元被設(shè)置為包含各個單一字符串。在一個ASCII實施方式中,字典13的前256個存儲單元包含相應的256個字符串。在方框100的操作中,通過把其所有的域設(shè)置為0來清除字典13中的剩余存儲單元。在ASCII實現(xiàn)方式中,節(jié)點數(shù)為266和大于266的字典存儲單元被清零。
在方框101中,將當前匹配寄存器24設(shè)置為0,并且在方框102中將先前匹配寄存器25設(shè)置為0。在方框103中,將下一個輸入字符放置在當前字符寄存器23中。
在框104中,進行搜索以確定與當前字符相連接的當前匹配串是否在字典中??梢詰萌魏我阎暮线m的字典搜索過程,如在上述參考文獻中描述的那些。具體而言,此時對于一個非0當前匹配,當前匹配寄存器24包含當前匹配串的節(jié)點數(shù)。由當前匹配節(jié)點的子節(jié)點指針域71所指向的子節(jié)點與輸入字符進行比較。如果輸入字符與當前節(jié)點的子節(jié)點匹配,則判斷框104為肯定應答,并選YES路徑。如果子節(jié)點與當前字符不匹配,則檢查由子節(jié)點所指的兄弟節(jié)點表,以確定當前字符是否與一個兄弟節(jié)點匹配。如果找到匹配,則采取YES路徑。然而,如果當前節(jié)點沒有子節(jié)點,或者當前字符與當前節(jié)點的任何一個子節(jié)點都不匹配,則采取框104中的NO路徑。
如果當前匹配為0,則框104在有與當前字符同值字符的字典13中尋找根節(jié)點。因為字典13用所有單一字符串初始化,所以自動選擇從框104的YES分支。
當選取框104的YES分支后,圖6的壓縮處理過程表示在字典13中找到與當前字符相連的當前匹配,并繼續(xù)進行更長串的搜索。相應地,在方框105中更新當前匹配,以便將新的當前匹配設(shè)置為連接當前字符的現(xiàn)有當前匹配。通過適當?shù)馗庐斍捌ヅ浼拇嫫?4中的節(jié)點數(shù)就能夠?qū)崿F(xiàn)以上處理。如上所述,當當前匹配非0時,用與當前字符匹配的子節(jié)點(或兄弟節(jié)點)的節(jié)點數(shù)來更新當前匹配寄存器24。如果當前匹配為0,用與當前字符匹配的單一字符串的節(jié)點數(shù)來更新當前匹配寄存器24。單一字符節(jié)點數(shù)可用算法以眾所周知的方法來獲得,或者可以通過搜索當前字符值的初始化存儲單元來找到。
如果選取框104的NO分支,則與當前字符相連接的當前匹配與存儲在字典13中的串不匹配。在字典中已經(jīng)發(fā)現(xiàn)的當前匹配提供輸入數(shù)據(jù)字符流的最長匹配,在框104中與當前匹配相連的當前字符“打破”了以上匹配。此時,方框106提供代表最長匹配的壓縮編碼信號。在當前匹配寄存器24中找到這個最長匹配的編碼,即為當前匹配的節(jié)點數(shù)。
在方框107中,將當前匹配寄存器24的內(nèi)容傳送到先前匹配寄存器25。這樣,先前匹配寄存器25現(xiàn)存儲代表當前最長匹配的存儲單元的節(jié)點數(shù)。然后用下面將進一步討論的方式,將利用先前匹配寄存器25更新字典13。
在將當前匹配存為先前匹配后,將當前字符存儲為框110中的當前匹配。因而方框110開始搜索下一個最長匹配串,運用打破上一匹配的失配輸入字符串,作為下一匹配的根字符或第一個字符。因而在方框110中,將當前匹配寄存器24設(shè)置為具有當前字符值的初始化單一字符根節(jié)點的節(jié)點數(shù)。這個過程既可以通過算法完成,也可以通過按方框105描述的方式進行搜索。方框110進入將要敘述的字典更新邏輯。
此外,也可以按照下述邏輯來實現(xiàn)方框110。不將方框110所表示的當前匹配設(shè)置為當前字符,可以將當前匹配設(shè)置為0,處理過程可以回到框104的輸入端。因為字典的初始化,這種處理過程的結(jié)果通常導致選取框104的YES路徑,從而到達方框105。如圖所示,可以理解,通過方框110可以用更少的處理步驟得到同樣的結(jié)果。然而,這個邏輯被用于圖9的非初始化壓縮處理。
當?shù)竭_框105時,已經(jīng)在字典中找到當前匹配的當前字符擴展,并且,按照本發(fā)明,當前字符被用于擴展當前匹配,以提供將要存儲在字典13中的更新串。然而,在只接收第一個輸入字符以后,當?shù)竭_方框105時,不存在先前匹配并且字典13將不會在此處被更新。相應地,判斷框111決定先前匹配是否為0。通過方框102中檢查被初始化為0的先前匹配寄存器25來完成以上過程。如果先前匹配是0,就繞過字典更新選擇從框111出來的YES路徑。在第一個輸入字符被處理之后,當?shù)竭_方框105時,先前匹配不是0,則選取從框111出來的NO路徑,以便按照本發(fā)明進行字典更新。
相應地,在方框112中,編碼生成器26提供下一個可用編碼。下一個可用編碼將是字典中用來存儲更新串的下一個可用的空存儲單元的節(jié)點數(shù)。在方框113中,與當前字符相連的先前匹配被存儲在字典13中的下一個可用空存儲單元,利用這個下一個可用編碼來訪問這個空存儲單元。
方框113的存儲是按照下述方式實現(xiàn)的。由方框112中下一個可用編碼所訪問的下一個可用空存儲單元的父節(jié)點指針域70,被設(shè)置為在先前匹配寄存器25中找到的先前匹配的節(jié)點數(shù)。將此下一個空存儲單元的字符域17設(shè)置為當前字符寄存器23中的當前字符值。按下述方式,將先前匹配父節(jié)點連接到這個新創(chuàng)建的節(jié)點中。先前匹配父節(jié)點的節(jié)點數(shù)位于先前匹配寄存器25中。如果先前匹配父節(jié)點沒有子節(jié)點(子節(jié)點指針域=0),就將從方框112中得到的下一個可用編碼,即新創(chuàng)建的子節(jié)點的節(jié)點數(shù),插入到此先前匹配父節(jié)點的子節(jié)點指針域71。如果先前匹配父節(jié)點已有子節(jié)點,就將此新創(chuàng)建節(jié)點的下一個可用編碼節(jié)點數(shù)插入到先前匹配父節(jié)點的子節(jié)點的兄弟節(jié)點列表中。通過調(diào)整列表中兄弟節(jié)點的兄弟節(jié)點指針域72來完成以上處理,以便安置新創(chuàng)建的兄弟節(jié)點,并且相應地把一個適當?shù)男值芄?jié)點數(shù)插入到新創(chuàng)建的兄弟節(jié)點的兄弟節(jié)點指針域72。
運用方框114來更新先前匹配寄存器25,以便按方框113描述的那樣,指向被當前字符擴展的先前匹配串的節(jié)點數(shù)。如同按照方框113所述,通過把新創(chuàng)建的子節(jié)點或兄弟節(jié)點的節(jié)點數(shù),插入到先前匹配寄存器25中來實現(xiàn)以上處理。這個節(jié)點數(shù)就是按照方框112描述的下一個可用編碼,并且由編碼生成器26提供。
在按照方框112-114完成字典更新后,進入判斷框115,以確定當前字符寄存器23中的當前輸入字符是否為輸入數(shù)據(jù)流中的最后一個輸入字符。通過從111引出的YES路徑也進入框115,以便象上述那樣繞過字典更新。如果當前字符是最后一個字符,則采取從框115引出的YES路徑到達方框116,在方框116輸出當前匹配編碼。按照方框116給出的壓縮輸出編碼在當前匹配寄存器24中找到。按照方框116輸出壓縮編碼之后,進入方框117結(jié)束處理過程。
然而,如果在當前字符寄存器23中的當前字符不是最后一個輸入字符,則采用從框115引出的NO分支,該分支通過路徑118回到方框103的輸入端。按照方框103,將下一個輸入字符插入到當前字符寄存器23中,并繼續(xù)圖6的數(shù)據(jù)壓縮處理。
如果需要暫時停止處理過程,則在路徑118中的保持方框119中執(zhí)行暫停。
從前面的過程中可以理解,方框103-105控制對字典13的搜索,以找到最長匹配串,并且方框106提供與最長匹配相應的壓縮編碼輸出。方框110用先前串匹配循環(huán)中導致失配的字符,開始搜索下一個最長匹配。
方框107和112-114遵照本發(fā)明控制字典13的更新。當框104確定當前輸入字符已經(jīng)成功地擴展了當前匹配時,方框112-114就把該字符與擴展過程中的先前匹配串相連接。這樣,字典更新是即時的,并與以逐個字符為基礎(chǔ)的串互相交錯。
可以理解,當被匹配的當前串與被擴展的先前串在數(shù)據(jù)樹的相同路徑上時,就能夠?qū)崿F(xiàn)本算法有效壓縮重復字符或字符組的特性。這樣用兩個壓縮編碼信號來壓縮一個輸入串,而不考慮其長度,參照圖8和圖12將更加清楚。
參考圖7,并繼續(xù)參看圖2和圖3b,圖7表示一個控制流程圖,描述為了解壓縮按照圖6生成的壓縮編碼,由恢復和更新控制部分50執(zhí)行的操作。圖7是基于用全部單一字符串初始化的解壓縮字典43。控制57被視為包含適當?shù)碾娐?,如狀態(tài)機,以便控制操作的執(zhí)行。
按照方框130,解壓縮字典43被清零和初始化。方框130按照字典43進行的操作與上面按照方框100和壓縮字典13所述方式相同。
在方框131中,先前串寄存器54被清零,在方框132中,將一個輸入壓縮編碼插入到當前接收編碼寄存器53中。
用判斷框133繼續(xù)這個處理過程,框133確定在當前接收編碼寄存器53中的當前接收編碼是否在字典43中具有相應的串。通常,字典43會包含一個與當前接收編碼相對應的串。當從壓縮裝置中得到的當前接收編碼遇到一個重復的字符或字符組串時,會發(fā)生例外???33的判定通過用當前接收編碼作為地址訪問字典43,并且確定被訪問的字典存儲單元是否被清零來實現(xiàn)。如果字典存儲單元被清零,則與當前接收編碼相對應的串不在字典中。用另一種方式,在順序編碼指派實施方式中,框133的判定可以通過確定當前接收的編碼是否少于或等于編碼生成器56中的擴展編碼來實現(xiàn)。當當前接收編碼少于或等于編碼生成器56的擴展編碼時,與當前接收編碼相對應的串在字典43中。然而,如果當前接收編碼大于擴展編碼,則與當前接收編碼相對應的串并不在字典43中。
如果當前接收編碼串不在字典43中,則采用從框133引出的NO路徑到達框55,以執(zhí)行未識別編碼處理。未識別編碼處理的詳細過程將按照圖8在下文敘述。
當當前接收編碼在字典43中有相應的串時,采用從框133引出的YES路徑到達方框134。在方框134中,利用一個適當?shù)囊阎牟樽值溥^程(例如Welch專利(第302號)圖5或Clark專利(第591號)圖5),恢復與當前接收編碼相對應的字符串。在方框135中給出一個參數(shù)n,并設(shè)置為方框134中恢復的串中的字符數(shù)。在方框136中索引i被設(shè)置為1。索引i被用于遍歷在方框134中恢復的串中的n個字符,以便從其第一個字符開始輸出所恢復的串中的字符。相應地,方框137給出當前接收編碼串的第i個字符的輸出。
包括一個判定方框140,以便確定先前串是否為0。通過確定先前串寄存器54中的內(nèi)容是否為0來實現(xiàn)該測試。如果先前串寄存器54為0,則采用從方框140引出的YES路徑,以繞過字典更新。方框140的功能同上面按照圖6中框111所敘述的相似,因而,只在響應第一個接收的輸入編碼時,采用從方框140引出的YES路徑。
當先前串寄存器54不為0時,采用從方框140引出的NO路徑,并且在方框141,由編碼生成器56給出字典43中為下一個空存儲單元準備的下一可用編碼。在方框142中,與當前接收編碼相應的串中的第i個字符相連接的先前串被存儲在此下一個空存儲單元中。在方框143中,更新先前串寄存器54,以存儲方框142中擴展的先前串的節(jié)點數(shù)。在方框141-143中執(zhí)行的操作同上面按照圖6方框112-114敘述的方式相同。在圖7中,使用了先前串寄存器54,而在圖6中包括先前匹配寄存器25。
在方框144中,索引i增加1。如上所述,在框144輸入端又采用了從判斷框140引出的YES路徑,以便繞過方框141-143的字典更新處理。在判斷框145中進行測試,以確定索引i是否已經(jīng)達到值n+1。當索引i不等于n+1時,采用從框145引出的NO路徑,回到方框137輸入端的處理過程。繼續(xù)進行方框137和140-145的處理過程,直到i=n+1。
用這種方式,在方框137中以正確的順序輸出當前接收的編碼串中的n個字符,并利用當前接收編碼串的所有前綴擴展先前恢復的串。方框141-143的處理過程在解壓縮字典43存儲的串,與圖6中方框112-114在壓縮字典13中儲的串相同。在解壓縮字典43中按照方框141-143存儲的串被存儲在與壓縮字典13中按照方框112-114存儲的串相同的相應地址中。
當索引i達到值n+1時,采用從框145引出的YES路徑到達方框146。在方框146中,當前接收的編碼串代替先前串,以備處理下一個輸入編碼。通過把當前接收編碼寄存器53中的內(nèi)容插入到先前串寄存器54中來實現(xiàn)以上處理。未識別編碼處理過程55退出,作為框146的輸入。
如果剛剛處理的當前接收編碼不是最后一個輸入編碼,則判斷框147通過框147的NO路徑,將處理過程返回到方框132的輸入端。通過路徑148,處理過程返回到方框132,以開始處理下一個輸入壓縮編碼。如果需要暫停處理,則在路徑148的保持方框149中執(zhí)行暫停。在解壓縮裝置中的保持方框149與壓縮裝置中的保持方框119相對應。
如果在框147中,當前接收編碼是最后一個輸入編碼,則采用從框147引出的YES路徑,到達方框150,以結(jié)束處理。
從上述過程中可以理解,方框134和方框137恢復和輸出與當前接收編碼相對應的串中的字符,而方框141-143通過存儲利用當前恢復串中的前綴擴展的先前恢復的串來更新字典43。
參考圖8,圖8表示未識別編碼處理過程55的細節(jié)。在框160中,索引i被設(shè)置為1,并且由于敘述的原因,將會按模n增量。在方框161中,恢復先前串中的n個字符。先前串有n個字符,是由于該串是上一個串恢復循環(huán)中的當前接收編碼串。運用已知的與上文按照方框134所述相同的字典串恢復過程,通過用先前串寄存器54中的內(nèi)容訪問字典43來執(zhí)行方框161。
在方框162中,編碼生成器56為字典中下一個空存儲單元提供下一個可用編碼。在方框163中,將利用先前串的第i個字符擴展的先前串存儲在下一個空存儲單元中。在方框164中,通過更新先前串寄存器54,利用方框163中被擴展的先前串替換先前串,以便存儲以上被擴展的先前串的節(jié)點數(shù)。方框162-164的字典更新操作與上文中按照方框141-143敘述的相似。正象上文所解釋的那樣,方框141-143實現(xiàn)的字典更新過程已經(jīng)按照圖6的方框112-114詳細敘述過。在方框162-164的處理過程中,運用了先前串寄存器54。
在判斷框165中進行測試,以確定編碼生成器56當前提供的編碼是否等于當前接收編碼寄存器53中的當前接收編碼。如果編碼生成器56的擴展編碼不曾達到當前接收編碼的值,則采用從框165中引出的NO路徑到達方框166,在方框166索引i增加1(模n)。然后,處理過程循環(huán)回到方框162的輸入端,以存儲更多的更新串,直到編碼生成器56的擴展編碼等于當前接收編碼。
當框165表明編碼生成器56的擴展編碼等于當前接收編碼寄存器53中的當前接收編碼時,采用從框165中引出的YES路徑到達方框167??梢岳斫?,當框165表明編碼等于當前接收編碼時,與以上未識別的當前接收編碼相對應的串現(xiàn)在被存儲在解壓縮字典43中。
在方框167中,恢復與當前接收編碼相對應的串中的字符,并且從第一個字符開始輸出每一個字符。運用已知的上文中按照方框134所敘述的字典串恢復過程,按照當前接收編碼寄存器53中的內(nèi)容,通過訪問字典43,執(zhí)行方框167。
從上述過程中可以理解,通過方框160-167的處理過程,能夠構(gòu)造與未識別的壓縮輸入編碼相對應的串,將其存儲在解壓縮字典43中,并且恢復其字符以便輸出。進一步可理解,當圖6的壓縮裝置產(chǎn)生并存儲與未識別編碼有關(guān)的串時,在與傳送的編碼相對應的串之外,壓縮裝置還存儲n個串。根據(jù)圖12這會進一步得到澄清。解壓縮裝置構(gòu)造和存儲這n個串,的處理過程如下文所述。
處理過程向前到方框170,在方框170索引i被增加1(模n)。方框171-173分別重復方框162-164的處理過程。然后處理過程前進到方框174,在方框174參數(shù)n減1。然后在判斷框175中測試參數(shù)n,以確定n是否等于0。如果n不等于0,則采用從框175中引出的NO路徑,回到方框170的輸入端。當參數(shù)n達到值0時,在框175的YES路徑中退出未識別編碼處理過程。
在方框166和170中,索引i被增量(模n)以便為按照方框163和172存儲的串提供合適的字符值。所運用的n值是在方框174中的減操作之前由方框135(圖7)提供的。字符值是按照方框161所恢復的先前串中的n個字符,并且被i索引。按照方框161所恢復的先前串中的n個字符,為按照方框163和172構(gòu)造和存儲的串形成一個n個字符的前綴。
圖8中的處理過程對編碼生成器26和56所使用的任何類型的編碼指派過程起作用,包括順序或諸如散列之類的偽隨機編碼指派。當編碼指派過程是順序進行的時候,圖8中的邏輯可以簡化為下述內(nèi)容。
對于順序編碼指派,框165的測試變成“Code=Current ReceivedCode+n(編碼=當前接收編碼+n)”。刪除方框170-175并且從方框167退出未識別編碼處理過程。
從上述過程中可以理解,當出現(xiàn)重復的字符或字符組串時,如同上文中按照圖6所敘述的,方框167恢復與未識別的接收編碼相對應的串中的字符,并且方框163和172在解壓縮字典43中存儲的串與壓縮字典13中存儲的相同。
參考圖9,并繼續(xù)參考圖1和圖3b,圖9表示搜索和更新控制部分20執(zhí)行的詳細操作的控制流程圖,以便按照本發(fā)明進行數(shù)據(jù)壓縮。控制27被視為包含合適的電路,例如狀態(tài)機,以控制操作的執(zhí)行。圖9的流程圖是基于一個非初始化的壓縮字典13。在圖9中這個非初始化的實施方式中,當?shù)谝淮斡龅揭粋€字符時,以非壓縮的方式,在傳送這個字符之后跟隨著傳送一個0編碼。這個0編碼為解壓縮裝置提供指示,表明這個字符已經(jīng)被壓縮裝置傳送。第一次遇到的字符被存儲在壓縮裝置字典13中,按照遇到字符的次序,用作存儲的單一字符串或根節(jié)點。除了安置第一次遇到的字符,圖9的流程圖按照與圖6中相同的方式工作。
在方框180中字典13被清零??梢酝ㄟ^把圖3b中的域17和70-72設(shè)置為0來實現(xiàn)字典清零。
圖9中的流程圖包括方框181-187和190-194。這些方框分別與圖6中方框101,103-107及112-117相同。除下文所述以外,上文中按照圖6中這些框圖所給出的解釋可應用于圖9中的相應框圖。
在框183中,當當前匹配是0時,在字典13中進行搜索,以確定單一字符串是否已經(jīng)作為根節(jié)點進入字典。如果單一字符串已經(jīng)存在于字典中,則采用從框183引出的YES路徑,否則采用NO路徑。在方框184中,當當前匹配是0時,用框183中匹配的單一字符根節(jié)點的節(jié)點數(shù)來更新當前匹配寄存器24。另外,對于順序編碼指派實施方式中的方框187,編碼指派從1開始,因為在以上非初始化的實施方式中,字典所有的存儲單元都可用于存儲輸入量中遇到的字符串。也要注意,在圖9中不需要圖6中繞過字典更新的方框111。這是由于,在這個非初始化的實施方式中,第一個輸入字符是第一次遇到的字符,按照下述方式為下一次迭代提供先前匹配。
另外,方框185與圖6中的方框106相對應。在方框185中,如在方框106中一樣,在當前匹配寄存器24中找到壓縮的輸出編碼。然而在方框185中,當當前匹配為0時,輸出此0編碼,表明當前輸入字符是一個第一次遇到的字符。
圖9中的流程圖包括一個判定框195,框195確定當前匹配寄存器24中的內(nèi)容是否為0。如果當前匹配不為0,則采用從框195中引出的NO路徑達到框186,在框186按照圖6中相應方框107所描述的方法,將當前匹配寄存器24的內(nèi)容傳送到先前匹配寄存器25。在方框196中,將當前匹配寄存器24設(shè)置為0,并且將處理過程傳送到框183的輸入端。方框186進行字典的更新,以進行下一個串的語法分析操作,并且方框196從當前字符寄存器23中的字符開始,形成對下一個串搜索。
如果采用了從框195引出的YES路徑,則當前匹配等于0并且當前字符寄存器23中的字符已經(jīng)被第一次遇到。這樣,在方框197中,輸出該字符。因為方框185已經(jīng)輸出了值為0的當前匹配,這個第一次遇到的當前字符,即在方框197中輸出的字符,如上文所述,其前面是0編碼。在方框200中,由編碼生成器26給出下一個可用編碼,表明字典13中下一個可用的空存儲單元。在方框201中,在當前字符寄存器23中的下一個空存儲單元中存儲當前字符,作為一個單一字符串根節(jié)點。通過把當前字符寄存器23中的字符存儲到下一個空存儲單元的字符域17中來實現(xiàn)方框201的功能。父節(jié)點指針域70,子節(jié)點指針域71和兄弟節(jié)點指針域72都已經(jīng)在方框180中預先被置為0。
在方框202中,先前匹配寄存器25被設(shè)置為方框201中所創(chuàng)建的根節(jié)點,以便在下一個字符串語法分析操作中進行字典更新。通過把方框201中新創(chuàng)建的根節(jié)點的節(jié)點數(shù)插入到先前匹配寄存器25中實現(xiàn)該處理。以上節(jié)點數(shù)將是方框200剛剛給出的編碼。
包括一個判斷框203,以確定當前字符寄存器23中的字符是否是最后一個輸入字符。如果不是,則采用從方框203中引出的NO路徑達到方框182的輸入端,以便從輸入流中獲得下一個數(shù)據(jù)字符信號。然而,如果在方框203中測試的當前字符是最后一個輸入字符,則采用從方框203引出的YES路徑到達方框194,以結(jié)束處理過程。
從上述過程可以理解,方框182-184控制搜索最長匹配字符串字典13,并且方框185提供與最長匹配相應的壓縮編碼輸出。方框185也在傳送首次遇到的字符之前給出0編碼輸出。方框196通過將當前匹配寄存器24置0,開始搜索下一個最長匹配。這樣,搜索下一個最長匹配字符開始于在先前串匹配循環(huán)中導致失配的字符,這個字符在當前字符寄存器23中。
方框186,187,190和191按照本發(fā)明控制對字典13的更新。當框183確定當前輸入字符已經(jīng)成功地擴展了當前匹配時,方框187,190和191把這個字符與被擴展過程中的先前匹配串相連接???95,197和200-202控制管理第一次遇到的字符。方框202為下一個串匹配循環(huán)中的潛在擴展處理提供一個字符用作先前匹配。從圖9中的邏輯可以理解,如果順序地接收幾個第一次遇到的字符,則只有最后一個字符會在下一個串匹配循環(huán)中被擴展。
參考圖10,并繼續(xù)參考圖2和圖3b,圖10表示一個控制流程圖,說明為了對根據(jù)圖9所產(chǎn)生的壓縮編碼進行解壓縮,由恢復和更新控制部分50執(zhí)行的操作。圖10的流程圖是基于一個非初始化的解壓縮字典??刂?7被視為包含適當?shù)碾娐罚鐮顟B(tài)機,以控制操作的執(zhí)行。
在方框210中,解壓縮字典43用按照圖9中方框180敘述的方式清零。這樣,解壓縮字典43按照與圖9中非初始化實施方式中字典13相同的方式清零。
如上文中按照圖9所述,除了管理第一次遇到的字符的方法以外,由圖10中解壓縮流程圖進行的操作與圖7中解壓縮流程圖進行的操作相同。相應地,圖10包括方框55,211-217以及220-226,完成的功能分別與圖7中方框55,132-137,141-147以及150相同。上文中按照圖7中方框55,132-137,141-147以及150給出的描述適用于圖10中的相應方框。
在圖10中沒有使用與圖7中方框140相應的方框。正如上文所述,當先前串寄存器54為0時,方框140繞過了字典更新。這個過程發(fā)生在圖7中初始化實施方式中接收第一個輸入編碼時。如下所述,在圖10的非初始化實施方式中,第一個接收到的輸入編碼是關(guān)于第一次遇到的字符,從而給出一個先前串以便在隨后的循環(huán)中更新。
方框217,220和221的處理過程在解壓縮字典43中存儲的串,與圖9中方框187,190,191在字典13中存儲的串相同。在壓縮字典43中按照方框217,220,221存儲的串,存儲在與在壓縮字典13中方框187,190和191中存儲的串相同的地址中。進而,當圖10的上下文環(huán)境中執(zhí)行方框55(圖8)中未識別編碼處理過程時,當按照圖9中壓縮裝置的操作,出現(xiàn)重復的字符或字符組串時,圖8中方框163和172在解壓縮字典43中存儲的字符串與壓縮字典13中存儲的相同。
具體而言,框212與圖7中框133相對應。除了在接收壓縮裝置首次遇到的編碼之前按照0接收編碼以外,上文中按照框133所敘述的內(nèi)容適用于框212。然而可以理解,當處理過程到達框212時,由于這個情況在圖10的另外一個下文將要敘述的分支中控制,所以當前接收編碼將不會是0。
在方框211中,將一個輸入壓縮編碼信號插入到當前接收編碼寄存器53中。一個判斷框230測試當前接收編碼寄存器53的內(nèi)容,以確定當前接收編碼是否為0。如果當前接收編碼不是0,則采用從框230引出的NO路徑作為框212的輸入端,在框212的處理過程按照上文所述進行。
然而,如果當前接收編碼是0,則期望有圖9中壓縮裝置首次遇到的字符。相應地,在方框231中輸入該字符。可以利用當前接收編碼寄存器53來臨時保持該字符。在框232中,編碼生成器56提供下一個可用編碼,該編碼與解壓縮字典43中下一個空存儲單元相對應。在方框233中,輸入字符被存儲在此下一空存儲單元中,作為一個單一字符根節(jié)點。在方框233中,以與上文中按照圖9中方框201所述內(nèi)容相同的方式來實現(xiàn)以上處理。這樣,解壓縮子系統(tǒng)40在解壓縮字典43中存儲的單一字符串,及串所在地址,與圖9中非初始化實施方式中壓縮子系統(tǒng)10中存儲在壓縮字典13中的字符串及其地址相同。
在方框234中,將在方框231中接收到的字符輸出,以維持解壓縮裝置恢復數(shù)據(jù)輸出和壓縮裝置接收的輸入數(shù)據(jù)之間的一致性??梢酝ㄟ^從暫時存儲字符的當前接收編碼寄存器53中輸出該字符來實現(xiàn)以上處理。
在方框235中,將參數(shù)n設(shè)置為1。如果這個字符,即首次遇到并且剛剛處理過的字符,在壓縮裝置的輸入端重復,而生成一個未識別壓縮編碼,則n=1是以上未識別編碼處理過程55的正確值,在下一個解壓縮循環(huán)中執(zhí)行未識別編碼處理過程。
在方框236中,將先前串寄存器54設(shè)置為方框233中創(chuàng)建的根節(jié)點,以便在下一個串恢復循環(huán)中進行字典更新。通過將以上在方框233中新創(chuàng)建的根節(jié)點的節(jié)點數(shù)插入到先前串寄存器54中來實現(xiàn)以上處理。此節(jié)點數(shù)將是剛剛在方框232中給出的編碼。從圖10的邏輯中可以理解,如果順序接收幾個字符,而每個字符都是首次遇到,則只有最后一個字符會用與按照圖9所敘述的內(nèi)容相似的方式在下一個串恢復循環(huán)中被擴展。
方框236的輸出提供給方框225的一個輸入端,以便繼續(xù)進行上述處理。
參考圖11a-11e,圖11a-11e表示當壓縮一個典型的輸入數(shù)據(jù)流時,壓縮字典13的連續(xù)狀態(tài)。用一部分搜索樹來概要地表示字典的狀態(tài)。如上所述,被壓縮的輸入流是“abcfghx”。所示的逗號表示串的語法分析,是虛擬的,并不在輸入流中。下劃線表示當前輸入字符。正象圖11a所示,字典13最初存儲串“abc”和“fgh”。在圖11a中串“abc”已經(jīng)剛剛被匹配為最長匹配串并且輸出編碼“abc”(箭頭240所示)。因而,如虛擬逗號241所示,已經(jīng)根據(jù)輸入對串“abc”進行了語法分析。
在圖11b中,下一個輸入字符“f”與箭頭242所示的串“fgh”的第一個字符匹配。根據(jù)本發(fā)明,利用箭頭243所示的字符“f”擴展在圖11a中作為先前壓縮編碼傳送的串“abc”。
在圖11c中,下一個輸入字符“g”與存儲的串“fgh”的第二個字符匹配,并且現(xiàn)在利用匹配的輸入字符“g”擴展先前擴展的字符串“abcf”。類似地,在圖11d中,輸入字符“h”與串“fgh”的第三個字符匹配,并且將其添加到不斷增長的先前串上,現(xiàn)在形成串“abcfgh”。
在圖11e中,下一個輸入字符“x”打破了串“fgh”的匹配,并且輸出最長匹配“fgh”的編碼,如箭頭244所示。如虛擬逗號245所示,已經(jīng)根據(jù)輸入對串“fgh”進行了語法分析。
從圖11a-11e可以理解,已經(jīng)利用匹配串“fgh”的所有前綴擴展了所存儲的串“abc”,并且,字典的更新是即時的而且與當前匹配串的每一個字符的匹配相交錯。這樣,在圖11b中,串“abcf”可用于下一次迭代中的匹配。在圖11c中,串“abcfg”可用于下一次迭代中的匹配,并且在圖11d中,串“abcfgh”可用于下一次迭代中的匹配。
從圖11a-11e可以進一步理解,解壓縮裝置接收到“abc”和“fgh”的不間斷的壓縮輸出編碼。當接收到“fgh”的輸出編碼時,解壓縮裝置運用與先前接收的壓縮編碼相對應的恢復串“fgh”和串“abc”,構(gòu)造和存儲圖11a-11e所描述和表示的串。
參考圖12a-12g,圖12a-12g表示具有行程長度編碼優(yōu)點的本發(fā)明的即時和交錯字典更新方式。正如上文所述,本發(fā)明將號一個重復的編碼或編碼組壓縮為兩個壓縮編碼符號而不考慮行程的長度。圖12a-12g概要表示搜索樹的一部分,該搜索樹表示當輸入數(shù)據(jù)字符流是重復的字符組時,壓縮字典13的連續(xù)狀態(tài)。輸入數(shù)據(jù)流表示為“abababax”。請注意,在此輸入示例中,這個重復的字符組行程以一段字符組結(jié)束。下面描述的操作也適用于用整個字符組結(jié)束行程。如圖11a-11e所示,虛擬逗號表示串的語法分析,且下劃線表示當前輸入字符。
在圖12a中壓縮字典13正在存儲串“ab”,串“ab”與前兩個輸入字符匹配。這樣,輸出編碼“ab”,如箭頭250所示。虛擬逗號251表示輸入中串“ab”的語法分析。
在圖12b中,當前輸入字符“a”與存儲串“ab”的第一個字符匹配,如箭頭252所示。因為“ab”的編碼作為先前壓縮編碼被傳送,所以將匹配字符“a”附加到串“ab”上,如箭頭253所示。壓縮字典13現(xiàn)在存儲串“aba”,串“aba”可以用來進行匹配。
在圖12c中,下一個輸入字符“b”與存儲串“aba”中的第二個字符匹配,因此,利用該字符擴展串“aba”。這樣,壓縮字典13現(xiàn)在存儲串“abab”,串“abab”可用來進行匹配。
圖12d-12f表示下面三個輸入字符的輸入字符匹配和擴展順序。這樣,在圖12d中存儲串“ababa”,并且串“ababa”可用于匹配,在圖12e中,存儲串“ababab”并且串“ababab”可用于匹配,而在圖12f中存儲串“abababa”并且串“abababa”可用于匹配。
可以理解,當這個重復的順序繼續(xù)下去時,輸入字符的匹配和存儲串的擴展在樹的同一個分支上進行,并且不斷繼續(xù),直到接收到一個打破該匹配的字符。當出現(xiàn)以上情況時,編碼生成器26(圖1)就不斷地給出新的編碼,以便在新創(chuàng)建的節(jié)點存儲串。此時,如圖12b-12f所示,解壓縮裝置并不會意識到發(fā)生在壓縮裝置中的這些活動。正如按照圖12a所敘述的那樣,解壓縮裝置上次接收的信息是串“ab”的輸出編碼。
在圖12g中,因為沒有在壓縮字典13中發(fā)現(xiàn)串“ababax”,所以輸入字符“x”打破了以上匹配。因此,輸出最長匹配“ababa”的編碼,如箭頭254所示。因而,已經(jīng)根據(jù)輸入對上述串進行了語法分析,如虛擬逗號255所示。從圖12g中可以理解,在最長匹配串之外,在壓縮字典13中又存儲了兩個串。這些串由節(jié)點256和257來表示。
這樣,從圖12a-12g中可以理解,重復字符組“ababa”被壓縮為兩個編碼符號,如參考數(shù)字250和254所表示??梢赃M一步理解,對于比如圖所示的更長行程而言,如果編碼組“ab”的重復行程超過圖12f所示,則仍然只使用兩個編碼符號進行壓縮??梢钥吹剑貜托谐淘谝欢沃貜妥址M結(jié)束,但是也可以繼續(xù),以在完整的組“ab”處終止。
從前面的過程中可以理解圖12g中由參考數(shù)字254所表示的輸出編碼不會被解壓縮裝置識別,這是由于解壓縮裝置并未存儲串“ababa”。圖8中未識別編碼的處理過程構(gòu)造并存儲串“ababa”,以及在圖12b和12c中所示的前綴。未識別編碼處理過程進一步地構(gòu)造和存儲,由圖12g中的參考數(shù)字256和257表示的另外的擴展串。
在圖8中,方框160-167的處理過程構(gòu)造,存儲并輸出與箭頭254所表示的未識別壓縮編碼相對應的串“ababa”。方框170-175的處理過程構(gòu)造和存儲另外的串256和257。
在圖12a-12g所示的例子中,用于未識別編碼處理過程中的先前串是串“ab”,當解壓縮裝置按照圖12a執(zhí)行串恢復循環(huán)時,已經(jīng)在解壓縮裝置字典中存儲了串“ab”。在圖8中,參數(shù)n是2,并且增加索引i(模2),因而順序地和重復地為方框163和172提供字符“ab”,以便構(gòu)造圖12b-12f所示的字符串。
從上述過程中可以進一步理解,當通過一個失配字符或輸入字符的結(jié)束來終止重復的字符或重復的字符組行程時,未識別編碼處理過程構(gòu)造并恢復合適的串。可以由重復字符組行程中的多字符組中的一段,或者由整個字符組來終止以上行程。圖12a-12g表示通過失配字符“x”來終止,并且進一步用重復組的一段來終止。在圖12g中,用重復組“ab”的一部分“a”來終止行程。當用整個組“ab”來終止重復組行程時,容易理解上述的敘述中的適當操作。
從上述過程中可以理解,上述的處理過程為存儲在字典13和43中的串保留了前綴性質(zhì),在這些字典中也存在存儲串的前綴。
上述實施方式壓縮一個輸入數(shù)據(jù)字符信號流。這些輸入數(shù)據(jù)字符可以按照有任意對應字符位的任何尺寸的字母表。例如數(shù)據(jù)字符可以為文本,如ASCII字符,可以超過一個字母表,如8比特字符的256個字符的ASCII字母表。輸入數(shù)據(jù)也可以是兩字符二進制字母表1和0(1比特尺寸的字符)上的二進制字符。這種類型的字母表出現(xiàn)在,例如位象的情況下??梢岳斫?,可以在基礎(chǔ)二進制數(shù)據(jù)的兩字符字母表上壓縮文本數(shù)據(jù)。
上述實施方式是按照搜索最長匹配敘述的。可以理解,本發(fā)明的即時、交錯的更新處理也可以用于匹配串不必為最長的系統(tǒng)中。
可以理解,可以用硬件、固件、軟件或其組合的形式來實現(xiàn)本發(fā)明的上述實施方式??梢杂梅蛛x電路元件來輕易地實現(xiàn)所述的各種功能。在軟件實施方式中,可以應用合適的微處理器,其中利用根據(jù)上述流程圖容易地生成的編碼對微處理器進行編程。
雖然利用最佳實施方式說明了本發(fā)明,應該理解的是,所用到的詞匯是描述性詞匯而并不是限定性詞匯,并且在附加權(quán)利要求書的范圍中,可以在不背離本發(fā)明的實質(zhì)和范圍的情況下,在更大的方面進行改變。
權(quán)利要求
1.用于將數(shù)據(jù)字符信號流壓縮為壓縮編碼信號流的數(shù)據(jù)壓縮裝置,該裝置包括用于存儲數(shù)據(jù)字符信號串的存儲裝置,每個所述串具有一個與此有關(guān)的編碼信號,通過比較所述流與所述存儲串搜索所述數(shù)據(jù)字符信號流的裝置,以便在確定預定匹配之前,進行逐個字符匹配,用于提供與所述預定匹配有關(guān)的編碼信號的裝置,以便提供所述壓縮編碼信號流,用于與所述逐字符匹配交錯,輸入到所述存儲裝置的裝置,當每個數(shù)據(jù)字符信號匹配時,擴展串包括一個先前匹配串,該匹配串依次與利用各數(shù)據(jù)字符信號擴展的上次提供的編碼信號相對應,以及用于將有關(guān)編碼信號指派給所述擴展串的裝置。
2.根據(jù)權(quán)利要求1的裝置,其中當每個所述數(shù)據(jù)字符信號匹配并且在下一數(shù)據(jù)字符信號匹配之前,所述輸入裝置將一個所述擴展串輸入到所述存儲裝置中。
3.根據(jù)權(quán)利要求2的裝置,其中所述預定匹配包括所述數(shù)據(jù)字符信號串與所述存儲串之間的最長匹配,所述提供裝置能夠提供與所述最長匹配有關(guān)的編碼信號,以便提供所述壓縮編碼信號流。
4.根據(jù)權(quán)利要求3的裝置,其中所述裝置在連續(xù)串匹配循環(huán)中運行,在所述連續(xù)循環(huán)中確定有關(guān)的最長匹配串,當前循環(huán)跟隨先前循環(huán),所述先前匹配串在所述先前循環(huán)中與在所述先前循環(huán)中提供的所述上次提供的編碼信號匹配,所述逐字符匹配出現(xiàn)在所述當前循環(huán)中,在所述當前循環(huán)中,利用所述每個數(shù)據(jù)字符信號擴展所述先前匹配串。
5.根據(jù)權(quán)利要求4的裝置,其中所述搜索裝置和所述輸入裝置用于在部分串W與數(shù)據(jù)字符信號C匹配時,將一個所述擴展串輸入到所述存儲裝置中,所述數(shù)據(jù)字符信號C作為串PW的擴展字符,其中P為所述先前匹配串,W位于所述當前循環(huán)中的匹配處理過程。
6.根據(jù)權(quán)利要求4的裝置,其中所述搜索裝置能夠在所述逐字符匹配期間,通過確定數(shù)據(jù)字符信號何時失配而確定何時到達所述最長匹配,所述搜索裝置包括利用所述失配數(shù)據(jù)字符信號開始下一個串匹配循環(huán)的裝置。
7.根據(jù)權(quán)利要求1的裝置還包括利用具有與其有關(guān)的特定編碼的所有單一字符串來初始化所述存儲裝置的裝置。
8.根據(jù)權(quán)利要求1的裝置還包括輸出跟隨于標識后的未壓縮格式的第一次遇到的數(shù)據(jù)字符信號的裝置,該標識表示正在輸出以上數(shù)據(jù)字符信號,以及以單一字符串的形式,將第一次遇到的所述數(shù)據(jù)字符信號輸入到所述存儲裝置的裝置。
9.根據(jù)權(quán)利要求8的裝置,其中所述標識包括一個0編碼。
10.根據(jù)權(quán)利要求4的裝置,其中以鏈接樹結(jié)構(gòu)的方式將所述串存儲到所述存儲裝置中,并且所述數(shù)據(jù)字符信號流包括一個重復字符串,重復字符串包括一個重復字符,所述裝置用于將所述重復字符串壓縮為兩個壓縮編碼信號,而不考慮其長度。
11.根據(jù)權(quán)利要求10的裝置,其中所述先前匹配串包括所述重復字符,所述搜索裝置用于經(jīng)過所述樹沿某條路徑匹配所述重復字符串,所述輸入裝置用于沿所述路徑輸入所述擴展串,從而將所述重復字符串壓縮為兩個壓縮編碼信號,而不考慮其長度。
12.根據(jù)權(quán)利要求4的裝置,其中以鏈接樹結(jié)構(gòu)的方式將所述串存儲到所述存儲裝置中,并且所述數(shù)據(jù)字符信號流包括一個重復字符組串,重復字符組串包括一個重復字符組,所述裝置用于將所述重復字符組串壓縮為兩個壓縮編碼信號,而不考慮其長度。
13.根據(jù)權(quán)利要求12的裝置,其中所述先前匹配串包括所述重復字符組,所述搜索裝置用于經(jīng)過所述樹沿某條路徑匹配所述重復字符組串,所述輸入裝置用于沿所述路徑輸入所述擴展串,從而將所述重復字符組串壓縮為兩個壓縮編碼信號,而不考慮其長度。
14.響應于數(shù)據(jù)字符信號流接收數(shù)據(jù)壓縮裝置提供的壓縮編碼信號流的數(shù)據(jù)解壓縮裝置,所述裝置用于根據(jù)所述壓縮編碼信號流恢復所述數(shù)據(jù)字符信號流,該裝置包括用于存儲數(shù)據(jù)字符信號串的存儲裝置,每個所述串具有一個與此有關(guān)的編碼信號,利用當前接收的壓縮編碼信號訪問所述存儲裝置的裝置,用于從與所述當前接收的壓縮編碼信號相對應的所述存儲裝置中恢復串,從而恢復其數(shù)據(jù)字符信號,用于輸入到所述存儲裝置的裝置,擴展串包括與先前接收的壓縮編碼信號相對應的先前恢復串,其中依次利用與所述當前接收的壓縮編碼信號相對應的所述恢復串的每個數(shù)據(jù)字符信號擴展先前接收的壓縮編碼信號,將有關(guān)編碼信號指派到所述擴展串的裝置,用于輸入到所述存儲裝置的其他裝置,其他擴展串響應于一個未識別的壓縮編碼信號的接收,所述其他擴展串包括與所述先前接收的壓縮編碼信號相對應的所述先前恢復串,其中依次利用所述先前恢復串的每個數(shù)據(jù)字符信號,順序重復擴展所述先前接收的壓縮編碼信號,直到輸入一個與所述未識別的壓縮編碼信號相對應的串,將有關(guān)編碼信號指派到所述其他擴展串的裝置,以及提供與所述未識別的壓縮編碼信號相對應的所述串的數(shù)據(jù)字符信號的裝置,以便恢復所述數(shù)據(jù)字符信號。
15.根據(jù)權(quán)利要求14的裝置,其中所述其他輸入裝置能夠輸入到所述存儲裝置,附加擴展串包括與所述未識別的壓縮編碼信號相對應的所述串,其中依次利用所述先前恢復串的數(shù)據(jù)字符信號,進一步擴展所述未識別的壓縮編碼信號,直到將所述附加擴展串的數(shù)目輸入到所述存儲裝置中,所述數(shù)目等于包括所述先前恢復串的數(shù)據(jù)字符信號的數(shù)目,將有關(guān)編碼信號指派到所述附加擴展串的裝置。
16.根據(jù)權(quán)利要求15的裝置,其中所述裝置在連續(xù)串恢復循環(huán)中運行,在所述連續(xù)循環(huán)中恢復有關(guān)串,當前循環(huán)跟隨前一循環(huán),利用在所述前一循環(huán)中接收的所述先前接收的壓縮編碼信號,在所述前一循環(huán)中恢復所述先前恢復串,在所述當前循環(huán)期間,接收所述當前接收的壓縮編碼信號,以及所述輸入裝置用于在所述當前循環(huán)期間,將所述擴展串輸入到所述存儲裝置中。
17.根據(jù)權(quán)利要求16的裝置,其中在所述當前循環(huán)中接收所述未識別的壓縮編碼信號,所述其他輸入裝置用于在所述當前循環(huán)期間,將所述其他擴展串和所述附加擴展串輸入到所述存儲裝置中。
18.根據(jù)權(quán)利要求14的裝置還包括利用具有與其有關(guān)的相應編碼的所有單一字符串來初始化所述存儲裝置的裝置。
19.根據(jù)權(quán)利要求14的裝置,其中所述壓縮編碼信號流包括一個具有未壓縮格式的數(shù)據(jù)字符信號,它跟隨于一個表示正在接收該數(shù)據(jù)字符信號的標識之后,具有未壓縮格式的所述數(shù)據(jù)字符信號,與所述數(shù)據(jù)壓縮裝置在所述數(shù)據(jù)字符信號流中第一次遇到的數(shù)據(jù)字符信號相對應,所述裝置還包括以單一字符串的形式,將以未壓縮格式接收的所述數(shù)據(jù)字符信號輸入到所述存儲裝置的裝置,以及輸出以未壓縮格式接收的所述數(shù)據(jù)字符信號的裝置。
20.根據(jù)權(quán)利要求19的裝置,其中所述標識包括一個0編碼。
21.根據(jù)權(quán)利要求17的裝置,其中所述數(shù)據(jù)字符信號流包括一個重復字符串,重復字符串包括一個重復字符,所述數(shù)據(jù)壓縮裝置用于將所述重復字符串壓縮為兩個連續(xù)壓縮編碼信號,以及以鏈接樹結(jié)構(gòu)的方式,在所述存儲裝置中存儲所述串。
22.根據(jù)權(quán)利要求21的裝置,其中所述先前接收的壓縮編碼信號包括一個第一所述連續(xù)壓縮編碼信號,所述未識別的壓縮編碼信號包括一個第二所述連續(xù)壓縮編碼信號,所述先前恢復串包括所述重復字符,并且與所述未識別的壓縮編碼信號相對應的所述串包括所述重復字符串,經(jīng)過所述樹沿某條路徑存儲所述先前恢復串,以及所述輸入裝置和所述其他輸入裝置用于沿所述路徑輸入所述其他擴展串和所述附加擴展串。
23.根據(jù)權(quán)利要求17的裝置,其中所述數(shù)據(jù)字符信號流包括一個重復字符組串,重復字符組串包括一個重復字符組,所述數(shù)據(jù)壓縮裝置用于將所述重復字符組串壓縮為兩個連續(xù)壓縮編碼信號,以及以鏈接樹結(jié)構(gòu)的方式,在所述存儲裝置中存儲所述串。
24.根據(jù)權(quán)利要求23的裝置,其中所述先前接收的壓縮編碼信號包括一個第一所述連續(xù)壓縮編碼信號,所述未識別的壓縮編碼信號包括一個第二所述連續(xù)壓縮編碼信號,所述先前恢復串包括所述重復字符組,并且與所述未識別的壓縮編碼信號相對應的所述串包括所述重復字符組串,經(jīng)過所述樹沿某條路徑存儲所述先前恢復串,以及所述輸入裝置和所述其他輸入裝置能夠沿所述路徑輸入所述其他擴展串和所述附加擴展串。
25.根據(jù)壓縮編碼信號流恢復數(shù)據(jù)字符信號流的數(shù)據(jù)解壓縮裝置,該裝置包括用于接收所述壓縮編碼信號流的裝置,用于存儲數(shù)據(jù)字符信號串的存儲裝置,每個所述串具有一個與此有關(guān)的編碼信號,利用當前接收的壓縮編碼信號訪問所述存儲裝置的裝置,用于從與所述當前接收的壓縮編碼信號相對應的所述存儲裝置中恢復串,從而恢復其數(shù)據(jù)字符信號,用于輸入到所述存儲裝置的裝置,擴展串包括與先前接收的壓縮編碼信號相對應的先前恢復串,其中依次利用與所述當前接收的壓縮編碼信號相對應的所述恢復串的每個數(shù)據(jù)字符信號擴展先前接收的壓縮編碼信號,輸入到所述存儲裝置的其他裝置,其他擴展串響應于一個未識別的壓縮編碼信號的接收,將有關(guān)編碼信號指派到所述擴展串和所述其他擴展串的裝置,所述其他輸入裝置用于根據(jù)所述先前恢復串生成所述其他擴展串,數(shù)據(jù)字符信號的數(shù)目包括所述先前恢復串,將所述未識別的壓縮編碼信號和所述編碼信號指派到所述其他擴展串,一個所述其他擴展串為與所述未識別的壓縮編碼信號相對應的串,以及提供與所述未識別的壓縮編碼信號相對應的所述串的數(shù)據(jù)字符信號的裝置,以便恢復所述數(shù)據(jù)字符信號。
26.將數(shù)據(jù)字符信號流壓縮為壓縮編碼信號流的數(shù)據(jù)壓縮方法,該方法包括將數(shù)據(jù)字符信號串存儲到存儲裝置中,每個所述串具有一個與此有關(guān)的編碼信號,通過比較所述流與所述存儲串來搜索所述數(shù)據(jù)字符信號流,以便在確定預定匹配之前,進行逐個字符匹配,提供與所述預定匹配有關(guān)的編碼信號,以便提供所述壓縮編碼信號流,輸入到所述存儲裝置,與所述逐字符匹配交錯,當每個數(shù)據(jù)字符信號匹配時,擴展串包括一個先前匹配串,該匹配串依次與利用各數(shù)據(jù)字符信號擴展的上次提供的編碼信號相對應,以及將有關(guān)編碼信號指派給所述擴展串。
27.根據(jù)權(quán)利要求26的方法,其中所述輸入步驟包括當每個所述數(shù)據(jù)字符信號匹配并且在下一數(shù)據(jù)字符信號匹配之前,將一個所述擴展串輸入到所述存儲裝置中
28.根據(jù)權(quán)利要求27的方法,其中所述預定匹配包括所述數(shù)據(jù)字符信號流與所述存儲串之間的最長匹配,所述提供步驟包括提供與所述最長匹配有關(guān)的編碼信號,以便提供所述壓縮編碼信號流。
29.根據(jù)權(quán)利要求28的方法,其中所述方法在連續(xù)串匹配循環(huán)中運行,在所述連續(xù)循環(huán)中確定有關(guān)的最長匹配串,當前循環(huán)跟隨先前循環(huán),所述先前匹配串在所述先前循環(huán)中與在所述先前循環(huán)中提供的所述上次提供的編碼信號匹配,所述逐字符匹配出現(xiàn)在所述當前循環(huán)中,在所述當前循環(huán)中,利用所述每個數(shù)據(jù)字符信號擴展所述先前匹配串。
30.根據(jù)權(quán)利要求29的方法,其中執(zhí)行所述搜索步驟和所述輸入步驟,從而當部分串W與數(shù)據(jù)字符信號C匹配時,將一個所述擴展串輸入到所述存儲裝置中,其中所述數(shù)據(jù)字符信號C作為串PW的擴展字符,P為所述先前匹配串,W位于所述當前循環(huán)中的匹配處理過程中。
31.根據(jù)權(quán)利要求29的方法,其中所述搜索步驟包括所述逐字符匹配期間通過確定數(shù)據(jù)字符信號何時失配來確定何時達到所述最長匹配,所述搜索步驟包括利用所述失配數(shù)據(jù)字符信號開始下一個串匹配循環(huán)。
32.根據(jù)權(quán)利要求26的方法還包括利用具有與其有關(guān)的相應編碼的所有單一字符串來初始化所述存儲裝置。
33.根據(jù)權(quán)利要求26的方法還包括輸出跟隨于一標識之后的未壓縮格式的第一次遇到的數(shù)據(jù)字符信號,該標識表示正在輸出以上數(shù)據(jù)字符信號,以及以單一字符串的形式,將第一次遇到的所述數(shù)據(jù)字符信號輸入到所述存儲裝置中。
34.根據(jù)權(quán)利要求33的方法,其中所述標識包括一個0編碼。
35.根據(jù)權(quán)利要求29的方法,其中所述存儲步驟包括以鏈接樹結(jié)構(gòu)的方式將所述串存儲到所述存儲裝置中,所述數(shù)據(jù)字符信號流包括一個重復字符串,所述重復字符串包括一個重復字符,所述方法將所述重復字符串壓縮為兩個壓縮編碼信號,而不考慮其長度。
36.根據(jù)權(quán)利要求35的方法,其中所述先前匹配串包括所述重復字符,所述搜索步驟包括經(jīng)過所述樹沿某條路徑匹配所述重復字符串,所述輸入步驟包括沿所述路徑輸入所述擴展串,從而將所述重復字符串壓縮為兩個壓縮編碼信號,而不考慮其長度。
37.根據(jù)權(quán)利要求29的裝置,其中所述存儲步驟包括以鏈接樹結(jié)構(gòu)的方式將所述串存儲到所述存儲裝置中,所述數(shù)據(jù)字符信號流包括一個重復字符組串,所述重復字符組串包括一個重復字符組,所述方法將所述重復字符組串壓縮為兩個壓縮編碼信號,而不考慮其長度。
38.根據(jù)權(quán)利要求37的方法,其中所述先前匹配串包括所述重復字符組,所述搜索步驟包括經(jīng)過所述樹沿某條路徑匹配所述重復字符組串,所述輸入步驟包括沿所述路徑輸入所述擴展串,從而將所述重復字符組串壓縮為兩個壓縮編碼信號,而不考慮其長度。
39.響應于數(shù)據(jù)字符信號流,接收數(shù)據(jù)壓縮裝置提供的壓縮編碼信號流的數(shù)據(jù)解壓縮方法,所述方法用于根據(jù)所述壓縮編碼信號流恢復所述數(shù)據(jù)字符信號流,所述方法包括在存儲裝置中存儲數(shù)據(jù)字符信號串,每個所述串具有一個與此有關(guān)的編碼信號,利用當前接收的壓縮編碼信號訪問所述存儲裝置,用于從與所述當前接收的壓縮編碼信號相對應的所述存儲裝置中恢復串,從而恢復其數(shù)據(jù)字符信號,輸入到所述存儲裝置,擴展串包括與先前接收的壓縮編碼信號相對應的先前恢復串,其中依次利用與所述當前接收的壓縮編碼信號相對應的所述恢復串的每個數(shù)據(jù)字符信號擴展所述先前接收的壓縮編碼信號,將有關(guān)編碼信號指派到所述擴展串,進一步輸入到所述存儲裝置,其他擴展串響應于一個未識別的壓縮編碼信號的接收,所述其他擴展串包括與所述先前接收的壓縮編碼信號相對應的所述先前恢復串,其中依次利用所述先前恢復串的每個數(shù)據(jù)字符信號,順序重復擴展所述先前接收的壓縮編碼信號,直到輸入一個與所述未識別的壓縮編碼信號相對應的串,將有關(guān)編碼信號指派到所述其他擴展串,以及提供與所述未識別的壓縮編碼信號相對應的所述串的數(shù)據(jù)字符信號,以便恢復所述數(shù)據(jù)字符信號。
40.根據(jù)權(quán)利要求39的方法,其中所述其他輸入步驟包括輸入到所述存儲裝置,附加擴展串包括與所述未識別的壓縮編碼信號相對應的所述串,其中依次利用所述先前恢復串的數(shù)據(jù)字符信號進一步擴展所述未識別的壓縮編碼信號,直到將所述附加擴展串的數(shù)目輸入到所述存儲裝置中,所述數(shù)目等于包括所述先前恢復串的數(shù)據(jù)字符信號的數(shù)目,將有關(guān)編碼信號指派到所述附加擴展串。
41.根據(jù)權(quán)利要求40的方法,其中所述方法在連續(xù)串恢復循環(huán)中運行,在所述連續(xù)循環(huán)中恢復相應串,當前循環(huán)跟隨前一循環(huán),利用在所述前一循環(huán)中接收的所述先前接收的壓縮編碼信號在所述前一循環(huán)中恢復所述先前恢復串,在所述當前循環(huán)期間,接收所述當前接收的壓縮編碼信號,以及所述輸入步驟包括在所述當前循環(huán)期間,將所述擴展串輸入到所述存儲裝置中。
42.根據(jù)權(quán)利要求41的方法,其中在所述當前循環(huán)中接收所述未識別的壓縮編碼信號,所述其他輸入步驟包括在所述當前循環(huán)期間將所述其他擴展串和所述附加擴展串輸入到所述存儲裝置中。
43.根據(jù)權(quán)利要求39的方法還包括利用具有與其有關(guān)的相應編碼的所有單一字符串來初始化所述存儲裝置。
44.根據(jù)權(quán)利要求39的方法,其中所述壓縮編碼信號流包括一個數(shù)據(jù)字符信號,所述數(shù)據(jù)字符信號具有未壓縮格式,跟隨于一個標識之后,所述標識表示正在接收該數(shù)據(jù)字符信號,具有未壓縮格式的所述數(shù)據(jù)字符信號與所述數(shù)據(jù)壓縮裝置在所述數(shù)據(jù)字符信號流中第一次遇到的數(shù)據(jù)字符信號相對應,所述方法還包括以單一字符串的形式將以未壓縮格式接收的所述數(shù)據(jù)字符信號輸入到所述存儲裝置中,以及輸出以來壓縮格式接收的所述數(shù)據(jù)字符信號。
45.根據(jù)權(quán)利要求44的方法,其中所述標識包括一個0編碼。
46.根據(jù)權(quán)利要求42的方法,其中所述數(shù)據(jù)字符信號流包括一個重復字符串,所述重復字符串包括一個重復字符,所述數(shù)據(jù)壓縮裝置用于將所述重復字符串壓縮為兩個連續(xù)壓縮編碼信號,以及所述存儲步驟包括以鏈接樹結(jié)構(gòu)的方式,在所述存儲裝置中存儲所述串。
47.根據(jù)權(quán)利要求46的方法,其中所述先前接收的壓縮編碼信號包括一個第一所述連續(xù)壓縮編碼信號,所述未識別的壓縮編碼信號包括一個第二所述連續(xù)壓縮編碼信號,所述先前恢復串包括所述重復字符,并且與所述未識別的壓縮編碼信號相對應的所述串包括所述重復字符串,經(jīng)過所述樹沿某條路徑存儲所述先前恢復串,以及所述輸入步驟和所述其他輸入步驟包括沿所述路徑輸入所述其他擴展串和所述附加擴展串。
48.根據(jù)權(quán)利要求42的方法,其中所述數(shù)據(jù)字符信號流包括一個重復字符組串,所述重復字符組串包括一個重復字符組,所述數(shù)據(jù)壓縮裝置用于將所述重復字符組串壓縮為兩個連續(xù)壓縮編碼信號,以及所述存儲步驟包括以鏈接樹結(jié)構(gòu)的方式,在所述存儲裝置中存儲所述串。
49.根據(jù)權(quán)利要求48的方法,其中所述先前接收的壓縮編碼信號包括一個第一所述連續(xù)壓縮編碼信號,所述未識別的壓縮編碼信號包括一個第二所述連續(xù)壓縮編碼信號,所述先前恢復串包括所述重復字符組,并且與所述未識別的壓縮編碼信號相對應的所述串包括所述重復字符組串,經(jīng)過所述樹沿某條路徑存儲所述先前恢復串,以及所述輸入步驟和所述其他輸入步驟包括沿所述路徑輸入所述其他擴展串和所述附加擴展串。
50.根據(jù)壓縮編碼信號流恢復數(shù)據(jù)字符信號流的數(shù)據(jù)解壓縮方法,該方法包括接收所述壓縮編碼信號流,在存儲裝置中存儲數(shù)據(jù)字符信號串,每個所述串具有一個與此有關(guān)的編碼信號,利用當前接收的壓縮編碼信號訪問所述存儲裝置,用于從與所述當前接收的壓縮編碼信號相對應的所述存儲裝置中恢復串,從而恢復其數(shù)據(jù)字符信號,輸入到所述存儲裝置,擴展串包括與先前接收的壓縮編碼信號相對應的先前恢復串,其中依次利用與所述當前接收的壓縮編碼信號相對應的所述恢復串的每個數(shù)據(jù)字符信號,擴展所述先前接收的壓縮編碼信號,進一步輸入到所述存儲裝置,其他擴展串響應于一個未識別的壓縮編碼信號的接收,將相應編碼信號指派到所述擴展串和所述其他擴展串,所述其他輸入步驟包括根據(jù)所述先前恢復串生成所述其他擴展串,數(shù)據(jù)字符信號的數(shù)目包括所述先前恢復串,將所述未識別的壓縮編碼信號和所述編碼信號指派到所述其他擴展串,一個所述其他擴展串為與所述未識別的壓縮編碼信號相對應的串,提供與所述未識別的壓縮編碼信號相對應的所述串的數(shù)據(jù)字符信號,以便恢復所述數(shù)據(jù)字符信號。
全文摘要
基于字典的數(shù)據(jù)壓縮和解壓縮系統(tǒng),在壓縮裝置(10)中,當部分串W與字符C在字典(13)中匹配時,將以C作為串PW的擴展字符的新串輸入到字典中,其中P為與上次輸出的壓縮編碼信號相對應的串。將一個更新串輸入(113)到所讀取并且匹配的各輸入字符的壓縮字典中。更新是即時的,并與當前串的逐字符匹配交錯。繼續(xù)更新過程,直至在字典中找到最長匹配。在串匹配循環(huán)中輸出(106)最長匹配串的編碼。如果在字典中存在單一字符或多字符串“A”,就將串AAA…A編碼為兩個壓縮編碼信號,而不考慮串的長度。以上編碼處理將在解壓縮裝置產(chǎn)生一個未識別的編碼信號。解壓縮裝置(40)響應于未識別的編碼信號,根據(jù)與先前接收的編碼信號相對應的恢復串(161),未識別的編碼信號。解壓縮裝置的擴展編碼以及先前恢復串中的字符數(shù)目(135),將更新串輸入到解壓縮字典(43)中。
文檔編號H03M7/46GK1228887SQ97197455
公開日1999年9月15日 申請日期1997年7月23日 優(yōu)先權(quán)日1996年7月24日
發(fā)明者泰瑞·A·韋爾奇, 阿爾伯特·B·庫珀 申請人:尤尼西斯公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1