测试算法的执行时间,大家会怎么测试呢?执行100次,100条结果,然后取平均值?或是从中取5条连续的数据然后除以5?
今天介绍两种方法:中位数和平均值,我们主要做SDK,我在移动端做android demo,平时会让测某个函数执行时间,平时用这两种方法。
“中位数”:是从老大那学到的(为毛我之前从前不知道这种方法,我见识少,让我哭会,另外优快云的表情为毛点击没反应?);
“平均值”:这种方法一开始不愿意用,原因是不太明确怎么用?取多少条数据?从哪个位置开始取?比如取10条,取开头的10条?中间的10条 ?(我们移动组有个测试小姑娘,是从中取5条连续的数据然后除以5),总是感觉这样得出的数据,与真实值之间的差距很大,比如刚好选择的连续5条比其他的高一些或低一些。今天(2016.6.14)我再次遇到此问题时,主动去问我旁边的专业测试人员,他告诉我:求平均值,一般要测试3次,比如每次取500条(第1条~第500条),求这
500条数据的平均值,最后对这3次平均值再次求平均值,最为最终的参考值,这样求出来的数据更接近真实值,更具有参考价值。
方法一:
数据如下(只截取一部分):
04-11 14:57:59.307: I/track106(31196): 算法执行时间: 96 ms
04-11 14:57:59.354: I/track106(31196): 算法执行时间: 12 ms
04-11 14:57:59.425: I/track106(31196): 算法执行时间: 15 ms
04-11 14:57:59.455: I/track106(31196): 算法执行时间: 13 ms
04-11 14:57:59.483: I/track106(31196): 算法执行时间: 14 ms
04-11 14:57:59.523: I/track106(31196): 算法执行时间: 12 ms
04-11 14:57:59.553: I/track106(31196): 算法执行时间: 10 ms
04-11 14:57:59.599: I/track106(31196): 算法执行时间: 22 ms
04-11 14:57:59.623: I/track106(31196): 算法执行时间: 13 ms
04-11 14:57:59.670: I/track106(31196): 算法执行时间: 17 ms
04-11 14:57:59.710: I/track106(31196): 算法执行时间: 28 ms
04-11 14:57:59.734: I/track106(31196): 算法执行时间: 17 ms
04-11 14:57:59.752: I/track106(31196): 算法执行时间: 10 ms
04-11 14:57:59.778: I/track106(31196): 算法执行时间: 12 ms
04-11 14:57:59.811: I/track106(31196): 算法执行时间: 13 ms
04-11 14:57:59.846: I/track106(31196): 算法执行时间: 11 ms
04-11 14:57:59.886: I/track106(31196): 算法执行时间: 15 ms
04-11 14:57:59.918: I/track106(31196): 算法执行时间: 17 ms
04-11 14:57:59.948: I/track106(31196): 算法执行时间: 12 ms
04-11 14:57:59.976: I/track106(31196): 算法执行时间: 9 ms
步1:对此数据排序(从小到大)。借助Excel(Excel有一个“排序”的功能)
把数据复制到Excel表里
步2:
选中要分列的数据,然后“数据”---》"分列"---》“分隔符号”---》“空格”----》一直下一步就可以了,
:
分列成功,结果如下:
步3:排序:
步4:这里有20条数据,取第10条数据作为最终结果。类似地:如果有100条数据,选择第50条作为最终结果。
这种方法是我们主管用的方法,至于其中的原理我还没想明白,有知道的小伙伴要给我留言哦,多谢!
方法二:
借助execl的"分列"、"平均值"功能
“分列”参照“方法一”;
“平均值”:选中数据,右键“自动求和”的下拉列表里有一个“平均值”,注意:如果是多500条甚至更多的数据求平均值,一定要选中这500条,不要选中整列,选中整列的做法不对(与只选中500条的结果不一样),所以不要多选,只选要求操作数据所在位置