3

如何有效地衡量我的 java 算法的性能?有什么准确的方法吗?

我读了其他同类但不满意的问题。任何帮助,将不胜感激。

4

5 回答 5

3
long reference=System.nanoTime();
your_funct();
long finishm=System.nanoTime();

System.out.println( ( (double)(finishm-reference) )/1000000000.0);  //in seconds

在我的机器中具有约 0.003 秒的有意义的水平。我的意思是,您以纳秒为单位进行测量,但在我的机器中,最小的步长约为 3000000 纳秒。

于 2012-09-02T16:07:35.973 回答
3

您要求性能表明某种时间。但那你会和什么比较呢?

衡量算法的一般方法是使用 Big O,它采用简化的数学方法。

为了在非常基本的层面上解释这一点,整数列表的简单线性搜索具有线性 (n) 最坏情况大 o。例如: for(int i = 0; i < sizeofarray; ++i) if(array[i] == to_find) return i;

在最坏的情况下,这将需要 i 次迭代(通常在大 o 中将数字称为 n) - 所以我们称之为 n 或线性复杂度算法。

类似于冒泡排序算法的东西是循环中的循环,因此我们有 n * n 复杂度 = n^2 或二次复杂度。

与 like 相比,如果我们只考虑排序,快速排序比二次复杂度(它是 n log n 复杂度)更有效,因此您可以认为快速排序比冒泡排序“更好”。

So when evaluating your algorithm think about it in terms of n. Is there a loop? how many? The fewer the better. No loops even better - constant big o.

于 2012-09-02T16:40:40.103 回答
2

如果可以使其实用或理论。如果可行,则在算法开始之前放置一个计时器,并在算法结束时停止它。如果是理论上的,那么使用Big O 表示法(不是那么难),您将获得对其时间或空间复杂度的估计。

于 2012-09-02T16:05:53.017 回答
2

您可以使用一些分析器。许多 IDE(例如 Netbeans)都有一个。

于 2012-09-02T16:08:09.037 回答
0

The best way to do it is still java.lang.System.currentTimeMillis() as it will work regardless the IDE you are using.

于 2018-08-04T12:40:19.913 回答