2015-01-09 57 views
0
public class Zigzag{ 
    public static void zigzag_optimizated(int n, int m) { 
     int length = 2*m; 
     int localIndex[] = new int[n]; 
     for(int i = 0; i<n; i++){ 
      localIndex[i] = i % length; 
     } 
     for (int i = 0; i <= m; i++) { 
      for (int j = 0; j < n; j++) { 
       if (localIndex[j]==i || localIndex[j] == length-i) 
        assert true; 
        // System.out.print('*'); 
       else 
        assert true; 
        //System.out.print('-'); 
      } 
      //System.out.println(); 
      assert true; 
     } 
    } 
    public static void zigzag(int n, int m) { 
     for (int i = 0; i <= m; i++) { 
      for (int j = 0; j < n; j++) { 
       int k = j % (2*m); 
       char c = '-'; 
       if (k==i || k == 2*m-i) c = '*'; 
       assert true; 
       //System.out.print(c); 
      } 
      assert true; 
      //System.out.println(); 
     } 
    } 
    public static void main(String args[]){ 
     final int n = 5000000; 
     long start = System.nanoTime(); 
     zigzag(n, n); 
     long time = System.nanoTime() - start; 
     long start2 = System.nanoTime(); 
     zigzag_optimizated(n, n); 
     long time2 = System.nanoTime() - start2; 
     System.out.println(); 
     System.out.println("Time1:" + time); 
     System.out.println("Time2:" + time2); 

} 
} 

兩個函數具有相同的算法,它會打印一個鋸齒形的棋盤來屏幕。 在優化版本中,k被保存在數組中以避免重新計算,提取2 * m。 我改變System.out.println()assert true;更快,更準確的基準,但是當我做標杆,原來的版本總是跑得更​​快(其中n足夠大) enter image description here代碼優化導致執行速度較慢 - 需要說明

+1

這個問題應移至[代碼審查](http://codereview.stackexchange.com/) –

+0

大概是因爲存儲器訪問比'*'和''%較慢。 – immibis

+0

...重新閱讀後,我在這裏沒有看到問題。 – immibis

回答