版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 #include#include #includetypedef struct/ 霍夫曼树的结构体 double weight; / 权值,此处为概率 htnode,*hfmtree;typedef char *hfmcode;/* / 用于记录每个消息字符的码长/*/ 对输入的字符进行检验 for(int i=1;in&flag;i+)全局变量 */霍夫曼编码模块 */ for(j=i+1;j=n;j+)if(HTj.ch=HTi.ch)flag=0; / 对输入的概率进行检测 for(int i=1;i0&HTi.weight1)/ 概率之和超过 1flag=2; void Select
2、(int a,int *p1,int *p2) /*Select 点*/ for(j=1;j=a;+j)if(HTj.parent=0) for(i=j+1;i=a;+i)if(HTi.weightHTx.weight&HTi.parent=0)x=i; / 选出权值最小的节点for(j=1;j=a;+j)if(HTj.parent=0&x!=j) for(i=j+1;i=a;+i) if(HTi.weightn; if(sizeof(n)!=sizeof(int)|n=1)/cout您输入的数据有误,程序终止若输入的不是整数,则报错 code_length=new intn+1;for(i=
3、1;i=n;i+)code_lengthi=0;/ 初始化码长为 0HT=(hfmtree)malloc(m+1)*sizeof(htnode); for(i=1;itemp_ch; cintemp_w;HTi.ch=temp_ch;HTi.weight=temp_w; int flag1=Input_Char_Check(); / 检测输入的字符是否重复int flag2=Input_Weight_Check(); / 检测输入的概率是否越界cout出现相同字符,输入错误,请重新输入 !endl; cout概率越界,输入错误,请重新输入 !endl; cout概率之和超过 1,输入错误,请重
4、新输入 !endl; void Create_hfmtree() / 初始化其余的结点/ 用*表示新生成根节点的字符域/ 建立霍夫曼树/ 用于记录权值最小及次小节点的 for(i=n+1;i=m;+i)Select(i-1,&p1,&p2);HTp1.parent=i;HTp2.parent=i;HTi.lchild=p1;HTi.rchild=p2;HTi.weight=HTp1.weight+HTp2.weight; HC=(hfmcode)malloc(n+1)*sizeof(char *);cd=(char *)malloc(n*sizeof(char);cdn-1=0;for(i=1
5、;i=n;+i)start=n-1;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)if(HTf.lchild=c) / 建立霍夫曼树 / 当前字符的父节点下标 cd-start=0;cd-start=1;code_lengthi+=1;HCi=(char*)malloc(n-start)*sizeof(char);strcpy(HCi,&cdstart);free(cd); Create_hfmtree(); /* double Ave_Code_Length() / 初始化 编码效率分析模块 */ 求平均编码长度 double Ave_L=0.0;fo
6、r(int i=1;i=n;i+)Ave_L+=code_lengthi*HTi.weight; return Ave_L; double To_Get_H() for(int i=1;i=n;i+)H+=-1*HTi.weight*log(HTi.weight)/log(2); double To_Get_Code_Efficiency() Ave_L=Ave_Code_Length(); / 分析结果输出void Output() Ave_L=Ave_Code_Length();H2=To_Get_Code_Efficiency(); for(int i=1;i=n;i+)coutHTi.
7、chcode_lengthiHCiendl; cout编码效率 E=(H2/H2max)*100%=H2*100%endl;/* 编码模块 */ 字符串合理性检测int Message_Str_Check(string temp)int flag=1; / 先假设输入的消息串不含非法字符for(int i=0;tempi!=0;i+)for(j=1;jn) / 表示出现非法字符flag=0; / 获取待编码消息串string Get_Message_Str()string temp; cintemp;flag=Message_Str_Check(temp);if(flag=0)/ 输入的消息串
8、含非法字符cout输入的消息串含非法字符 ,请重新输入 !endl;goto A; / 对输入的消息串进行编码string Get_All_Code_Str(string Message_Str)string All_Code_Str=; intj;for(int i=0;Message_Stri!=0;i+)for(j=1;j=n;j+)if(Message_Stri=HTj.ch) All_Code_Str+=HCj;return All_Code_Str;/ 输出得到的二进制序列void Output_All_Code_Str(string All_Code_Str)cout该消息串对应
9、的编码序列如下 :endl;coutAll_Code_Strendl; string Message_Str,All_Code_Str;Message_Str=Get_Message_Str();All_Code_Str=Get_All_Code_Str(Message_Str);Output_All_Code_Str(All_Code_Str);/* 译码模块 */ 检测输入的二进制序列是否含有非法字符int Binary_Str_Check(string temp) / 假设不含非法字符for(int i=0;tempi!=0;i+) if(!(tempi=0|tempi=1) / 获取待
10、译的二进制序列string Get_Binary_Str()string temp; B: couttemp;flag=Binary_Str_Check(temp);if(flag=0)/ 输入的二进制序列含非法字符cout输入的二进制序列含非法字符 ,请重新输入 !endl; goto B; string Get_Original_Message_Str(string Binary_Str,int *flag)string temp=;*flag=1; string Original_Message_Str=;for(int i=0;Binary_Stri!=0;i+)temp+=Binar
11、y_Stri;for(j=1;j=n;j+)if(HCj=temp)Original_Message_Str+=HTj.ch;temp=; cout您输入的二进制序列不可译,请重新输入 !endl; *flag=0;return Original_Message_Str;/ 输出得到的源码void Output_Original_Message_Str(string Original_Message_Str)cout该二进制序列对应的源码如下 :endl; coutOriginal_Message_Strendl; string Binary_Str,Original_Message_Str;D: Binary_Str=Get_Binary_Str();Original_Message_Str=Get_Original_Message_Str(Binary_Str,&flag); Output_Origin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 涂料生产工创新意识强化考核试卷含答案
- 贵金属冶炼工安全强化模拟考核试卷含答案
- 废金属加工处理工安全教育强化考核试卷含答案
- 自由锻锻工测试验证模拟考核试卷含答案
- 水泥混凝土制品制作工安全文明能力考核试卷含答案
- 高纯试剂工岗前岗中实操考核试卷含答案
- 熔炼浇注工操作评估考核试卷含答案
- 燃气具装配工岗中实操掌握考核试卷含答案
- 粉末冶金烧结工岗中实践水平考核试卷含答案
- 海藻制碘工岗位环保竞赛考核试卷含答案
- 2026年水务集团招聘考试笔试试题及答案
- 2026年甘肃省酒泉市金塔县招聘社区工作者考试参考题库及答案解析
- 武汉市2027届高中毕业生九月调研考试地理试卷(含答案)
- 华为光芯片机考题库(完整版含答案解析)
- 2026考研全国统考英语二冲刺试卷(详细解析)
- 苏教版六年级上册数学《比的意义》教学设计
- JJF(吉)106-2022 水分接收器校准规范
- 中药饮片调剂规范考核试题及答案
- 四川省水利工程设计概(估)算编制规定2025
- XJJ013-2012 新疆维吾尔自治区城市规划管理技术规定
- 园林植物病虫害防治技术全套课件
评论
0/150
提交评论