|
算术编码算法 数据挖掘实验室
算术编码是把一个信源表示为实轴上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; 数据挖掘实验室
"u":
begin
EndC := StartC + g * (Ca + Ce + Ci + Co + Cu); 数据挖掘论坛
StartC := StartC + g * (Ca + Ce + Ci + Co); 数据挖掘研究院
end; 数据挖掘论坛
else 数据挖掘论坛
begin 数据挖掘实验室
Showmessage(" 输入的字符串有误 "); 数据挖掘交友
exit;
end; 数据挖掘交友
end; 数据挖掘论坛
end; 数据挖掘实验室
end; 数据挖掘工具
procedure NemuricalToStr(var s: String; var StartC, EndC: Extended); 数据挖掘工具
{将数值转换为字符串} 数据挖掘研究院
const eps = -1e-5; 数据挖掘实验室
begin 数据挖掘研究院
if StartC-0.2 < -eps then 数据挖掘论坛
if (EndC- 0.2<= -eps) and (EndC > StartC) then 数据挖掘研究院
begin 数据挖掘工具
StartC := StartC / 0.2; 数据挖掘论坛
EndC := EndC / 0.2; 数据挖掘交友
s := s + "a";
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC); 数据挖掘论坛
end; 数据挖掘工具
if (StartC- 0.2 >= eps) and (StartC-0.5 < -eps) then 数据挖掘交友
if (EndC-0.5<= -eps) and (EndC>StartC) then 数据挖掘工具
begin 数据挖掘论坛
StartC := StartC - 0.2; 数据挖掘工具
EndC := EndC - 0.2; 数据挖掘实验室
StartC := StartC / 0.3; 数据挖掘论坛
EndC := EndC / 0.3;
s := s + "e"; 数据挖掘工具
if (StartC <>0) or (EndC <> 1) then 数据挖掘交友
NemuricaltoStr(s,StartC,EndC); 数据挖掘研究院
end ; 数据挖掘研究院
if (StartC- 0.5>= eps) and (StartC- 0.7< -eps) then 数据挖掘实验室
if (EndC-0.7<= -eps) and (EndC>StartC) then
begin 数据挖掘工具
StartC := StartC - 0.5;
EndC := EndC - 0.5; 数据挖掘实验室
StartC := StartC / 0.2; 数据挖掘论坛
EndC := EndC / 0.2; 数据挖掘交友
s := s + "i"; 数据挖掘工具
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC); 数据挖掘实验室
end ; 数据挖掘论坛
if (StartC-0.7 >= eps) and (StartC-0.9 < -eps) then 数据挖掘实验室
if (EndC-0.9<=-eps) and (EndC>StartC) then 数据挖掘工具
begin
StartC := StartC - 0.7; 数据挖掘论坛
EndC := EndC - 0.7; 数据挖掘实验室
StartC := StartC / 0.2; 数据挖掘工具
EndC := EndC / 0.2; 数据挖掘工具
s := s + "o"; 数据挖掘交友
if (StartC <>0) or (EndC <> 1) then 数据挖掘研究院
NemuricaltoStr(s,StartC,EndC); 数据挖掘工具
end ;
if (StartC -0.9>=eps) and (StartC-1 < -eps) then
if (EndC-1<= -eps) and (EndC>StartC) then
begin 数据挖掘实验室
StartC := StartC - 0.9; 数据挖掘论坛
EndC := EndC - 0.9; 数据挖掘实验室
StartC := StartC / 0.1; 数据挖掘实验室
EndC := EndC / 0.1;
s := s + "u"; 数据挖掘工具
if (StartC <>0) or (EndC <> 1) then
NemuricaltoStr(s,StartC,EndC); 数据挖掘研究院
end;
end; 数据挖掘交友
procedure TForm1.Button1Click(Sender: TObject); 数据挖掘实验室
begin 数据挖掘交友
s := Edit1.Text; 数据挖掘交友
ConvertTo(s,StartC,EndC); 数据挖掘工具
Edit2.Text := FloattoStr(StartC); 数据挖掘论坛
Edit3.Text := FloattoStr(EndC); 数据挖掘工具
end; 数据挖掘交友
procedure TForm1.Button2Click(Sender: TObject); 数据挖掘交友
begin 数据挖掘论坛
s := "; 数据挖掘交友
StartC := StrToFloat(Edit2.Text); 数据挖掘论坛
EndC := StrtoFloat(Edit3.Text); 数据挖掘研究院
NemuricalToStr(s,StartC,Endc); 数据挖掘论坛
Edit1.Text := s; 数据挖掘交友
end; 数据挖掘交友
end. 数据挖掘工具 次程序在Delphi6+Windows2000下通过。 |