勵志

勵志人生知識庫

lz78算法

LZ78算法是一種基於字典的無損數據壓縮算法,由雅各布·澤維阿里夫·雅科文於1978年提出。該算法通過維護一個動態生成的詞典來實現對輸入數據流的壓縮。其核心思想是不斷地從字元流中提取新的「綴-符串」(通俗地理解為新「詞條」),然後用「代號」也就是碼字來表示這個「詞條」。這樣一來,對字元流的編碼就變成了用碼字去替換字元流,生成碼字流,從而達到壓縮數據的目的。

在編碼開始時,詞典是空的。在這種情況下,編碼器就輸出一個表示空字元串的特殊碼字(例如「0」)和字元流中的第一個字元C,並把這個字元C添加到詞典中作為一個由一個字元組成的綴-符串。在編碼過程中,如果出現類似的 情況,也照此辦理。在詞典中已經包含某些綴-符串之後,如果「當前前綴P +當前字元C」已經在詞典中,就用字元C來擴展這個前綴。這樣的擴展操作一直重複到獲得一個在詞典中沒有的綴-符串為止。此時就輸出表示當前前綴P的碼字和字元C,並把P+C添加到詞典中作為前綴,然後開始處理字元流中的下一個前綴。

與LZ77相比,LZ78的最大優點是在每個編碼步驟中減少了綴-符串比較的數目,而壓縮率與LZ77類似。最流行的LZ78壓縮形式是LZW算法,這個算法是Terry Welch所開發的一個LZ78變體。