数据库的话应该很快了(相对比较而言吧) SQL 语句如下:
Select a,Sum(c) As d From Table Group By a
具体的时间要看数据库的不同了。
你的程序应该还有办法可以优化的。
比如b,d你可以用TStringList来存储,因为TStringList支持一种访问的方式在你的程序中就很与用处,也就是它可以把一个名字(Name)和一个值联系起来(字符串类型)的,而且可以通过名字找到这个值,程序可以改成这样的:
Const
arraynum = 100000;Var a: Array[0..arraynum] Of String;
c: Array[0..arraynum] Of integer; slDest:TStringList;//代替了b,d
//首先初始化slDest的Strings[i]="0"
For i:=0 To files Do
Begin
slDest.Values[a[i]]:=IntToStr(StrToInt(slDest.Values[a[i]])+c[i]);
End;
slDest.Sort;//或者通过别的方法来排序.
Select a,Sum(c) As d From Table Group By a
具体的时间要看数据库的不同了。
你的程序应该还有办法可以优化的。
比如b,d你可以用TStringList来存储,因为TStringList支持一种访问的方式在你的程序中就很与用处,也就是它可以把一个名字(Name)和一个值联系起来(字符串类型)的,而且可以通过名字找到这个值,程序可以改成这样的:
Const
arraynum = 100000;Var a: Array[0..arraynum] Of String;
c: Array[0..arraynum] Of integer; slDest:TStringList;//代替了b,d
//首先初始化slDest的Strings[i]="0"
For i:=0 To files Do
Begin
slDest.Values[a[i]]:=IntToStr(StrToInt(slDest.Values[a[i]])+c[i]);
End;
slDest.Sort;//或者通过别的方法来排序.
上面的SQL语句少排序部分。
Select a,Sum(c) As d From Table Group By a order by a
需要一个好的动态查找算法(long2(N)),如树型结构,同时自动排序,
这是减少时间的关键;1。对每一个(a,c)-->在树中查找->有:累加;没有:插入;
2。将统计好的树-->生成数组(b,d)