最優二叉樹

2021-09-18 04:09:57 字數 1200 閱讀 6558

所謂哈夫曼樹即最優二叉樹,其特點是帶權路徑長度最小

建樹原理:將最小數結點放到最下面,大數放到離頂點近的地方,建樹時從下往上建,每上一層下一層的數就被重複加一次,這樣最終得到完整樹

資料結構實驗之二叉樹六:哈夫曼編碼

problem description

字元的編碼方式有多種,除了大家熟悉的ascii編碼,哈夫曼編碼(huffman coding)也是一種編碼方式,它是可變字長編碼。該方法完全依據字元出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用於資料檔案壓縮中,其壓縮率通常在20%~90%之間。你的任務是對從鍵盤輸入的乙個字串求出它的ascii編碼長度和哈夫曼編碼長度的比值。

input

輸入資料有多組,每組資料一行,表示要編碼的字串。

output

對應字元的ascii編碼長度la,huffman編碼長度lh和la/lh的值(保留一位小數),資料之間以空格間隔。

上圖中帶權路徑的計算方法:

1.圓圈為二叉樹的各個結點,三角形為每一層的權值可認為沒有路徑,把三層的權值加起來j即可

2.用結點計算,最下面為最初的兩個結點,他們到定點8的路徑長度為3,所以帶權路徑長度為(1+1)*3=6。以此類推即可。

#include #include #include#include using namespace std;

int main()

{priority_queue,greater >q;///優先佇列從小到大排序,小的在隊首。

int len,a[1001];

char s[1001];

while(cin>>s)

{ int sum=0;

memset(a,0,sizeof(a));

len=strlen(s);

int la=len*8;

for(int i=0;i晚安!

最優二叉樹

include include includetypedef struct huffmantree typedef char huffmancode 赫夫曼編碼 void selectnode huffmantree ht,int n,int bt1,int bt2 從1 i 1個結點選擇paren...

滿二叉樹 完全二叉樹 平衡二叉樹 最優二叉樹

一棵二叉樹的結點要麼是葉子結點,要麼它有兩個子結點 如果乙個二叉樹的層數為k,且結點總數是 2k 12 k 1 2k 1 則它就是滿二叉樹。若設二叉樹的深度為k,除第 k 層外,其它各層 1 k 1 的結點數都達到最大個數,第k 層所有的結點都連續集中在最左邊,這就是完全二叉樹。它或者是一顆空樹,或...

滿二叉樹 完全二叉樹 平衡二叉樹 最優二叉樹

一 滿二叉樹 一棵二叉樹的結點要麼是葉子結點,要麼它有兩個子結點 如果乙個二叉樹的層數為k,且結點總數是 2 k 1,則它就是滿二叉樹。二 完全二叉樹 若設二叉樹的深度為k,除第 k 層外,其它各層 1 k 1 的結點數都達到最大個數,第k 層所有的結點都連續集中在最左邊,這就是完全二叉樹。三 平衡...