使用哈夫曼编码可以实现电文编码并使译码唯一。

首先统计每个字符出现的频率,即W出现2次,I出现2次,N出现4次,E出现1次,L出现1次。将其转化为权值,得到{2,2,4,1,1}。

然后根据这些权值构建哈夫曼树,得到以下树形结构:

     10
  /     \
 4       6

/ \ /
W I N 3 /
L E

最后对于每个字符,从根节点出发,向左走为0,向右走为1,得到对应的编码:

W:00 I:01 N:1 E:1010 L:1011

因此WINNIE WILL WIN可以编码为:0001010111111000100010110。对于这个编码,唯一的译码方式是:从前往后扫描编码,遇到0就向左走,遇到1就向右走,当走到叶子节点时,即找到了对应的字符,将其输出,并回到根节点继续扫描。

typedef struct TreeNode int weight;数据域权值 int parent; int left; int right; TreeNode; 处理树的存储 typedef struct HFTree TreeNode data;树结构的数据类型 int length;树当前结点个数 HFTree; 初始化最优二叉树 函

原文地址: https://www.cveoy.top/t/topic/flGp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录