- 积分
- 12
- 注册时间
- 2008-7-11
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2008-12-7 14:36:33
|
显示全部楼层
来自 山西太原
- In[63]:= ClearSystemCache[];
- {Timing@Total[
- Select[Range[1000000], Divisible[#, 3] || Divisible[#, 5] &]], (*Changqing's, 控制组*)
- Timing@Total[
- Select[Range[1000000], Mod[#, 3] == 0 || Mod[#, 5] == 0 &]], (*将控制组的Divisible换成了Mod,对照组1*)
- Timing@(Plus @@
- Select[Range[1000000], Divisible[#, 3] || Divisible[#, 5] &]), (*将控制组Total换成了Plus,对照组2*)
- Timing@Total[
- Cases[Range[1000000], x_ /; Divisible[x, 3] || Divisible[x, 5]]], (*Wayne's,对照组3*)
- Timing@(Plus @@
- Map[If[Divisible[#, 3] || Divisible[#, 5], #, 0] &,
- Range[1000000]])} (*Tau's,对照组4*)
- Out[64]= {{3.276, 233334166668}, {4.369, 233334166668}, {2.854,
- 233334166668}, {2.871, 233334166668}, {4.071, 233334166668}}
复制代码
[实验结果]
1.结果是233334166668。
2.由Select+真值函数测试的性能表现略逊于由Cases+谓词测试(控制组与对照组3),而Map+If的性能最差(对照组4,可以想到如果用了Total会更慢)
3.Plus的性能优于Total。
4.Divisible[]的性能优于Mod[]==0
[讨论]
你们为啥不人为设置一个更紧的Constraint呢?
- In[60]:= Timing@(Plus @@ Union[3 Range[333333], 5 Range[200000]])
- Out[60]= {0.733, 233334166668}
复制代码 |
评分
-
1
查看全部评分
-
|