コードの時間複雑さは分かっています。プログラムが実行されたシステムはIntel Corei3で、デュアルコアとCPU @ 2.4GHzです。これには4つの論理プロセッサがあります。 これらの詳細を使用して、コードの実行時間をどのように計算できますか?既知のO(n)とシステムクロックが既知のため、コードの実行時間を計算できます
public class PerfmTest {
public static void main(String[] args) {
getexeTime(1000000);
}
public static void getTime (long n) {
// long startTime = System.currentTimeMillis();
long startTime = System.nanoTime();
long k = 0;
for (int i = 1; i <=5; i++) {
// k = k + 5;
}
// long endTime = System.currentTimeMillis();
long estimatedTime = System.nanoTime() - startTime;
//System.out.println("Execution time for n = " + n + " is " + (endTime - startTime) + " milliseconds");
System.out.println("Execution time for n = " + n + " is " + estimatedTime + " nanoseconds");
}
}
出力は855ナノ秒でした。
私は、観察可能な副作用のないコードがコンパイル時に最適化できることを知らなかったと思います。それにかかわらず、あなたはこの運動で何を達成しようとしていますか? –
私はコードが最適化されていることを知っています。しかし、ポイントは理論上どのようにO(n)であり、どのように2つのデュアルコアで動作するかです。私は教育援助プロジェクトに取り組んでいます。 – Uma
理論的には、コンパイラはループを削除することができるので理論上はO(n)ではありません(ループの後には 'k'を読むことはできません - それを削除する副作用はありません。理論)。したがって、あなたの現在のコードは、理論上、 'O(1)'です。また、マイクロベンチマークに注意してください。 JITがあり、コールドランはウォームランとは異なります(JITをトリガーするために複数の実行が必要な場合があります)。 –