如何实现C 算术编码
创始人
2024-06-21 19:11:36
0

C++算术编码用到了两个基本的参数:符号的概率和它的编码间隔,信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,编码过程中的间隔决定了符号压缩后的输出。

C++算术编码需要输入的是符号,各个符号的概率还有需要编码的符号序列,根据概率可以算出初始编码间隔,先设几个变量在后面可用:High——当前编码的上限,Low——当前编码的下限,high——中间变量,用来计算下一个编码符号的当前间隔的上限,low——中间变量,用来计算下一个编码符号的当前间隔的下限,d——当前间隔之间的距离。

第1个编码符号的当前间隔为其初始的编码间隔,第i个编码符号的当前间隔为第i-1个编码后的[Low,High),第i+1个编码符号的当前间隔算法如下:high=Low+d*第i+1个初始编码符号对应的上限,low=Low+d*第i+1个编码符号对应的下限,然后High=high,Low=low,d=d*第i个编码符号的概率。

编码程序如下:

  1. #include  
  2. #define M 100  
  3. #define N 4  
  4. class suanshu  
  5. {   
  6. int count,length;  
  7. char number[N],n;  
  8. long double chance[N],c;  
  9. char code[M];  
  10. long double High,Low,high,low,d;  
  11. public:  
  12. suanshu()  
  13.   {High=0;Low=0;}  
  14. void get_number();  
  15. void get_code();  
  16. void coding();  
  17. ~suanshu(){}  
  18. };  
  19.  
  20. void suanshu::get_number()  
  21. {  
  22. cout<<"please input the number and its chance."<;  
  23. for(int i=0;i;i++)  
  24. {  
  25.   cin>>n>>c;  
  26.   number[i]=n;  
  27.   chance[i]=c;  
  28. }  
  29. if(i==20)  
  30.   cout<<"the number is full."<;  
  31. count=i;  

C++算术编码在VC6.0和xp专业版下运行通过,这是我个人***次用c++写的比较完整的程序,还有些不尽人意的地方,比如变量和函数命名不太专业,以后会注意,慢慢也会好的。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...