X
xysir001
Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
r,i,j,k,m,flag:integer;
CombStr,temp1,temp2,temp3:string;
uball:string;
begin
r:=strtoint(edit2.Text)
//组合C(n,r)中的r,即组合数;n通过计算原始数据个数得出,(在这个程序中r=3,n为500左右)
try
for i:=n-1 downto r-1 do
begin
temp1:=memo1.Lines.Strings
//temp1存放第一个数
for j:=i-1 downto r-2 do
begin
temp2:=memo1.Lines.Strings[j]
//temp2存放第二个数
for k:=j-1 downto 0 do
begin
temp3:=memo1.Lines.Strings[k]
//temp3存放第三个数
CombStr:=temp1+' '+temp2+' '+temp3
//CombStr为新组合的数
flag:=0;
uball:='';
for m:=0 to memo4.Lines.Count-1 do
if flag<8 then
if not AnsiContainsText(CombStr,memo4.Lines.Strings[m]) then
//memo4控件中的数据为标准数据,即memo4.Lines.Strings[m]与CombStr比较,如果不同,则保存
//memo4.Lines.Strings[m]数据,如下:uball:=uball+memo4.Lines.Strings[m]+' ';
begin
uball:=uball+memo4.Lines.Strings[m]+' ';
flag:=flag+1
//flag为记录保存数据的个数
end;
if flag=3 then
if not AnsiContainsText(memo2.Lines.Text,uball) then
//如果待保存的数据(uball)与memo2控件中数据相同,则不保存;memo2控件为保存满足条件的数据
memo2.Lines.Add(uball);
end;
temp3:='';
end;
temp2:='';
end;
temp1:='';
CombStr:='';
finally
application.MessageBox('完成!','提示',mb_ok)
end;
end;
为了能使程序能运行下去,我用了线程(这段代码中没有),但在:
n=106,r=3,用了20多分钟;
n=250,r=3,用了5个多小时;
n=530,r=3,用了一晚上也没运算完。
这样的运算速度实在太慢,能不能对上面的代码进行优化或者采用其他的方法来提高运算速度。希望哪位朋友能帮忙解决。(如果我说的还不清楚,希望QQ联系,QQ:121269032)
谢谢!
谢谢!!
谢谢!!!
procedure TForm1.Button2Click(Sender: TObject);
var
r,i,j,k,m,flag:integer;
CombStr,temp1,temp2,temp3:string;
uball:string;
begin
r:=strtoint(edit2.Text)
//组合C(n,r)中的r,即组合数;n通过计算原始数据个数得出,(在这个程序中r=3,n为500左右)
try
for i:=n-1 downto r-1 do
begin
temp1:=memo1.Lines.Strings
//temp1存放第一个数
for j:=i-1 downto r-2 do
begin
temp2:=memo1.Lines.Strings[j]
//temp2存放第二个数
for k:=j-1 downto 0 do
begin
temp3:=memo1.Lines.Strings[k]
//temp3存放第三个数
CombStr:=temp1+' '+temp2+' '+temp3
//CombStr为新组合的数
flag:=0;
uball:='';
for m:=0 to memo4.Lines.Count-1 do
if flag<8 then
if not AnsiContainsText(CombStr,memo4.Lines.Strings[m]) then
//memo4控件中的数据为标准数据,即memo4.Lines.Strings[m]与CombStr比较,如果不同,则保存
//memo4.Lines.Strings[m]数据,如下:uball:=uball+memo4.Lines.Strings[m]+' ';
begin
uball:=uball+memo4.Lines.Strings[m]+' ';
flag:=flag+1
//flag为记录保存数据的个数
end;
if flag=3 then
if not AnsiContainsText(memo2.Lines.Text,uball) then
//如果待保存的数据(uball)与memo2控件中数据相同,则不保存;memo2控件为保存满足条件的数据
memo2.Lines.Add(uball);
end;
temp3:='';
end;
temp2:='';
end;
temp1:='';
CombStr:='';
finally
application.MessageBox('完成!','提示',mb_ok)
end;
end;
为了能使程序能运行下去,我用了线程(这段代码中没有),但在:
n=106,r=3,用了20多分钟;
n=250,r=3,用了5个多小时;
n=530,r=3,用了一晚上也没运算完。
这样的运算速度实在太慢,能不能对上面的代码进行优化或者采用其他的方法来提高运算速度。希望哪位朋友能帮忙解决。(如果我说的还不清楚,希望QQ联系,QQ:121269032)
谢谢!
谢谢!!
谢谢!!!