2015-01-09 56 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

回答