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