-1

例如,我正在运行一个简单的嵌套循环,该循环在两个数组中查找重复元素。对于 2000 的列表大小,如果我连续多次运行该程序,平均需要大约 25 毫秒(猜测)。但是,在 for 循环中运行程序一次,我循环它的次数越多,一次迭代的平均运行时间就越快。例如,10 次是每次迭代 5 毫秒,10000 次是 2 毫秒。

我必须测量几种不同类型的列表交集(例如嵌套循环、二进制搜索等)在不同列表大小下的运行时间,所以我不确定哪个更准确。对于较长的人来说,它变得更加成问题,因为运行这么多次需要太长时间。

    for (int i = 0; i < A.length-1; i++) {
        for (int j = 0; j < B.length-1; j++) {
            if (A[i] == B[j]) {
                inter++;
            }
        }
    }

我如何生成使用的列表:

public studentList(int size, String course) {
int IDrange=2*size;
studentID=new int[size];
boolean[] usedID=new boolean[IDrange];
for (int i=0;i<IDrange;i++) usedID[i]=false;
for (int i=0;i<size;i++) {
    int t;
    do {
    t=(int)(Math.random()*IDrange);
    } while (usedID[t]);
    usedID[t]=true;
    studentID[i]=t;
}
courseName=course;
numberOfStudents=size;
}
4

1 回答 1

2

java 虚拟机在程序运行时优化程序。当同一段代码被频繁执行时,程序流程将围绕该代码路径进行优化,以便尽快执行。

当您想对算法进行基准测试时,通常的做法是多次执行它们并丢弃前几次迭代的时间测量。

但请注意,还有其他因素可能会影响您的时间测量,例如不可预测的垃圾收集器,它可以随时开始工作并减慢 JVM 的其余部分。

于 2013-01-25T21:25:48.297 回答