一、編碼
【題目描述】
給定一篇用於通訊的英文電文,統計該電文中每個字元出現的頻率,按頻率左小右大的方法為這些字元建立哈夫曼(huffamn)樹,並編出每個字元的哈夫曼樹碼,輸出該電文的哈夫曼碼譯文。
【輸入】
輸入檔案huffman.in是一篇用於通訊的英文電文。
【輸出】
輸出檔案huffman.out輸出該電文的哈夫曼碼譯文。
【輸入輸出樣例1】
huffman.in
huffman.out
aaccdddbacbcddddddd
【資料限制】
2<=英文電文字元數<=10000000
統計以上abcd出現的個數。
a:3 b:2 c:4 d:10
構造出哈夫曼樹
a:011 b:010 c :00 d:1
下面主要通過兩個結構體陣列來實現:
struct node1
ht[2*n0-1+1];
陣列下標12
3456
7父節點的陣列下標parent00
00左孩子節點的陣列下標lch00
00右孩子節點的陣列下標rch00
00權值w324
10 陣列下標12
3456
7父節點的陣列下標parent55
000左孩子節點的陣列下標lch00
002右孩子節點的陣列下標rch00
001權值w32
4105
陣列下標12
3456
7父節點的陣列下標parent55
6767
0左孩子節點的陣列下標lch00
0025
6右孩子節點的陣列下標rch00
0013
4權值w32
41059
19 struct node2
hc[n0+1];
大概圖如下面
美工不好啊 大概將就看了啊
下面給出大家想要的程式部分
//#include "stdio.h"
//#include "string.h "
#include #include const int n0=10;
const int n=100;
const int inf=1000000;
struct node1
ht[2*n0-1+1];
struct node2
hc[n0+1];
int n,root;//n為葉子的個數
void readdata()
; n=0;
freopen( "huffman.in", "r", stdin);//讀文字檔案
while( (ch=getchar()) != eof )
num[ch]++;
for( int i=0; i<=255; i++ ) }
}void select1( int t, int *s1, int *s2)//用兩個數來記錄沒有在樹上的最小的兩個值,從而進一步生成樹。
}int main()
二、解碼
【題目描述】
給定2個輸入檔案,第1個輸入檔案是用於通訊的英文電文,統計該電文中每個字元出現的頻率,按頻率左小右大的方法為這些字元建立哈夫曼(huffamn)樹,並編出每個字元的哈夫曼樹碼;第2個輸入檔案是已經按第1個輸入檔案的英文電文編好的哈夫曼碼,輸出該哈夫曼碼的對應的英文電文。
【輸入】
第1個輸入檔案為huffman.in是用於通訊的英文電文, 第2個輸入檔案codetotxt.in是已經按第1個輸入檔案編好的哈夫曼碼。
【輸出】
輸出檔案codetotxt.out輸出codetotxt.in檔案內容的英文電文。
【輸入輸出樣例1】
huffman.in
codetotxt.in
codetotxt.out
aaccdddbacbcddddddd
adddaccdddbacbcdddd
【資料限制】
2<=英文電文字元數<=10000000
#include #include const int n0=10;
const int n=100;
const int inf=1000000;
struct node1
ht[2*n0-1+1];
struct node2
hc[n0+1];
int n,root,num[256];
void readdata() }}
void select1( int t, int *s1, int *s2)
{ int w1,w2;
w1=w2=inf;
for( int i=1; i<=t; i++ )
if( ht[i].parent==0 )
if( ht[i].w
哈夫曼編碼 Huffman
huffman編碼流程 資料壓縮流程 1 讀取輸入 2 將輸入中的每個char值得出現頻率製成 3 根據頻率構造huffman編碼樹 4 構造編譯表,將輸入中的每個char值和乙個位元字串相關聯 5 將單詞查詢樹編碼為位元字串並寫入輸出流 6 將單詞總數編碼為位元字串並寫入輸出流 7 使用編譯表翻譯...
哈夫曼樹(huffman)
學完了huffman樹,講一下自己對它的理解 圖二public class huffmantree override public int compareto nonnull treenodeo else if this.weight o.weight return 0 傳乙個陣列進來 建立哈夫曼樹...
哈夫曼(Huffman)樹構造和哈夫曼編碼
n個權值,則構造出的哈夫曼樹有 n個葉子結點。n個權值分別設為 w1,w2,wn,則哈夫曼樹的構造規則為 1 根據給定的 n個權值構成n 棵二叉樹的集合 f 2 每次選擇兩個權值最小的二叉樹做子樹合併為乙個新的二叉樹,新二叉樹的權值為兩個子樹的和。直到森林中只剩一棵樹為止,該樹即為我們所求得的哈夫曼...