使用System.nanotime()将插入的插入时间定时



我在Java中有一些代码,平均每次插入10尝试。它分类相同的数组,但最多100个单词,200个单词等,直到整个数组的完整lenght。下面的代码分别用于100个和200个单词,但随着变量的更改,所有代码看起来都一样。

但是,下一个平均时间似乎都会变短。例如。9658233ns用于100个单词,4273459ns,用于200个单词,300个单词的3716726ns,400个单词的2965091NS和2842528NS,用于459个单词。但是,如果我的顺序倒数,首先对整个数组进行排序,最后一个100个单词的数组,则花费最长的时间来分类完整的数组和最短的时间来通过100个单词的数组进行排序。

是否会使用其他方式计时插入排序会导致我取得更一致的结果?

    long i1AverageTime = 0L;
    for (int i = 0; i < 10; i++) {
        long start = System.nanoTime();
        insertionSort(myArray, 100);
        long end = System.nanoTime();
        long timeTaken = end - start;
        i1AverageTime += timeTaken;
    }
    i1AverageTime /= 10;
    long i2AverageTime = 0L;
    for (int i = 0; i < 10; i++) {
        long start = System.nanoTime();
        insertionSort(myArray, 200);
        long end = System.nanoTime();
        long timeTaken = end - start;
        i2AverageTime += timeTaken;
    }
    i2AverageTime /= 10;

使用定时方法进行算法分析确实是一种判断算法性能的困难方法,尤其是在笔记本电脑或机器上用于个人或学校使用。

有很多原因您可能会得到不稳定的时间:

  1. 您的计算机的处理速度可能会在您运行的每一秒钟都在更改。诸如Web浏览器,防病毒软件和其他背景过程之类的事情正在影响您拥有的处理能力,从而影响您运行算法的能力。
  2. 对于内存也是如此。您的RAM使用情况和内存可用性正在不断变化,并且非常动荡,因此使用它来衡量性能不是一个安全的指标。

测量算法性能的一种更准确的方法是分析算法的运行时复杂性,以相对于其已知复杂性(通常为O(n)O(n^2)(。


相关内容

  • 没有找到相关文章

最新更新