LZW演算法的個人理解與簡單Python實現

2021-06-22 00:52:59 字數 3559 閱讀 6094

參考

我是參照他括號裡給出不同的實現,即「string  =  string  + character" 和 「character  =  first  character  in  string "

參考博文對lzw演算法的解釋比較詳細。所以這裡我只談談我個人是如何理解這個演算法。表達不是很清晰,請原諒。

壓縮過程不難理解。我主要說說解壓過程。

無論是壓縮還是解壓,都是圍繞字典展開的。所以要理解lzw演算法,應該首先明白字典建立以及還原的原理。

所以,如何理解演算法中的這句話「add  old_code  +  character  to  the  translation  table 」是關鍵。我的理解是old_code是上乙個數字**對應的字串(對應程式中變數oldcodestr),character是當前數字**對應字串的首個字元(對應程式中curcodestr[0])。

我們知道,每個**數字(設為x)被輸出都是有原因的。原因就是遇到了字典中沒有的字串(設為字串a)。為了可以還原字典,我們要得到a。而由壓縮的原理可知,a = (x在字典中對應的字串(設為b)) + (原字元流中b後面緊接著的字元(設為c))(對應語句3)。(因為在壓縮時,遇到字典中沒有的字串時,是將這個字串的字首的**數字輸出的,反過來,**數字對應的字串也只是所遇到的字典中沒有的字串的字首)。其中c也就是下乙個數字**所對應字串的首個字元。

也就是說,每乙個數字都代表著壓縮時字典多了乙個條目。而這個條目具體是什麼,必須等到輸入下乙個數字才能得到(因為,下乙個數字**對應的字串的首字元就是導致上個數字**輸出的那個字典中沒有的字串的最後乙個字元)。所以,在解壓時,第乙個數字**沒有還原字典條目,之後每個數字**都還原出乙個字典條目。

分支2是當前數字在字典中還沒有對應的字串的情況。這時,可以斷定這個數字對應的字串就是此次要還原的字典條目。(因為,當前數字被輸出,則它肯定已經在壓縮字典中了,而壓縮字典中還沒有被還原的只有此次要被還原的字典條目了。)而此次要還原的字典條目字首的已知是b,所以當前數字對應的字串為b + (b的首個字元)(對應語句2)。

python簡單示例,程式假設待壓縮的字串只含a、b、c三種字元

與漫水填充演算法的個人理解

第一功能說明 漫水前衝演算法,它是用來指定顏色填充的乙個連線域,常常被用來標記或者分離影象的一部分進行處理,或者分析也能用於道路識別,行駛汽車的無人駕駛。個人通俗的理解 漫水填充演算法,就像水一樣流過,所有能夠被流到的地方,而被水所覆蓋的地方,則會變成所定義的顏色,而沒有被扭到的地方則會形成乙個個小...

kmeans演算法的個人理解

1 kmeans演算法是一種什麼樣的演算法?答 kmeans演算法是一種聚類演算法,在使用kmeans演算法時並不需要事先構建模型 如決策樹判斷需事先構建決策樹,knn判斷需事先構建kd樹等 而是直接進行聚類。它的基本過程是 1.對於n個n維空間的待分類點,選出k個點作為初始質心 初始中心點 2.對...

KMP演算法的個人理解

自學了一段時間,剛剛準備轉行做軟體開發,面試過程中被指出計算機基礎知識薄弱。因為是非科班出生,確實有些計算機方面的基礎沒有學過,也開始惡補這些方面的東西。最近在學習資料結構與演算法過程中,學到kmp演算法,甚是難解。看了阮一峰的網路日誌後才慢慢理解,但也發現其中的瑕疵,在此也順帶指出,至於對或不對,...