赫夫曼編碼

2021-07-14 03:37:15 字數 1108 閱讀 4883

問題r 赫夫曼編碼

思路:對於赫夫曼來說,往左走為0,往右走為1,可以發現每一位就往下走一層。因此整體報文的長度可以用不同報文在樹中的位置來確定,也就是說,符號種類*每個符號在樹中的深度即為整體報文的長度;而ascll碼的位元位長度為符號個數*8;

**:

#include 

#include

#include

using

namespace

std;

typedef

struct

htree, *huffman;

char a[500];

int len[500];

void createhuffmantree(huffman &ht, int n)

for(int i=1; i<=n; i++)

for(int j=n+1; j<= m; j++ ) //通過n-1次選擇,刪除,合併來建立霍夫曼樹

else}}

}ht[l].parent = ht[r].parent = j;

ht[j].lchild = l;

ht[j].rchild = r;

ht[j].weight = ht[l].weight + ht[r].weight;

}}void huffmannum(huffman &ht, int hc, int x)

else}}

}int main()

}if(j == k) //沒找到

}k -= 2;

createhuffmantree(ht,k);

huffmannum(ht,len,k);

double sum = 0;

for(int i=1; i<=k; i++)

int cnt = le*8;

printf("%d %.0f %.1f\n",cnt,sum,cnt/sum);

}return

0;}

還有一種方法是常規的,也就是建立一顆赫夫曼樹後,求出每個符號的赫夫曼編碼,再求出長度,下次補

赫夫曼編碼

include include using namespace std typedef struct htnode,huffmantree 動態分配陣列儲存赫夫曼樹 typedef char huffmancode 動態分配陣列儲存赫夫曼編碼 赫夫曼編碼的演算法實現 void sethuffmant...

赫夫曼編碼

用赫夫曼樹進行編碼是我們處理資料壓縮常用的方法。請同學們用赫夫曼編碼方法儲存你班同學 資料結構 課程的期終考試成績。include include include include define ok 1 define maxnn 100000 typedef struct studentstuden...

赫夫曼編碼

赫夫曼編碼 最優二叉樹,是帶權路徑長度最短的二叉樹 根據結點的個數和權值不同,最優二叉樹的形狀也不同 將每個帶有權值的結點作為一顆僅有根結點 的二叉樹,樹的權值為節點的權值 將其中兩顆權值最小 的樹組成一顆新二叉樹,新樹的權值為兩棵樹的權值和 重複上述兩個步驟 最優二叉樹的左右子樹可以互換,不影響樹...