如何实现C++算术编码

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++写的比较完整的程序,还有些不尽人意的地方,比如变量和函数命名不太专业,以后会注意,慢慢也会好的。

当前标题:如何实现C++算术编码
文章路径:http://www.shufengxianlan.com/qtweb/news15/21015.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联