有个问题我百思不得其解,望高手指教(100分)

to songmk:
你把我上面的代码存下来,运行一下,告诉我时间,
这样,我好知道 机子的 差异。


array of pchar;

function bijiao(const S1, S2: pchar): integer;

while s2 <>#0 do
begin
if (S1 = S2) then
Inc(R);
Inc(I);

 
to: hfghfghfg,

我就用你的代码啊
 
好象有用汇编写出来字符串操作函数的unit,我忘了名字了。
 
> 第一步,导入文本文件,这个文本文件一般有几十万到几百万行,没行就是些 00-99的数字
有无长底限制? 数字中间有一个空格吗?

> 第二步,设定要比较的字串,例如:01 03 08 25 56 76 88, 这个通常有几百个
每一个的长度都固定吗?

> 第三步,计算出每个设定的字串在源文本文件中每一行相同的数字的个数。
是计算你所说几百个的相同个数的总和吗?
01 算是一个数字还是两个?
只要单个数字相同就算一个吗?

01 05 02 03 中计算 01 02 计算出来的数值是2吗?
 
procedure TForm1.Button4Click(Sender: TObject);

var
TAA: array of pchar;
TBB: array of pchar;

I, J, ST, ET, N, NA, NB: integer;
S1, S2: string;
function bijiao(const S1, S2: pchar): integer;
var
I, R: integer;
l: integer;
begin
I := 0;
R := 0;
while s2 <>#0 do
begin
if (S1 = S2) then
Inc(R)
else
break;
Inc(I);
end;
Result := R;
end;

begin

setlength(TAA, 700);
setlength(TBB, 60000);
for i := 0 to 699 do
TAA := 'abcdefgabcdefgabcdefg';

for j := 0 to 59999 do
TBB[j] := 'abcdefgabcdefgabcdefg';

ST := gettickcount;
NA := length(TAA);
NB := length(TBB);

for I := 0 to NA - 1 do
begin
for J := 0 to NB - 1 do
begin
N := bijiao(Taa, Tbb[j]);
end;
Edit3.Text := formatfloat('0%', I / NA * 100);
application.ProcessMessages;
end;
ET := gettickcount;
Edit3.Text := InttoStr(ET - ST) + '毫秒';

end;

这段代码 运行18秒
 
5528毫秒
不会吧,我是赛阳1.1G 128M内存 w2000,
delphi6
 
to: wlmmlw,
现在先不想结果, 只要比较两个字符串有多少是相同的
这个效率解决了,上面的也好办了
 
songmk:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2292335
 
to: hfghfghfg,
不会吧 我的是PIII 1G Dell 笔记本 winxp系统 384M内存

另外把你编译好的exe文件发给我。 szjack@21cn.com
 
songmk:
我要去看《黑客3》了,公司组织的。
你到http://www.delphibbs.com/delphibbs/dispq.asp?lid=2292335 去看一下
//你得到了答案,通知我 hfghfghfg@sohu.com
//要不要我再开几个贴子
 
to: hfghfghfg,

好的 谢谢 我先看看
 
给你找个字符串运算比较快的函数库:
http://www.droopyeyes.com/default.asp?mode=ShowProduct&amp;ID=4
 
There is no PosWithIndex in Delphi, so we were using Pos(Copy()). Using FastStrings to parse our XML data we were able to cut our processing time down from 5 hours to only 15 seconds.

 
呵,一下午不在,这么热闹
 
来自:SS2000, 时间:2003-11-13 21:19:00, ID:2292813 | 编辑
3172毫秒
CPU AMD AthlonXP 1800+ 512M内存


来自:SS2000, 时间:2003-11-13 21:39:00, ID:2292853 | 编辑
编译优化选项很重要,如果没有编译优化,
我的时间变成了
11797毫秒
 
刻个记号!!
 
仔细看看!
 
Hi,hfghfghfg

  http://www.delphibbs.com/delphibbs/dispq.asp?lid=2291287

同样程序我编译出来的比你发给我的exe慢好几倍, 奇怪了, 我用的是Delphi6, 你用的是D7? 还是编译选项有优化?怎么优化的?

thanks


Regards


我也是 d6
 
我要补充一点
for I := 0 to NA - 1 do
begin
for J := 0 to NB - 1 do
begin
S1 := TAA.Strings;
S2 := TBB.Strings[J];
N := bijiao(S1, S2);
end;
Edit3.Text := formatfloat('0%', I / NA * 100);
application.ProcessMessages;
end;
你这一段是冒泡法比较
应该用快速排序法比较会提高几百倍
可以参考
C:/Program Files/Borland/Delphi6/Demos/Threads
里的程序
 

Similar threads

回复
0
查看
864
不得闲
D
回复
0
查看
920
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部