# 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 也是一種編碼方式,它是可變字長編碼。該方法完全依據字...