我已针对同一问题实施了两种算法,并想找出,这是专业方面最好的。
基本理念是:
final static int LOOP_COUNT = 500;
long totaTime = 0;
worm-up();
for(int i =0, i<LOOP_COUNT, i++)
{
long startTime = System.currentTimeMillis();
myMethod();
long endTime= System.currentTimeMillis();
totalTime += endTime - startTime;
}
return totalTime / LOOP_COUNT;
为这两种算法做到这一点。
可是:
我怎样才能实现,android系统不在后台进行任何系统计算并使数据偏斜
有没有办法可以比较用过的内存,两种方法都需要?
答案 0 :(得分:1)
如果您需要专业的统计和相关结果,并且希望最大限度地减少Android后台进程的影响,则需要多次运行算法并比较平均值。这样,由于大数定律,你的结果是正确的。
多少次取决于执行时间的标准偏差以及您希望的确定程度。如果您熟悉一些基本的统计知识,您可以使用一些基本公式确定样本大小,例如,如果您的样本分布是正态分布的,则可以运行t检验来比较两种算法的平均值。这自动包含了您希望最小化后台进程影响的事实。它们会随机出现,经过多次迭代后,Android的影响力将被取消。
另外看看垃圾收集器,如果你在算法执行过程中有很多对象创建,它会影响你的结果,但它应该,因为它也会影响算法的实际使用情况。 / p>
答案 1 :(得分:0)
您可以尝试分析代码并找出时间复杂度。如果你有一个嵌套循环:
for(int i = 0; i< max; i++){
for(int j = 0; j< max; j++){
c = i + j;
}
}
这将具有时间复杂度O(n ^ 2)。空间复杂度为O(1)
另一个例子是:
for(int i = 0; i< max; i++){
list[i] = "hello";
}
for(int j = 0; j< max; j++){
list2[j] = "hello";
}
O(2n)的时间复杂度与O(n)相同,O(2n)的空间复杂度为O(n)。
后者具有更好的运行时但使用更多内存。