作业帮 > 综合 > 作业

huffman编码已知:信源符号个数q,信源符号S0,.,Sq-1,信源概率分布P0,...,Pq-1,算法:1,如果q

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/14 14:55:28
huffman编码
已知:信源符号个数q,信源符号S0,.,Sq-1,信源概率分布P0,...,Pq-1,算法:1,如果q=2,则返回编码:s0->0,s1->1
2,否则
a,重新排序S0,.,Sq-1,和P0,.Pq-1
b,创建一个符号s’,其概率为P’=Pq-2+Pq-1
c,递归调用本算法以得到S0,.,Sq-3,S’的编码W0,.Wq-3,W’,它的概率副本为P0,.,Pq-3,P’
d,返回编码S0->W0,...,Sq-3—>Wq-3,Sq-2->W'0,Sq-1->W'1
要求输入信源符号的概率分布在运行时从键盘输入
输出:每个信源符号及其对应的码字.
这是我们的作业题,自己写 的……(可能输入的格式跟你要的不一致,自己改一下)
如果有什么不懂的就问我,我可以把其中所有相关的文件发给你 ^^
注:1、 初始化创建哈夫曼树有三种选择,其中选择编译课本测试数据时和编译源文件是,调用的输入文件分别是:test.txt和input.txt;字母的哈夫曼编码都保存在文件:hmfTree.txt;
2、 用户自定义模式下,需要编码的文件内容保存在ToBeTran.txt中;课本测试数据和源文件代码分别保存在course.txt和sorse.txt中,在(1)中选择不同的选项,则在编码时调用相应的文件进行编码,编码结果保存在文件CodeFile.txt中.
3、 文件译码时,调用文件CodeFile.txt进行译码,得到的结果保存在文件TextFile.txt中.
4、 打印代码文件:调用CodeFile.txt,结果显示在终端并保存在文件CodePrin.txt中.
5、 打印哈夫曼树:用凹入表形式把哈夫曼树显示在终端,同时将它保存在文件TreePrint..txt中.
#include
#include
#include
#include
#include
using namespace std;
typedef struct {
unsigned int weight;
char ch1;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
typedef struct {
char ch;
char code[7];
}codenode,*code;
void select(HuffmanTree HT,int n,int & s1,int &s2){ //从哈夫曼树中选择出最小的两个节点
for(int i=1;i