算术编码用c语言实现.docx

上传人:啊飒飒 文档编号:10254563 上传时间:2021-05-03 格式:DOCX 页数:5 大小:109.28KB
返回 下载 相关 举报
算术编码用c语言实现.docx_第1页
第1页 / 共5页
算术编码用c语言实现.docx_第2页
第2页 / 共5页
算术编码用c语言实现.docx_第3页
第3页 / 共5页
算术编码用c语言实现.docx_第4页
第4页 / 共5页
算术编码用c语言实现.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《算术编码用c语言实现.docx》由会员分享,可在线阅读,更多相关《算术编码用c语言实现.docx(5页珍藏版)》请在三一文库上搜索。

1、算术编码用c语言实现 (2010-07-07 23:43:59)转载标签:杂谈描述:在source1.dat文件中有100个数据,其中,0的概率为1/8,1的概率为7/8.用算术编码进行压缩。程序如下:/=/ Name: suanshcoding.cpp/ Author: 朗月清风/ Version:1.0/ Copyright: All rights Reserved by 2010/ Description : 从source1.dat文件中读取信息,即100个0、1码,完成算术编码,并给/出了译码及验证。/ Department:upc/=#include#include#define

2、max 100void main()FILE *fp;int i=0;int n;long double high;/上限long double low;/下限long double d;/间距long double bufmax; /大数组,暂存读取的数据long double decodemax; /存解码后的结果int code55;/编码结果long double temp;long double hx;/总信息量long double tp;/从区间取数long double x=0.0; /存恢复的小数long double line;/解码时判断准线/char ch;if(fp=

3、fopen(f:source1.dat,r)=NULL)printf(open erro!n);/exit(0);elsewhile (!feof(fp)fscanf(fp,%lf,&temp);bufi=temp;/printf(%d-%lfn,i,bufi);i+;/for(i=0;imax;i+)/printf(%1fn,bufi);double p0=1.0/8;/0的概率double p1=7.0/8; /1的概率low=0.0;high=1.0;d=1.0;for(i=0;imax;i+)if(bufi=1.0)low+=d*p0;d=high-low;else if(bufi=0

4、.0)high=low+d*p0;d=high-low;hx=max*(1.0/8*log(8)/log(2)+7.0/8*log(8.0/7)/log(2);/ 计算总共传递的信息printf(总共传递的信息量%fn,hx);n=(int)hx+1;/需编码位数printf(至少需要%d位编码n,n);printf(下限是:%.17f下限是:%.17fn,low,high);tp=(low+high)/2.0;/取区间的中点编码printf(n选取的小数为:%.17fn,tp);for(int j=0;j1.0)tp=tp-1;codej=1;elsecodej=0;printf(编码为:n

5、);/输出编码for(i=0;ilow)&(xhigh)/判断恢复的是否成功printf(n恢复的小数仍在允许区间,成功!n);low=0.0;high=1.0;d=1.0;line=1.0/8;for(i=0;iline)decodei=1.0;low+=d*p0;elsedecodei=0.0;high=low+d*p0;/d=high-low;d=high-low;line=low+d*p0;printf(原始输入数据:n);for(i=0;imax;i+)/打印原始输入数据printf(%d: %.lf,,i+1,bufi);printf(n恢复后的数据:n);for(i=0;imax;i+)/打印解码数据printf(%d: %.lf,,i+1,decodei);for(i=0;imax;i+)if(bufi!=decodei)printf(第%d位有误,i);printf(n全部编码成功,哈哈!n);结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1