如何实现C++算术编码

开发 后端
算术编码在图象数据压缩标准中扮演了重要的角色。在C++语言的C++算术编码中,消息用0到1之间的实数进行编码。

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 <iostream.h> 
  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."<<endl;  
  23. for(int i=0;i<N;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."<<endl;  
  31. count=i;  

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

【编辑推荐】

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

2009-07-16 10:20:21

赫夫曼编码

2024-04-10 12:14:36

C++指针算术运算

2010-01-13 18:44:03

C++编译

2021-10-20 14:03:06

C++运算符类型

2016-01-28 14:41:06

CC++编码

2011-07-20 16:16:03

CC++

2010-01-26 15:51:06

C++变量

2023-10-30 10:29:50

C++最小二乘法

2020-09-09 09:48:28

C++语言Rust

2010-01-27 16:39:48

C++编译器

2010-01-22 13:31:58

C++标准库

2010-01-28 10:33:10

C++开发程序

2010-01-27 09:38:27

C++书籍

2010-01-28 13:35:41

调用C++函数

2010-01-26 10:53:58

学C++

2010-01-20 09:54:27

C++数据类型

2022-12-05 09:42:14

C++Python算法

2009-09-09 13:47:38

C++访问SqlCe

2010-01-14 17:13:53

C++接口

2010-01-22 13:45:36

C++代码
点赞
收藏

51CTO技术栈公众号