首页 新闻 会员 周边

请高手帮分析优化关于Delphi多个字符串带容错交集的函数

0
悬赏园豆:50 [待解决问题]

。最近做了一个Delphi多个字符串交集函数,问题:涉及3码即三星时 速度效率还可以接受,涉及4位数有点慢,尤其是当交集的字符串有100个以上,效率不能接受。有高手帮助优化解决:是否算法有问题? 改成多线程函数估计效率会提高,但我是个菜鸟,以前只是简单做些程序,技术太差。
交集函数或过程:
procedure TcshForm1.dstrjiaoji(kmmo: tmemo; kchk1: boolean; kedt1, kedt2, fw0,fw1,sanorsi, weizhi,leibie: Integer );
var
astr: array[0..299] of string;
pp, i, j, rr,k, k1,k2, uuuu, rongc, rc0, rc1, wzinde,jls: Integer;
s1,s2, s3,s4: string;
rrr1 : TStringList;
s : array[0..9999] of Integer;

begin
//kmmo:tmemo;kchk1 是否容错 , kedt1 容错1,kedt2容错2:TEdit;
// fw0,fw1, 选用大底数组的起始截止区间
//sanorsi 三星四星:
//leibie 选用大底数组
rrr1 := tstringlist.create;
rrr1.Delimiter := ' ';
rrr1.Sorted:=True;
rrr1.Duplicates := dupIgnore;

kmmo.Text := '';
rr := sanorsi;

k:=Trunc( Power(10, rr) - 1) ;
for i:=0 to k do
s[i]:=0;

for i := 0 to 299 do
begin
astr[i] := '';
end;
// for i := 0 to 199 do
// for j := 1 to 10 do
// begin
// bstr[i,j] := '' ;
// end;
rongc := 0;
rc0 := 0;
rc1 := 0;
if kchk1 = True then
begin
rc0 := kedt1;
rc1 := kedt2;
end;

for i := fw0 to fw1 do
begin

if leibie=0 then
astr[rongc] :=' '+ Trim(dstr[weizhi, i]);
if leibie=1 then
astr[rongc] :=' '+ Trim(kkstr[weizhi, i]);
if (leibie>=2) and (leibie<=5) then
astr[rongc] :=' '+ Trim(ttsstr[leibie,weizhi, i]);
rongc := rongc + 1;

if rongc > 299 then
break;
end;

s1:='';
for i:=0 to rongc-1 do
begin
rrr1.Clear;
rrr1.DelimitedText:= Astr[i];
for j:=0 to rrr1.Count-1 do
s[StrToInt(rrr1.Strings[j])]:=s[StrToInt(rrr1.Strings[j])]+1;

end;
k:=Trunc( Power(10, rr) - 1) ;
i:=0; s2 := '';
for j:=0 to k do
if (rongc - s[j] <= rc1) and (rongc - s[j] >= rc0)
then begin s2:=Trim(s2)+' '+ RightStr('000'+IntToStr(j),rr);
i:=i+1; end;
kmmo.Text := s2;

rrr1.Free;
end;

问题补充:

该过程关于容错交集思路,第一初始化数组s,是s[i]:=0; 第二步,遍历待交集字符串,将字符串转化为数组rrr1,修改s[rrr1.strings[i]]:=s[rrr1.strings[i]]+1.第三,检查s[i] 值是否符合容错,例:200个字符串,容错180-199,如果s[2]=10 即错误数=200-10=190,符合。

小智9871的主页 小智9871 | 初学一级 | 园豆:152
提问于:2018-09-01 13:55

建议给代码加上高亮,支持markdown代码高亮语法

dudu 5年前
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册