下面模擬對原文本進行編碼,然後傳輸後,進行相應的解析得到原有的資料,真個過程也可以看作是乙個典型的壓縮、解壓縮操作,具體演示**如下:
其中輸入input.txt如下:#include typedef struct input
input;
void test(input test, char code[21]);
void main()
; //資料的編碼0-52
char text[5][50] = ; //本來的文字內容
int value[5][50] = ; //轉化後的資料值
for (int i = 0; i < 53; i++)
for (int i = 0; i < 5; i++)
for (int i = 0; i < 5; i++)
else if (text[i][j] == 0)
else
}} int diff[5][50] = ; //diff變換得到的值,為傳輸創造條件
for (int j = 0; j < 50; j++)diff[0][j] = value[0][j];
for (int i = 1; i < 5; i++) }
int data[10000] = ;
int len = 0;
for (int i = 0; i < 5; i++)
}} unsigned char finaldata[10000] = ;
int flen = 0;
for (int i = 0; i < len / 8 + 1; i++)
input inputdata = ;
inputdata.len = flen;
inputdata.data = finaldata;
test(inputdata, code);
}typedef struct tree
tree;
tree node[1000] = ; //預設表示沒有左右子節點及資料值
int pnodeuse; //預設有了乙個父節點,並且沒有資料在裡面
int info[10000] = ;
int g_info_len = 0;
int diff[5 * 50];
int g_diff_len = 0;
int diff_array[5][50];
int source_value[5][50];
char source_text[5][50];
void init();
void creathufftree(char code[21]);
void recoverdata(input input);
void decodehuff();
void transdiffarray();
void decodediff();
void decodevalue();
void show();
void test(input test, char code[21])
void init()
pnodeuse = 1;
}void creathufftree(char code[21])
else
}else if (code[i][j] == '1')
else
}else
}//額外的新增長度
if (j == 21)
}}void recoverdata(input input)
g_info_len = flen;
}void decodehuff()
if (info[i] == 1)
if (node[pcurrentnode].data != -1) //有值的話記錄
} }void transdiffarray() }}
void decodediff() }}
void decodevalue()
else
} }}
void show()
printf("\n");
}}
111100101 0
1011010111101 1
11011110100011 2
1100110101011101 3
11100110 4
110010101011011 5
10011111111111111111 6
00101011011111011 7
010010101110111 8
0010000110101 9
00011010101111 10
001101010101101 11
0000110101101 12
000010101010 13
00000001 14
000000001 15
010010101111101 16
1001110101011111 17
11001100110011001 18
1110011100011100 19
1111100000111 20
1111111000000000 21
101011100101011001 22
10000000000000001 23
11111100000001 24
111111100000001001 25
1111000101 26
10110100111101 27
110111100100011 28
11001101001011101 29
111000110 30
1100100101011011 31
100111110111111111111 32
001010110011111011 33
0100101011010111 34
00100001010101 35
000110101011011 36
0011010101010101 37
00001100101101 38
0000101010010 39
0000000001 40
00000000001 41
0100101011101101 42
10011101010111101 43
110011001100110001 44
10110011100011100 45
11111000000111 46
11111101000000000 47
1010101100101011001 48
100000000000000001 49
101111100000001 50
1111101100000001001 51
111111111111111111 52
hello everyone in professional code test group
this is a ****** case for huffman tree
you will see this text if your code is correct
otherwise you need check your code again
good luck for everyone please do your best
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....
哈夫曼樹 哈夫曼編碼
定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...
哈夫曼編碼 哈夫曼樹
哈夫曼樹是乙個利用權值進行優化編碼的乙個比較奇怪的樹,他的實現比較簡單,用途也比較單一。哈夫曼樹的實現,實現要求 通過哈夫曼樹可以保證在編碼過程中不會出現例如 1000和100這樣的編碼規則,否則就會編碼失敗,因為1000和100在某些情況下的編碼會一模一樣。通過哈夫曼樹可以保證權值大的值進行編碼時...