O(n log n)时间复杂度算法?

时间:2015-04-07 20:37:46

标签: java algorithm time big-o

我创建了这个算法来找到3个数字之间的最佳交易。它通过该计划,找到了最好的销售,购买和从股票中获利的日子。我需要解释所使用的算法以及时间复杂度如何为O(n log n),但我在确定时遇到了很多麻烦。我希望有人可以解释O(n log n)并将其与我的方法联系起来。

这是我的方法:

public static Trade bestTrade(int[] a) 
   {
      int lowest = a[0];
      int lowestIndex = 0;
      int highest = a[a.length - 1];
      int highestIndex = a.length - 1;
      int profit = 0;

      for(int i = 1; i < a.length; i++) 
      {
         if (a[i] < lowest && i < highestIndex) 
         {
            lowest = a[i];
            lowestIndex = i;
         }  
      }

      for(int i = a.length - 2; i >= 0; i--) 
      {
         if (a[i] > highest && i > lowestIndex) 
         {  
            highest = a[i];   
            highestIndex = i;
         }  
      }

      for(int i = 1; i < a.length; i++) 
      {
         if (a[i] < lowest && i < highestIndex) 
         {   
            lowest = a[i];   
            lowestIndex = i;
         }  
      }

      if (highestIndex > lowestIndex) 
      {
         profit = highest - lowest;
         return new Trade(lowestIndex, highestIndex, profit);
      }

      return new Trade(lowestIndex, highestIndex, profit);
   }

}

4 个答案:

答案 0 :(得分:1)

该函数的O(n)优于O(n log n)。 一般来说,你只需要查看循环,因为没有嵌套循环,你只有循环遍历a的所有元素。函数被认为是n。

答案 1 :(得分:1)

复杂度为O(n),其中n为数组a的长度。

你循环3次,所以运行时间大约为3n,因此它的顺序为n:O(n)。

答案 2 :(得分:1)

亲自尝试找到答案。它将来会有很大帮助。这看起来像是O(N),我不确定为什么你确信它是O(NlogN)。

此链接可能有用, http://pages.cs.wisc.edu/~vernon/cs367/notes/3.COMPLEXITY.html

答案 3 :(得分:1)

O(n)的

它与a.length的数量成正比。每次运行for函数时,它都会遍历每天的数据。如果有一种方法,其中进程数增加超过纯数(嵌套fors),那么它可以是O(n log n)或O(n ^ 2)。但在这种情况下,它显然只是n的大O.