專利名稱:哈夫曼樹的存儲(chǔ)方法及利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)編解碼方法,尤其涉及一種哈夫曼樹的存儲(chǔ)方法及利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法。
背景技術(shù):
傳統(tǒng)的哈夫曼編碼(Huffman Coding)采用哈夫曼表格來(lái)存儲(chǔ)哈夫曼樹的節(jié)點(diǎn)信息,其中,每個(gè)節(jié)點(diǎn)通常具備以下三種信息回傳值(Value)、編碼(Code)和編碼長(zhǎng)度(Code Length)。當(dāng)解碼時(shí),便可根據(jù)編碼值,從哈夫曼表格中查找到對(duì)應(yīng)到的回傳值。由于每個(gè)節(jié)點(diǎn)包含三種信息,所以哈夫曼表格中的每一筆資料都需要三個(gè)字段來(lái)儲(chǔ)存,不利于節(jié)省存儲(chǔ)空間。
發(fā)明內(nèi)容
鑒于以上內(nèi)容,有必要提供一種哈夫曼樹的存儲(chǔ)方法,其可利用數(shù)組來(lái)存儲(chǔ)哈夫曼樹的節(jié)點(diǎn)信息。鑒于以上內(nèi)容,還有必要提供一種利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其可利用數(shù)組來(lái)查找哈夫曼樹節(jié)點(diǎn)的回傳值,對(duì)數(shù)據(jù)進(jìn)行解碼。一種哈夫曼樹的存儲(chǔ)方法,該方法包括如下步驟根據(jù)廣度優(yōu)先搜索算法,依序建立哈夫曼樹中每個(gè)節(jié)點(diǎn)的索引值,其中,每個(gè)節(jié)點(diǎn)都包含有一個(gè)回傳值;從根節(jié)點(diǎn)開始,根據(jù)該索引值的順序,依次讀取該哈夫曼樹中的每個(gè)節(jié)點(diǎn);及將每個(gè)節(jié)點(diǎn)的信息分成第一部分信息和第二部分信息,存儲(chǔ)在一個(gè)數(shù)組中。一種利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,該數(shù)組存儲(chǔ)有哈夫曼樹中每個(gè)節(jié)點(diǎn)的信息, 每個(gè)節(jié)點(diǎn)的信息分為第一部分信息和第二部分信息,該方法包括如下步驟(a)獲取待解碼的比特流;(b)從哈夫曼樹中讀取第一個(gè)節(jié)點(diǎn);(c)判斷該節(jié)點(diǎn)是否為葉子節(jié)點(diǎn);(d)如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則依次從該比特流中讀取一比特,根據(jù)該比特的數(shù)值確定下一個(gè)搜尋的節(jié)點(diǎn),然后返回步驟(C),繼續(xù)判斷該下一個(gè)搜尋的節(jié)點(diǎn)是否為葉子節(jié)占.(e)如果該節(jié)點(diǎn)是葉子節(jié)點(diǎn),則根據(jù)該節(jié)點(diǎn)的索引值,從該數(shù)組中查找該節(jié)點(diǎn)的存儲(chǔ)值,從該節(jié)點(diǎn)的存儲(chǔ)值中獲取該節(jié)點(diǎn)的第一部分信息的值,作為該節(jié)點(diǎn)的回傳值;(f)判斷該比特流是否讀取完畢;(g)如果該比特流沒有讀取完畢,則返回步驟(b);(h)如果該比特流讀取完畢,輸出步驟(e)中獲取的每個(gè)節(jié)點(diǎn)的回傳值,以完成該比特流的解碼過(guò)程。相較于現(xiàn)有技術(shù),所述的哈夫曼樹的存儲(chǔ)方法及利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其可利用數(shù)組來(lái)存儲(chǔ)哈夫曼樹的節(jié)點(diǎn)信息,當(dāng)解碼時(shí),再利用該數(shù)組來(lái)查找哈夫曼樹節(jié)點(diǎn)的回傳值,節(jié)省了存儲(chǔ)空間,提高了哈夫曼編碼的效率。
圖1是本發(fā)明存儲(chǔ)模塊和解碼模塊的應(yīng)用環(huán)境圖。圖2是本發(fā)明哈夫曼樹存儲(chǔ)方法的較佳實(shí)施例的流程圖。圖3是現(xiàn)有技術(shù)中的一個(gè)哈夫曼表格的示意圖。圖4是根據(jù)圖3中的哈夫曼表格得出的哈夫曼樹。圖5是根據(jù)圖4中的哈夫曼樹進(jìn)行索引值編號(hào)的示意圖。圖6是本發(fā)明存儲(chǔ)每個(gè)節(jié)點(diǎn)信息的數(shù)據(jù)結(jié)構(gòu)示意圖。圖7是本發(fā)明利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法的較佳實(shí)施例的流程圖。主要元件符號(hào)說(shuō)明
權(quán)利要求
1.一種哈夫曼樹的存儲(chǔ)方法,其特征在于,該方法包括如下步驟根據(jù)廣度優(yōu)先搜索算法,依序建立哈夫曼樹中每個(gè)節(jié)點(diǎn)的索引值,其中,每個(gè)節(jié)點(diǎn)都包含有一個(gè)回傳值;從根節(jié)點(diǎn)開始,根據(jù)該索引值的順序,依次讀取該哈夫曼樹中的每個(gè)節(jié)點(diǎn);及將每個(gè)節(jié)點(diǎn)的信息分成第一部分信息和第二部分信息,存儲(chǔ)在一個(gè)數(shù)組中。
2.如權(quán)利要求1所述的哈夫曼樹的存儲(chǔ)方法,其特征在于,所述將每個(gè)節(jié)點(diǎn)的信息分成第一部分信息和第二部分信息,存儲(chǔ)在一個(gè)數(shù)組中的步驟包括將每個(gè)節(jié)點(diǎn)的第一部分信息的二進(jìn)制數(shù)值和第二部分信息的二進(jìn)制數(shù)值合并在一起;及將該合并后的二進(jìn)制數(shù)值對(duì)應(yīng)的十進(jìn)制數(shù)值存儲(chǔ)在一個(gè)數(shù)組中。
3.如權(quán)利要求2所述的哈夫曼樹的存儲(chǔ)方法,其特征在于,所述將每個(gè)節(jié)點(diǎn)的信息分成第一部分信息和第二部分信息,存儲(chǔ)在一個(gè)數(shù)組中的步驟包括如果目前節(jié)點(diǎn)為內(nèi)部節(jié)點(diǎn),則目前節(jié)點(diǎn)第一部分信息的值為目前節(jié)點(diǎn)的左子節(jié)點(diǎn)的索引值與目前節(jié)點(diǎn)的索引值之差,第二部分信息的值為1 ;及如果目前節(jié)點(diǎn)為外部節(jié)點(diǎn),則目前節(jié)點(diǎn)第一部分信息的值為目前節(jié)點(diǎn)的回傳值,第二部分信息的值為0。
4.如權(quán)利要求2所述的哈夫曼樹的存儲(chǔ)方法,其特征在于,所述第一部分信息的存儲(chǔ)長(zhǎng)度為7bits,所述第二部分信息的存儲(chǔ)長(zhǎng)度為lbit。
5.一種利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,該數(shù)組存儲(chǔ)有哈夫曼樹中每個(gè)節(jié)點(diǎn)的信息,每個(gè)節(jié)點(diǎn)的信息包括第一部分信息和第二部分信息,該方法包括如下步驟(a)獲取待解碼的比特流;(b)從哈夫曼樹中讀取第一個(gè)節(jié)點(diǎn);(c)判斷該節(jié)點(diǎn)是否為葉子節(jié)點(diǎn);(d)如果該節(jié)點(diǎn)不是葉子節(jié)點(diǎn),則依次從該比特流中讀取一比特,根據(jù)該比特的數(shù)值確定下一個(gè)搜尋的節(jié)點(diǎn),然后返回步驟(c),繼續(xù)判斷該下一個(gè)搜尋的節(jié)點(diǎn)是否為葉子節(jié)點(diǎn);(e)如果該節(jié)點(diǎn)是葉子節(jié)點(diǎn),則根據(jù)該節(jié)點(diǎn)的索引值,從該數(shù)組中查找該節(jié)點(diǎn)的存儲(chǔ)值,并從該節(jié)點(diǎn)的存儲(chǔ)值中獲取該節(jié)點(diǎn)的第一部分信息的值,作為該節(jié)點(diǎn)的回傳值;(f)判斷該比特流是否讀取完畢;(g)如果該比特流沒有讀取完畢,則返回步驟(b);(h)如果該比特流讀取完畢,輸出步驟(e)中獲取的每個(gè)節(jié)點(diǎn)的回傳值,以完成該比特流的解碼過(guò)程。
6.如權(quán)利要求5所述的利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,所述數(shù)組存儲(chǔ)每個(gè)節(jié)點(diǎn)的第一部分信息和第二部分信息包括將每個(gè)節(jié)點(diǎn)的第一部分信息的二進(jìn)制數(shù)值和第二部分信息的二進(jìn)制數(shù)值合并在一起;及將該合并后的二進(jìn)制數(shù)值對(duì)應(yīng)的十進(jìn)制數(shù)值存儲(chǔ)在一個(gè)數(shù)組中。
7.如權(quán)利要求6所述的利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,所述數(shù)組存儲(chǔ)每個(gè)節(jié)點(diǎn)的第一部分信息和第二部分信息包括如果目前節(jié)點(diǎn)為內(nèi)部節(jié)點(diǎn),則目前節(jié)點(diǎn)第一部分信息的值為目前節(jié)點(diǎn)的左子節(jié)點(diǎn)的索引值與目前節(jié)點(diǎn)的索引值之差,第二部分信息的值為1 ;及如果目前節(jié)點(diǎn)為外部節(jié)點(diǎn),則目前節(jié)點(diǎn)第一部分信息的值為目前節(jié)點(diǎn)的回傳值,第二部分信息的值為0。
8.如權(quán)利要求7所述的利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,所述判斷該節(jié)點(diǎn)是否為葉子節(jié)點(diǎn)的步驟包括如果該節(jié)點(diǎn)的第二部分信息的值為1,則判定該節(jié)點(diǎn)為內(nèi)部節(jié)點(diǎn);及如果該節(jié)點(diǎn)的第二部分信息的值為0,則判定該節(jié)點(diǎn)為葉子節(jié)點(diǎn)。
9.如權(quán)利要求7所述的利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,所述根據(jù)該比特的數(shù)值確定下一個(gè)搜尋的節(jié)點(diǎn)的步驟包括如果該比特的數(shù)值為0,則下一個(gè)搜尋的節(jié)點(diǎn)的索引值為(目前節(jié)點(diǎn)的索引值+目前節(jié)點(diǎn)的第一部分信息的值);及如果該比特的數(shù)值為1,則下一個(gè)搜尋的節(jié)點(diǎn)的索引值為(目前節(jié)點(diǎn)索引值+目前節(jié)點(diǎn)的第一部分信息的值+1)。
10.如權(quán)利要求9所述的利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,其特征在于,所述目前節(jié)點(diǎn)的第一部分信息的值由以下規(guī)則確定將目前節(jié)點(diǎn)的存儲(chǔ)值對(duì)應(yīng)的二進(jìn)制數(shù)值右移一位,得到一個(gè)右移后的二進(jìn)制數(shù)值;及將該右移后的二進(jìn)制數(shù)值轉(zhuǎn)換成十進(jìn)制數(shù)值即得到目前節(jié)點(diǎn)第一部分信息的值。
全文摘要
一種哈夫曼樹的存儲(chǔ)方法及利用數(shù)組進(jìn)行數(shù)據(jù)解碼的方法,該存儲(chǔ)方法包括如下步驟根據(jù)廣度優(yōu)先搜索算法,依序建立哈夫曼樹中每個(gè)節(jié)點(diǎn)的索引值,其中,每個(gè)節(jié)點(diǎn)都包含有一個(gè)回傳值;從根節(jié)點(diǎn)開始,根據(jù)該索引值的順序,依次讀取該哈夫曼樹中的每個(gè)節(jié)點(diǎn);將每個(gè)節(jié)點(diǎn)的信息分成第一部分信息和第二部分信息,存儲(chǔ)在一個(gè)數(shù)組中。利用本發(fā)明可以節(jié)省存儲(chǔ)空間,提高哈夫曼編碼的效率。
文檔編號(hào)H03M7/42GK102255617SQ20101017672
公開日2011年11月23日 申請(qǐng)日期2010年5月19日 優(yōu)先權(quán)日2010年5月19日
發(fā)明者盧秋樺, 葉建發(fā), 李忠一, 簡(jiǎn)裕峰, 蔡程豐, 鄭山川, 顏?zhàn)谛?申請(qǐng)人:鴻富錦精密工業(yè)(深圳)有限公司, 鴻海精密工業(yè)股份有限公司