编程实现算术编码算法

中国地质大学计算机学院信息安全专业

信息论实验报告

实验三 算术编码

实验内容

编程实现算术编码算法

二、实验环境

计算机

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相关推荐

  1. c语言编程抢30,C语言编写抢三十游戏——开发笔记(总结).doc

    C语言编写抢三十游戏--开发笔记(总结) 课程设计题目:抢三十游戏 学号:XXX 姓名:XXX 组员:XXX(组长).XXX.XXX.XXX.XXX.XXX 设计时间:2009-12-19 相关背景: ...

  2. 股票公式编程是c语言,C语言编写公式的基础(飞狐用).doc

    飞狐用C语言基础(1) 公式平台--C语言基础 (李济安)公式平台包含一个C语言编译器,可以通用函数与C语言混写,在创作公式的时候,可以在一个公式中对多个周期的数据.其他html/article/16 ...

  3. c语言编写源程序内容,编程(C语言源程序代码)讲述.doc

    已知 S=1+1/(1+2)+1/(1+2+3)+-+1/(1+2+3+-+N) ,当N的值为50时,求S的值.要求:按四舍五入的方式精确到小数点后第四位. #include #include mai ...

  4. c语言万历年系统设计报告,C语言编写单片机万历系统课程设计报告分.doc

    多功能电脑时钟设计报告 一.实训目的意义及任务要求 1.1目的意义 单片机的使用领域已十分广泛,如智能仪表.实时工控.通讯设备.导航系统.家用电器等.LED数字显示的日历钟显示清晰直观.走时准确.可以 ...

  5. c语言编写队列元素逆置,数据结构与算法实验—利用栈逆置队列元素.doc

    数据结构与算法实验-利用栈逆置队列元素 利用栈逆置队列元素实验报告 通信1204班 谢崇赟 实验名称 利用堆栈将队列中的元素逆置 实验目的 会定义顺序栈和链栈的结点类型. 掌握栈的插入和删除结点在操作 ...

  6. c语言编写拆字程序,倒计时器 单机课程设计.doc

    倒计时器 单机课程设计 <单片机原理及应用>课程设计任务书 二级学院电子信息与电气工程学院 专业:班级: 学生姓名指导老师职 称讲师 课题名称 课题工作内容1. 设计内容:硬件电路的设计. ...

  7. c语言编写电子秒表程序,电子秒表C程序.doc

    电子秒表C程序 电子秒表程序 #include #include #define uchar unsigned char #define uint unsigned int uchar code se ...

  8. 用java语言编写程序计算九宫图

    前言 对于程序员来说,用程序解决数学问题是最有趣的事情之一.本人研究了一个能够轻易计算九宫图的算法,并且用java语言编写程序得以实现.现将算法和代码公布,欢迎广大程序爱好者前来阅读.交流. 九宫图简 ...

  9. 2n 用c语言编程程序,用C语言编写程序.ppt

    <用C语言编写程序.ppt>由会员分享,可在线阅读,更多相关<用C语言编写程序.ppt(64页珍藏版)>请在人人文库网上搜索. 1.第2章 用C语言编写程序,2.1 在屏幕上显 ...

  10. c语言 465串口编程,用C语言编写串口程序

    在当今,流行的编程软件种类繁多,它们编程方便.易于维护,但是在与硬 件直接打交道和编制系统软件时却束手无策,于是C语言就有了用武之地.C语言 作为汇编语言与高级语言之间的一种过渡语言,兼有汇编语言的高 ...

最新文章

  1. NodeJS基础2---2 Promise详解
  2. Python之第一个helloworld的代码
  3. java必读书籍_必读:Java Java
  4. oracle客户端 tsnping时出现TNS-03505:无法解析名称
  5. LeetCode 2147. 分隔长廊的方案数
  6. windows php5.3升级,Windows10系统将PHPNOW升级PHP版本为5.3.5
  7. 【Vue2.0】—常用的内置指令(九)
  8. ubuntu下/etc/rc.local和/etc/init.d/rc.local的区别
  9. Website English Comments
  10. Mini 容器学习笔记10——方法注入
  11. 面试必掌握之计算机网络
  12. 基于数组的一个简单增删改查
  13. promise 应用实例
  14. matlab拟合模型学习总结
  15. 分享12个鲜为人知的的小众网站,每一个可以让你打开新世界的大门,让你震惊。...
  16. Java从入门到放弃第1天
  17. linux fdisk指定ext4,如何在Linux中创建新的Ext4文件系统(分区)
  18. vs自拉软件全名_vs全新操作软件说明书
  19. 采购供应链管理系统:企业采购与供应链管理更简单、快捷
  20. 呕心沥血踩坑之:外星人M17电脑在一块硬盘上成功安装Windows与Ubuntu16.04双系统

热门文章

  1. Python 蓝牙通信模块pybluez Win7
  2. 分享优秀的微信答题小程序
  3. java--人民币小写(金额)转为大写(金额转换)
  4. Nginx 集群和IP反向代理
  5. Web渗透测试-实战 方法 思路 总结
  6. android暗水印技术,基于Android的隐藏数字水印技术的研究与实现
  7. Mybatis源码分析(一) | 如何调试Mybatis源码
  8. 小程序开发流程详细,小程序开发教程
  9. 机器学习之实战matlab神经网络工具箱
  10. 自媒体图文、视频素材网站哪里找?这些非常好用