資料結構 哈夫曼編碼

2021-10-04 12:43:55 字數 2349 閱讀 6167

# include

# include

# include

using

namespace std;

typedef

struct huffman_nodeelement;

void

select2min

(element * huffnodes,

int n,

int& m1,

int&m2)

}for

(int i =

0;i < n;i ++)}

for(

int i =

0;i < n;i++)}

for(

int i =

0;i < n;i ++)}

cout <<

"m1 : "

<< m1 <<

" m2 : "

<< m2 << endl;

}void

inithuffnodes

(element *huffnodes,

int n)

}void

huffmantree

(element* huffnodes,

int* w,

int n)

for(

int t = n;t <

2* n -

1;t++)}

void

printhuffmantree

(element* huffnodes,

int n)

}int

main()

;int n =

sizeof

(w)/

sizeof

(int);

element* huffnodes =

new element[

2* n -1]

;huffmantree

(huffnodes,w,n)

;printhuffmantree

(huffnodes,

2* n -1)

;return0;

}

[root@localhost datastruct]# g++ huffmantree.cc -std=c++11 

[root@localhost datastruct]# ./a.out

m1 : 6 m2 : 4

m1 : 2 m2 : 8

m1 : 3 m2 : 1

m1 : 5 m2 : 9

m1 : 0 m2 : 10

m1 : 11 m2 : 7

m1 : 12 m2 : 13

index weight parent lchild rchild

0 15 12 -1 -1

1 9 10 -1 -1

2 7 9 -1 -1

3 8 10 -1 -1

4 4 8 -1 -1

5 11 11 -1 -1

6 3 8 -1 -1

7 31 13 -1 -1

8 7 9 6 4

9 14 11 2 8

10 17 12 3 1

11 25 13 5 9

12 32 14 0 10

13 56 14 11 7

14 88 -1 12 13

note:可以將其改進寫成鍊錶的方式。

統計檔案a中的各個字元出現的頻率

以統計出來的頻率作為權值,建立哈夫曼樹,為每乙個字元建立其對應的哈夫曼編碼(左為0,又為1的原則)

最後一次將檔案a中每個字元對應的哈夫曼編碼按二進位制位儲存在檔案b中

雜湊法:以ascii碼為例,將ascii碼的數值作為索引,建立節點可以提高查詢速度。

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

資料結構 哈夫曼編碼

time limit 1000ms memory limit 65536kb submit statistic problem description 字元的編碼方式有多種,除了大家熟悉的ascii 編碼,哈夫曼編碼 huffman coding 也是一種編碼方式,它是可變字長編碼。該方法完全依據字...