一、實驗內(nèi)容 1、用Matlab實現(xiàn)Huffman編碼算法程序; 2、要求程序輸出顯示所有的碼字以及編碼效率; 3、設(shè)計簡單的輸入界面(可以是簡單的文字提示信息),程序運行時提示用 戶輸入代表信源符號概率的向量;要對用戶輸入的概率向量進(jìn)行合法性檢查。 二、實驗原理 1、二進(jìn)制Huffman編碼的基本原理及算法 (1) 把信源符號集中的所有符號按概率從大到小排隊。 (2) 取概率最小的兩個符號作為兩片葉子合并(縮減)到一個 節(jié)點。 (3) 視此節(jié)點為新符號,其概率等于被合并(縮減)的兩個概率之和,參與概率排隊。 (4) 重復(fù)(2)(3)兩步驟,直至全部符號都被合并(縮減)到根。 (5) 從根出發(fā),對各分枝標(biāo)記0和1。從根到葉的路徑就給出了各個碼字的編碼和碼長。 2、程序設(shè)計的原理 (1)程序的輸入:以一維數(shù)組的形式輸入要進(jìn)行huffman編碼的信源符號的概率,在運行該程序前,顯示文字提示信息,提示所要輸入的概率矢量;然后對輸入的概率矢量進(jìn)行合法性判斷,原則為:如果概率矢量中存在小于0的項,則輸入不合法,提示重新輸入;如果概率矢量的求和大于1,則輸入也不合法,提示重新輸入。 (2)huffman編碼具體實現(xiàn)原理: 1>在輸入的概率矩陣p正確的前提條件下,對p進(jìn)行排序,并用矩陣L記錄p排序之前各元素的順序,然后將排序后的概率數(shù)組p的前兩項,即概率最小的兩個數(shù)加和,得到新的一組概率序列,重復(fù)以上過程,最后得到一個記錄概率加和過程的矩陣p以及每次排序之前概率順序的矩陣a。 2>新生成一個n-1行n列,并且每個元素含有n個字符的空白矩陣,然后進(jìn)行huffman編碼: 將c矩陣的第n-1行的第一和第二個元素分別令為0和1(表示在編碼時,根 節(jié)點之下的概率較小的元素后補(bǔ)0,概率較大的元素后補(bǔ)1,后面的編碼都遵守這個原則) 然后對n-i-1的第一、二個元素進(jìn)行編碼,首先在矩陣a中第n-i行找到值為1所在的位置,然后在c矩陣中第n-i行中找到對應(yīng)位置的編碼(該編碼即為第n-i-1行第一、二個元素的根節(jié)點),則矩陣c的第n-i行的第一、二個元素的n-1的字符為以上求得的編碼值,根據(jù)之前的規(guī)則,第一個元素最后補(bǔ)0,第二個元素最后補(bǔ)1,則完成該行的第一二個元素的編碼, 最后將該行的其他元素按照“矩陣c中第n-i行第j+1列的值等于對應(yīng)于a矩陣中第n-i+1行中值為j+1的前面一個元素的位置在c矩陣中的編碼值”的原則進(jìn)行賦值,重復(fù)以上過程即可完成huffman編碼。 3>計算信源熵和平均碼長,其比值即為編碼密碼效率。 n-i行的第一、二個元素的n-1的字符為以上求得的編碼值,根據(jù)之前的規(guī)則,第一個元素最后補(bǔ)0,第二個元素最后補(bǔ)1,則完成該行的第一二個元素的編碼, 最后將該行的其他元素按照“矩陣c中第n-i行第j+1列的值等于對應(yīng)于a矩陣中第n-i+1行中值為j+1的前面一個元素的位置在c矩陣中的編碼值”的原則進(jìn)行賦值,重復(fù)以上過程即可完成huffman編碼。
調(diào)用函數(shù):
結(jié)果顯示:
|
|