实现一个哈夫曼编码系统,系统包括以下功能:
- 字符信息统计:读取待编码的源文件SourceFile.txt,统计出现的字符及其频率。
- 建立哈夫曼树:根据统计结果建立哈夫曼树。
- 建立哈夫曼码表:利用得到的哈夫曼树,将各字符对应的编码表保存在文件Code.txt中。
- 对源文件进行编码:根据哈夫曼码表,将SourceFile.txt中的字符转换成相应的编码文件ResultFile.txt。
SourceFile.txt 的文件内容为:
要对下边的字符进行哈夫曼编码处理
AAAAABBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCDDDDDDDDEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFGGGHHHHHHHHHHH
出现的字符及其频率
A:5
B:25
C:7
D:8
E:14
F:21
G:3
H:11
哈夫曼树
i weight parent lchild rchild
1 5 10 0 0
2 25 14 0 0
3 7 9 0 0
4 8 10 0 0
5 14 13 0 0
6 21 12 0 0
7 3 9 0 0
8 11 12 0 0
9 10 11 3 7
10 13 11 4 1
11 23 13 10 9
12 32 14 6 8
13 37 15 11 5
14 57 15 12 2
15 94 0 14 13
各字符对应的编码表 即文件Code.txt
i Char Code
1 A 0110
2 B 10
3 C 0101
4 D 0111
5 E 00
6 F 111
7 G 0100
8 H 110
得到的文件ResultFile.txt内容为
01100110011001100110101010101010101010101010101010101010101010101010100101010101010101010101010101011101110111011101110111011101110000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111010001000100110110110110110110110110110110110
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e3+7;
typedef char