打印本文 关闭窗口 |
|
| 算术编码用C++的实现 | |
| 作者:佚名 文章来源:不详 点击数 更新时间:2008/1/9 11:02:18 文章录入:杜斌 责任编辑:杜斌 | |
|
|
|
|
算术编码需要输入的是符号,各个符号的概率还有需要编码的符号序列,根据概率可以算出初始编码间隔,先设几个变量在后面可用: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个编码符号的概率。 编码程序如下: #include <iostream.h> #define M 100 #define N 4 class suanshu { int count,length; char number[N],n; long double chance[N],c; char code[M]; long double High,Low,high,low,d; public: suanshu() {High=0;Low=0;} void get_number(); void get_code(); void coding(); ~suanshu(){} }; void suanshu::get_number() { cout<<"please input the number and its chance."<<endl; for(int i=0;i<N;i++) { cin>>n>>c; number[i]=n; chance[i]=c; } if(i==20) cout<<"the number is full."<<endl; count=i; } |
|
打印本文 关闭窗口 |