算术编码是把一个信源表示为实轴上0和1之间的一个区间,信源集合中的每一个元素都用来缩短这个区间。
算术编码的过程如下:
(1) 设定编码区间的高段为h,编码区间的长度为g,EndC为编码字符分配的高段,StartC
为字符分配区间的低端。
(2) 根据有限的信源估算出各元素的概率。
(3) 杜宇编码的元素A1,根据(2)估算的概率和区间,计算出该元素编码后的新的l,和h。其公式如下:
h = StartC + g* K;
l = Endc + g* K1;
其具体程序如下:
const Ca = 0.2; Ce = 0.3;
Ci = 0.2; Co = 0.2;
Cu = 0.1;
var
Form1: TForm1;
s: string;
StartC, EndC: Extended;
implementation
{$R *.dfm}
procedure ConvertTo(s: string; var StartC, EndC: Extended);{将字符串变为数值}
var n, i: integer;
c: char;
g: Extended;
begin
StartC := 0;
EndC := 1;
n := Strlen(Pchar(s));
for i := 1 to n do
begin
c := s[i];
g := EndC - StartC;
case C of
/'a/':
begin
EndC :=StartC + g * Ca;
StartC := StartC + g * 0;
end;
/'e/':
begin
EndC := StartC + g * (Ca + Ce);
StartC := StartC + g * Ca;
end;
/'i/':
begin
EndC := StartC + g * (Ca + Ce + Ci);
StartC := StartC + g * (Ca + Ce);
end;
/'o/':
begin
EndC := StartC + g * (Ca + Ce + Ci + Co);
StartC := StartC + g * (Ca + Ce + Ci);
end;