保存范式哈夫曼樹的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及編碼存儲(chǔ)技術(shù),尤其設(shè)及保存范式哈夫曼樹的方法及裝置。
【背景技術(shù)】
[0002] 在進(jìn)行數(shù)據(jù)壓縮時(shí)常用到范式哈夫曼樹,如:GZIB、化IB、PNG、JPEG、MPEG。實(shí)際壓 縮中,除了保存壓縮編碼,還需要保存范式哈夫曼樹及原始數(shù)據(jù)總量等,運(yùn)樣才能夠解壓 縮。本發(fā)明方案針對(duì)的是如何保存范式哈夫曼樹。
[0003] 首先介紹范式哈夫曼編碼的原理,范式哈夫曼編碼過(guò)程大概分為4步:
[0004] 1)對(duì)壓縮單元進(jìn)行計(jì)數(shù)或概率統(tǒng)計(jì),并按照從大到小進(jìn)行排序,假定對(duì)字節(jié)數(shù)據(jù) 統(tǒng)計(jì)結(jié)果如下述表1所示:
[0005]
[0006] 表1對(duì)壓縮單元進(jìn)行計(jì)數(shù)或概率統(tǒng)計(jì)后的排序
[0007] 其中,符號(hào)用于對(duì)壓縮單元進(jìn)行標(biāo)識(shí),計(jì)數(shù)表示相應(yīng)壓縮單元的個(gè)數(shù),概率表示相 應(yīng)壓縮單元占總壓縮單元的比例。
[0008] 2)按照統(tǒng)計(jì)結(jié)果創(chuàng)建范式哈夫曼樹,具體地:總是找到兩個(gè)出現(xiàn)概率或次數(shù)最少 的合并二叉樹,直到合并到一個(gè)根節(jié)點(diǎn)為止。假定按照上述結(jié)果分a,b,. .e共5步(e為結(jié) 果),創(chuàng)建流程如圖1所示。
[0009] 3)按照左節(jié)點(diǎn)編碼為0,右節(jié)點(diǎn)為1對(duì)數(shù)據(jù)單元進(jìn)行編碼,產(chǎn)生范式哈夫曼編碼表, 如表2所示。
[0010] _
[0011] 表2范式哈夫曼編碼表
[0012] 4)按照編碼進(jìn)行數(shù)據(jù)替換即壓縮,也就是原來(lái)需要8位存儲(chǔ)的數(shù)據(jù)A,B,. .E,最后 可W用1,3,3,3,3位數(shù)據(jù)代替,順序存儲(chǔ),最終實(shí)現(xiàn)了壓縮的目的。若要解壓縮還需要記錄 編碼表,也即{A,0},{B,100},{C,101},{D,110},巧,111}。由于主要討論如何存儲(chǔ)編碼表, 編碼壓縮的詳細(xì)過(guò)程及解碼過(guò)程就不再詳細(xì)介紹了。
[0013] 目前存儲(chǔ)范式哈夫曼編碼表多采用如下方案:
[0014] 1)記錄碼長(zhǎng)方式:
[0015]
[0016] 表3記錄哈夫曼編碼的碼長(zhǎng)表格
[0017] 如上表所示,碼表需要保存的是1,3,3,3,3,因?yàn)榉妒焦蚵鼧涞奶攸c(diǎn),由運(yùn)幾個(gè) 數(shù)字就可W還原出原來(lái)的樹。用碼長(zhǎng)代替編碼的好處是存儲(chǔ)位數(shù)的寬度是比較有限的,就 拿全部的單字節(jié)碼表來(lái)看,最長(zhǎng)也不會(huì)超過(guò)255位,也就是最長(zhǎng)為1個(gè)字節(jié)。
[0018] 2)記錄碼長(zhǎng)基礎(chǔ)上對(duì)碼表進(jìn)行二次壓縮的方式:
[0019] 將上述碼表的數(shù)據(jù)1,3,3,3,3再次進(jìn)行壓縮,如使用化E壓縮,則壓縮后變?yōu)椋?,0, 3,3(代表0+1 = 1個(gè)1和3+1 = 4個(gè)3),也有別的方式的壓縮的,當(dāng)有大量重復(fù)數(shù)據(jù)時(shí),例如長(zhǎng) 度全為別寸,可能記錄的就是8,255。
[0020] 現(xiàn)有保存范式哈夫曼樹的方案存在W下缺陷:
[0021] 不壓縮情況下:最大碼長(zhǎng)較長(zhǎng)時(shí)每個(gè)碼長(zhǎng)保存位數(shù)需要加大,極端情況下字符 (8bit)壓縮,碼表長(zhǎng)度將達(dá)到256字節(jié)。
[0022] 壓縮情況下:多數(shù)壓縮算法,面對(duì)重復(fù)字節(jié)壓縮率都會(huì)提高,但面對(duì)幾乎每個(gè)碼長(zhǎng) 都很少時(shí)(也即重復(fù)性較少時(shí))就較難W發(fā)揮作用了。
[0023] 綜上,現(xiàn)有保存范式哈夫曼樹的方案都存在碼表過(guò)大的問(wèn)題,極端情況下達(dá)到甚 至超過(guò)直接存碼表。
【發(fā)明內(nèi)容】
[0024] 本發(fā)明提供了一種保存范式哈夫曼樹的方法,該方法能夠采用盡量少的數(shù)據(jù)來(lái)保 存范式哈夫曼樹,提高存儲(chǔ)效率。
[0025] 本發(fā)明提供了一種保存范式哈夫曼樹的裝置,該裝置能夠采用盡量少的數(shù)據(jù)來(lái)保 存范式哈夫曼樹,提高存儲(chǔ)效率。
[0026] 本發(fā)明提供了另一種保存范式哈夫曼樹的方法,該方法能夠采用盡量少的數(shù)據(jù)來(lái) 保存范式哈夫曼樹,提高存儲(chǔ)效率。
[0027] 本發(fā)明提供了另一種保存范式哈夫曼樹的裝置,該裝置能夠采用盡量少的數(shù)據(jù)來(lái) 保存范式哈夫曼樹,提高存儲(chǔ)效率。
[0028] -種保存范式哈夫曼樹的方法,該方法包括:
[0029] 對(duì)范式哈夫曼樹的節(jié)點(diǎn)進(jìn)行標(biāo)記,用Μ標(biāo)記節(jié)點(diǎn)有子樹,用飾示記節(jié)點(diǎn)無(wú)子樹;
[0030] 由上至下對(duì)范式哈夫曼樹每層節(jié)點(diǎn)的標(biāo)記依次進(jìn)行記錄,具體地:采用從左至右 的順序,從第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Ν的節(jié)點(diǎn);
[0031] 將記錄的節(jié)點(diǎn)標(biāo)記作為最終記錄結(jié)果,保存最終記錄結(jié)果。
[0032] -種保存范式哈夫曼樹的裝置,該裝置包括節(jié)點(diǎn)標(biāo)記記錄模塊和保存模塊;
[0033] 所述節(jié)點(diǎn)標(biāo)記記錄模塊,對(duì)范式哈夫曼樹的節(jié)點(diǎn)進(jìn)行標(biāo)記,用Μ標(biāo)記節(jié)點(diǎn)有子樹, 用Ν標(biāo)記節(jié)點(diǎn)無(wú)子樹;由上至下對(duì)范式哈夫曼樹每層節(jié)點(diǎn)的標(biāo)記依次進(jìn)行記錄,具體地:采 用從左至右的順序,從第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Ν的節(jié)點(diǎn);將記錄的節(jié)點(diǎn) 標(biāo)記發(fā)送給所述保存模塊;
[0034] 所述保存模塊,將記錄的節(jié)點(diǎn)標(biāo)記作為最終記錄結(jié)果,保存最終記錄結(jié)果。
[0035] -種保存范式哈夫曼樹的方法,該方法包括:
[0036] 對(duì)范式哈夫曼樹的節(jié)點(diǎn)進(jìn)行標(biāo)記,用Μ標(biāo)記節(jié)點(diǎn)有子樹,用飾示記節(jié)點(diǎn)無(wú)子樹;
[0037] 由上至下對(duì)范式哈夫曼樹每層節(jié)點(diǎn)的標(biāo)記依次進(jìn)行記錄,具體地:采用從右至左 的順序,從第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Μ的節(jié)點(diǎn);
[003引將記錄的節(jié)點(diǎn)標(biāo)記作為最終記錄結(jié)果,保存最終記錄結(jié)果。
[0039] -種保存范式哈夫曼樹的裝置,該裝置包括節(jié)點(diǎn)標(biāo)記記錄模塊和保存模塊;
[0040] 所述節(jié)點(diǎn)標(biāo)記記錄模塊,對(duì)范式哈夫曼樹的節(jié)點(diǎn)進(jìn)行標(biāo)記,用Μ標(biāo)記節(jié)點(diǎn)有子樹, 用Ν標(biāo)記節(jié)點(diǎn)無(wú)子樹;由上至下對(duì)范式哈夫曼樹每層節(jié)點(diǎn)的標(biāo)記依次進(jìn)行記錄,具體地:采 用從右至左的順序,從第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Μ的節(jié)點(diǎn);將記錄的節(jié)點(diǎn) 標(biāo)記發(fā)送給所述保存模塊;
[0041] 所述保存模塊,將記錄的節(jié)點(diǎn)標(biāo)記作為最終記錄結(jié)果,保存最終記錄結(jié)果。
[0042] 從上述方案可W看出,本發(fā)明中,對(duì)范式哈夫曼樹的節(jié)點(diǎn)進(jìn)行標(biāo)記,再對(duì)每層節(jié)點(diǎn) 的標(biāo)記進(jìn)行記錄,而后,將記錄的節(jié)點(diǎn)標(biāo)記作為最終記錄結(jié)果,保存最終記錄結(jié)果。本發(fā)明 采用從左至右或從右至左的順序?qū)γ繉庸?jié)點(diǎn)的標(biāo)記進(jìn)行記錄,從第一個(gè)節(jié)點(diǎn)開始記錄,記 錄到第一個(gè)不為Ν或不為Μ的節(jié)點(diǎn)。具體地,采用從左至右對(duì)每層節(jié)點(diǎn)的標(biāo)記進(jìn)行記錄時(shí),從 第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Ν的節(jié)點(diǎn),后續(xù)節(jié)點(diǎn)不再進(jìn)行記錄;類似地,采用 從右至左對(duì)每層節(jié)點(diǎn)的標(biāo)記進(jìn)行記錄時(shí),從第一個(gè)節(jié)點(diǎn)開始記錄,只記錄到第一個(gè)不為Μ的 節(jié)點(diǎn),后續(xù)節(jié)點(diǎn)不再記錄;另外,在此基礎(chǔ)上不對(duì)每層最右側(cè)節(jié)點(diǎn)和最后一層的所有節(jié)點(diǎn)進(jìn) 行記錄。本申請(qǐng)一改慣有的記錄碼長(zhǎng)方式和二次壓縮方式,提供了更加簡(jiǎn)便的記錄方式,也 減少了存儲(chǔ)數(shù)據(jù),從而提高了存儲(chǔ)效率。
【附圖說(shuō)明】
[0043] 圖1為現(xiàn)有范式哈夫曼樹的創(chuàng)建流程圖;
[0044] 圖2為本發(fā)明保存范式哈夫曼樹的方法示意性流程圖;
[0045] 圖3為本發(fā)明對(duì)范式哈夫曼樹各層進(jìn)行記錄的示意圖實(shí)例;
[0046] 圖4為本發(fā)明保存范式哈夫曼樹的裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0047] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更