求高手写个关于哈夫曼编码的算法

来源:百度知道 编辑:UC知道 时间:2024/05/31 07:20:16
根据哈夫曼编码思想,设计一个加/解密程序,输入不少于100 个字符的短文(明文)进行测试,并输出明文,密码表,密文,同时用文件保存之。

恩,楼主这个题目相当复杂啊
首先读文件,按字符读。一个一个读,统计所有出现字符的频数。
记录到一个链表里吧
第二步,建树。霍夫曼树……复杂程度可想而知。
Huffman 算法
思想: 权大的外结点靠近根, 权小的远离根。
算法: 从m个权值中找出两个最小值W1,W2构成
w
w1 w2 W=W1+W2表通过该结点的频度。
依次往上找……
估计你的100个字符的短文,出现的字符数量估计平均有20个左右,建的树的高度就12就算低的。
3 按结点到跟的距离编码,从左到右编码为0 1 0 1依次进行……
生成霍夫曼编码
把每个字幕的二进制编码记录,打出,这就是密码表
然后对原来的文件进行打印,碰到相应的字母打印出相应的密码(二进制啊,汗……)
估计只有拿到密码才能看明白那一串的01!!
如果某一电文出现的字符为D={M,S,T,A,Q, K} , 每个字符出现的频率为W={10,29,4,8,15,7},
则用改算法生成的密码为:
S:0 A:100 M:101 Q:111
T:1100 K:1101
100 1100 101 0 111 0 1101 0 0 密文的含义是:
A T M S Q S K S S

楼主真幸运,我这儿有现成的C语言代码:
#include <stdio.h>
#define N 7 /*叶子数目,需要时更改此值即可*/
#define M 2*N-1 /*节点总数*/

typedef struct
{
char bits[N];/*编码存储,位串*/
int start; /*编码在位串中的位置