古老的編碼技術 哈夫曼編碼

2021-10-05 13:09:59 字數 698 閱讀 3332

//ht陣列中存放的哈夫曼樹,end表示ht陣列中存放結點的最終位置,s1和s2傳遞的是ht陣列中權重值最小的兩個結點在陣列中的位置

void

select

(huffmantree ht,

int end,

int*s1,

int*s2)

min1 = ht[i]

.weight;

*s1 = i;

i++;while

(ht[i]

.parent !=

0&& i <= end)

//對找到的兩個結點比較大小,min2為大的,min1為小的

if(ht[i]

.weight < min1)

else

//兩個結點和後續的所有未構建成樹的結點做比較

for(

int j=i+

1; j <= end; j++

)//如果比最小的還小,將min2=min1,min1賦值新的結點的下標

if(ht[j]

.weight < min1)

//如果介於兩者之間,min2賦值為新的結點的位置下標

else

if(ht[j]

.weight >= min1 && ht[j]

.weight < min2)

}}

哈夫曼編碼

哈弗曼編碼幾乎是所有壓縮演算法的基礎,其實這個演算法並不複雜,簡單的理解就是,如何用更短的bit來編碼資料。我們知道普通的編碼都是定長的,比如常用的ascii編碼,每個字元都是8個bit 字元編碼 a00101001 b00101010 c00101011 這樣,計算機就能很方便的把由0和1組成的資...

哈夫曼編碼

哈夫曼編碼 裝載請註明淶源 chengyaogen.blog.chinaunix.net 前面一節我們知道了,怎樣去建立乙個哈夫曼樹,這一節我們來看看哈夫曼編碼。思想 得到哈夫曼樹後,自頂向下按路徑編號,指向左節點的邊編號0,指向右節點的邊編號1,從根到葉節點的所有邊上的0和1連線起來,就是葉子節點...

哈夫曼編碼

前面一節我們知道了,怎樣去建立乙個哈夫曼樹,這一節我們來看看哈夫曼編碼。思想 得到哈夫曼樹後,自頂向下按路徑編號,指向左節點的邊編號0,指向右節點的邊編號1,從根到葉節點的所有邊上的0和1連線起來,就是葉子節點中字元的哈夫曼編碼。下圖體現了哈夫曼編碼的過程 哈夫曼樹結點 typedef struct...