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

2021-10-11 02:00:14 字數 1483 閱讀 4130

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

#include

#include

#include

//因為使用了strcpy字串函式

#include

typedef

struct

htnode,

*huffmantree;

//動態分配陣列儲存哈夫曼樹

typedef

char

**huffmancode;

void

select

(huffmantree ht,

int len,

int&s1,

int&s2)

//優先順序的判斷

}int temp=ht[s1]

.weight;

//將原值存放起來,然後先賦予最大值,防止s1被重複選擇

ht[s1]

.weight=

0x3f3f3f3f

;for

(i=1

;i<=len;i++)}

ht[s1]

.weight=temp;

//恢復原來的值

}void

createhuffmantree

(huffmantree &ht,

int n)

//構建哈夫曼樹

printf

("請輸入前%d個單元的葉子結點的權值:"

,n);

//輸入前n個單元的葉子節點的權值

for(i=

1;i<=n;

++i)

scanf

("%d"

,&ht[i]

.weight)

;for

(i=n+

1;i<=m;

++i)

}void

createhuffmancode

(huffmantree ht,huffmancode &hc,

int n)

//求出第i個字元的編碼

hc[i]

=new

char

[n-start]

;//為第i個字元編碼分配空間

strcpy

(hc[i]

,&cd[start]);

//將求得的編碼從臨時空間cd複製到hc的當前行中

}delete cd;

//釋放臨時空間

}void

show

(huffmantree ht,huffmancode hc)

//輸出對應的哈夫曼編碼

intmain()

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

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

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...