2012-11-11 43 views
0
許多循環代碼

有人能告訴我,如果下面的瘋狂的循環結構可以在一個更漂亮的方式被改寫?現在它做我想要的一切。重寫在Java

// xi and yi stand for x and y axis input index 
    for (int xi = 0; xi < this.inputNumberOfColumnsAlongXAxis; xi++) 
    { 
     for (int yi = 0; yi < this.inputNumberOfColumnsAlongYAxis; yi++) 
     { 
      InputCell inputCell = new InputCell(xi, yi); 
      Synapse synapse = new Synapse(inputCell); 
      // add (inputDataScaleReductionOnXAxis * inputDataScaleReductionOnYAxis) 
      // number of synapses to a proximalSegment. 
      for (int x = 0; x < this.numberOfColumnsAlongXAxis; x++) 
      { 
       for (int y = 0; y < this.numberOfColumnsAlongYAxis; y++) 
       { 
        int inputX = 
         (int)Math.round(x * inputDataScaleReductionOnXAxis); 
        int inputY = 
         (int)Math.round(y * inputDataScaleReductionOnYAxis); 
        this.columns[(y * this.numberOfColumnsAlongXAxis) + x] = 
         new Column(this, inputX, inputY, x, y); 

        // only add the square of synapses directly under the proximal segment 
        while (xi < this.inputDataScaleReductionOnXAxis * (x + 1)) 
        { 
         while (yi < this.inputDataScaleReductionOnYAxis * (y + 1)) 
         { 
          this.getColumn(x, y).getProximalSegment().addSynapse(synapse); 
         } 
        } 
       } 
      } 
     } 
    } 
+0

看起來在每個循環中,您在處理不同的集合。你能提供關於你的程序的簡要描述嗎? –

+0

我想那時我會問的第一個問題是,「你對這些循環的意圖是什麼?」這很難推測,從第一眼.. – Makoto

+0

我看到一堆達官顯貴唱反調下我的投票規則,但似乎沒有人願意落筆將任何實際的建議。全都說話,不走。 –

回答

0

看起來你有細胞的2-d的數據結構和O(N^3)初始化過程,其中N是細胞的數量。這看起來很貴......但如果N非常大或過程經常進行,這只是一個重大問題。

反正我看不到,可以明顯簡化代碼什麼...假設當前算法反映了需求。看起來,這6個級別的循環是問題中固有的。有些計算就是這樣。

我能看到的唯一可能是N突觸與O(N^2)連接(我認爲你就是這樣做的)......在某種程度上是不現實的。換句話說,如果我們真正理解了您試圖用此代碼解決的問題,我們只能提出非平凡的改進。


請注意,我不是說「作爲一個規則,如果一些複雜的工程,不要惹它。」。我想說的是:

  • 有些事情本身不能提高...這看起來像一個這樣的事情,和
  • 也許並不怎樣都無所謂;例如如果只是執行該代碼一次...

「如果它工作不惹它」是... ... IMO一個貧窮的藉口下的地毯刷的問題,而給予他們適當的思想。

「不要打擾試圖優化,因爲通常額外的時間和精力什麼都不會產生......」只是另一個相同藉口的表述。對我來說,它說「我很好,我的初始代碼無法改進」「我很糟糕,我找不到像樣的優化」「太糟糕了...客戶應該無論如何都不會期待體面的表現「

請注意,這與標準(和有效)建議顯着不同... 「優化之前的配置文件」

+0

全都說話。向他展示工作代碼。 –

+0

@ChrisGerken - 他已經有工作代碼。我在說我認爲他不能改進它。 –

0

這一切都取決於你輸入的大小。這些嵌套循環的增長率並不理想。也就是說,隨着輸入規模的增長,運行你算法所花費的時間將增長得更快,速度更快。但是如果你知道你的投入總是很小的話,那就好了。