-1

たとえば、2 つの配列で重複する要素を見つける単純なネストされたループを実行しています。リストのサイズが 2000 の場合、プログラムを連続して数回実行すると、平均で約 25 ミリ秒かかります (推測)。ただし、プログラムを for ループ内で 1 回実行すると、ループ回数が増えるほど、1 回の反復の平均実行時間が速くなります。たとえば、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 に答える