c语言编写算术编码,编程实现算术编码算法.doc
编程实现算术编码算法
中国地质大学计算机学院信息安全专业
信息论实验报告
实验三 算术编码
实验内容
编程实现算术编码算法
二、实验环境
计算机
Windows 2000 或以上
DEVC++
三、实验目的
进一步熟悉算术编码算法;
掌握C语言编程(尤其是数值的进制转换,数值与字符串之间的转换等)
四、实验要求
提前预习实验,认真阅读实验原理。
认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老师的管理。
认真填写实验报告。
五、实验原理
算术编码是把一个信源表示为实轴上0和1之间的一个区间,信源集合中的每一个元素都用来缩短这个区间。
算法流程
六、参考书
《信息论——基础理论及应用》傅祖芸,电子工业出版社
七、源代码
#include
#include
#include
const double proc[]={0.10,0.10,0.10,0.1,0.1,0.1,0.1,0.1,0.15,0.05};
double result,areaBegin,areaEnd;
int cord[1000],cordLength;
char str[1000];
int strLength=0;
bool readdat()
{
printf("***********固定模式***********\n");
printf("请输入字符串(0-9):\n");
scanf("%s",str);
while(str[strLength]!='\0')
strLength++;
for(int i=0;i
if(str[i]>'9'||str[i]
return 1;
return 0;
}
void encord()
{
printf("编码:");
double w=0.0,len;
areaBegin=0.0,areaEnd=1.0;
for(int i=0;i
{
int n=str[i]-'0',k;
w=0.0;
for(k=0;k
w+=proc[k];
len=areaEnd-areaBegin;
areaEnd=areaBegin+len*(w+proc[k]);
areaBegin+=len*w;
}
result=areaBegin*0.01+areaEnd*0.99;//选择适合的点
cordLength=(int(-log(areaEnd-areaBegin)/log(2)))+1;
printf("编码位数:%d\n",cordLength);
printf("编码结果:");
double temp1=result;
int temp2;
for(int j=0;j
{
temp1*=2;
temp2=int(temp1);
temp1-=temp2;
cord[j]=temp2;
printf("%d",temp2);
}
printf("\n");
}
void decord()
{
printf("译码:\n");
result=0.0;
double wei=0.5;
for(int i=0;i
result+=wei*cord[i];
printf("译码选取的数:%f\n",result);
areaBegin=0.0,areaEnd=1.0;
wei=0.0;
int temp;
double len;
for(int j=0;j
{
temp=0;wei=0.0;len=areaEnd-areaBegin;
while(result-areaBegin>wei*len)
wei+=proc[temp++];
temp--;
areaEnd=areaBegin+wei*len;//计算新的空间
areaBegin=areaBegin+(wei-proc[temp]*len);
printf("%d",temp);
}
printf("\n");
int main()
{
if(readdat())
printf("字符输入错误!!!\n");
else
{
encord();
decord();
}
return 0;
}
输入信源符号个数,信源概率分布,还有需要编码的符号序列,
根据
c语言编写算术编码,编程实现算术编码算法.doc相关推荐
- c语言编程抢30,C语言编写抢三十游戏——开发笔记(总结).doc
C语言编写抢三十游戏--开发笔记(总结) 课程设计题目:抢三十游戏 学号:XXX 姓名:XXX 组员:XXX(组长).XXX.XXX.XXX.XXX.XXX 设计时间:2009-12-19 相关背景: ...
- 股票公式编程是c语言,C语言编写公式的基础(飞狐用).doc
飞狐用C语言基础(1) 公式平台--C语言基础 (李济安)公式平台包含一个C语言编译器,可以通用函数与C语言混写,在创作公式的时候,可以在一个公式中对多个周期的数据.其他html/article/16 ...
- c语言编写源程序内容,编程(C语言源程序代码)讲述.doc
已知 S=1+1/(1+2)+1/(1+2+3)+-+1/(1+2+3+-+N) ,当N的值为50时,求S的值.要求:按四舍五入的方式精确到小数点后第四位. #include #include mai ...
- c语言万历年系统设计报告,C语言编写单片机万历系统课程设计报告分.doc
多功能电脑时钟设计报告 一.实训目的意义及任务要求 1.1目的意义 单片机的使用领域已十分广泛,如智能仪表.实时工控.通讯设备.导航系统.家用电器等.LED数字显示的日历钟显示清晰直观.走时准确.可以 ...
- c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc
数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...
- c语言编写拆字程序,倒计时器 单机课程设计.doc
倒计时器 单机课程设计 <单片机原理及应用>课程设计任务书 二级学院电子信息与电气工程学院 专业:班级: 学生姓名指导老师职 称讲师 课题名称 课题工作内容1. 设计内容:硬件电路的设计. ...
- c语言编写电子秒表程序,电子秒表C程序.doc
电子秒表C程序 电子秒表程序 #include #include #define uchar unsigned char #define uint unsigned int uchar code se ...
- 用java语言编写程序计算九宫图
前言 对于程序员来说,用程序解决数学问题是最有趣的事情之一.本人研究了一个能够轻易计算九宫图的算法,并且用java语言编写程序得以实现.现将算法和代码公布,欢迎广大程序爱好者前来阅读.交流. 九宫图简 ...
- 2n 用c语言编程程序,用C语言编写程序.ppt
<用C语言编写程序.ppt>由会员分享,可在线阅读,更多相关<用C语言编写程序.ppt(64页珍藏版)>请在人人文库网上搜索. 1.第2章 用C语言编写程序,2.1 在屏幕上显 ...
- c语言 465串口编程,用C语言编写串口程序
在当今,流行的编程软件种类繁多,它们编程方便.易于维护,但是在与硬 件直接打交道和编制系统软件时却束手无策,于是C语言就有了用武之地.C语言 作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高 ...
最新文章
- NodeJS基础2---2 Promise详解
- Python之第一个helloworld的代码
- java必读书籍_必读:Java Java
- oracle客户端 tsnping时出现TNS-03505:无法解析名称
- LeetCode 2147. 分隔长廊的方案数
- windows php5.3升级,Windows10系统将PHPNOW升级PHP版本为5.3.5
- 【Vue2.0】—常用的内置指令(九)
- ubuntu下/etc/rc.local和/etc/init.d/rc.local的区别
- Website English Comments
- Mini 容器学习笔记10——方法注入
- 面试必掌握之计算机网络
- 基于数组的一个简单增删改查
- promise 应用实例
- matlab拟合模型学习总结
- 分享12个鲜为人知的的小众网站,每一个可以让你打开新世界的大门,让你震惊。...
- Java从入门到放弃第1天
- linux fdisk指定ext4,如何在Linux中创建新的Ext4文件系统(分区)
- vs自拉软件全名_vs全新操作软件说明书
- 采购供应链管理系统:企业采购与供应链管理更简单、快捷
- 呕心沥血踩坑之:外星人M17电脑在一块硬盘上成功安装Windows与Ubuntu16.04双系统