樣例輸入(自己設的測試值):
740 30 15 5 4 3 3
a b c d e f g
#include
#include
/*哈夫曼結點資料結構*/
typedef
struct nodehtnode,
*huffmantree;
select
(huffmantree h,
int n,
int*p1,
int*p2)
int t;
//定義乙個最小值用於氣泡排序法
for(i =
0;i <
2*n-
1;i++
)else
if(p[i]
>= p[i_]
&&p[i_]!=0
)}}for
(i =
1;i <
2*n-
1;i++
)*p2 = i;
for(i_ =
1;i_ <
2*n-
1;i_++
)*p1 = i_;
}code
(huffmantree t,
int root,
int n,
int i)
if(t[t[i_]
.parent]
.lch == i_)
else
}int
main()
else
}/*開始制哈夫曼表*/
htnode t[
2*n]
;for
(int i_ =
1;i_ <=
2*n-
1;i_++);
//t用來儲存哈夫曼表
for(
int i_ =
1;i_ <= n-
1;i_++
)else
h[p1]
.weight = h[p2]
.weight =
0;h[n+i_]
.weight = t[n+i_]
.weight;
}/*現在所得的t即為哈夫曼表*/
for(
int i_ =
1;i_ <=
2*n-
1;i_++
)/*輸出葉結點所對應的哈夫曼編碼值*/
經驗證與所畫樹的葉結點編碼值相同 ! ^ _ ^ !
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...
哈夫曼編碼 哈夫曼樹
哈夫曼樹是乙個利用權值進行優化編碼的乙個比較奇怪的樹,他的實現比較簡單,用途也比較單一。哈夫曼樹的實現,實現要求 通過哈夫曼樹可以保證在編碼過程中不會出現例如 1000和100這樣的編碼規則,否則就會編碼失敗,因為1000和100在某些情況下的編碼會一模一樣。通過哈夫曼樹可以保證權值大的值進行編碼時...