2011-03-13 111 views
0

此問題涉及優化。假設我需要我的代碼中兩個地方的數組A的數組長度。我應該在兩個地方使用函數a.length(),還是將a.length()的值分配給局部變量並在兩個地方使用它更快。陣列長度問題

「更快」我的意思是在運行時間方面。而且,我正在漸漸地說話。

+0

什麼語言和什麼數據類型? – quasiverse 2011-03-13 06:36:18

回答

2

調用函數兩次的漸近複雜度是相同的 - 對同一個參數調用同一個(純函數)的任何常量調用都具有與對該函數的單個調用相同的漸近複雜性,因爲您可以僅滾動調入大O的隱藏常量的常數。

至於什麼會更快,不能保證哪一個會更快。它取決於語言和編譯器。我建議只寫兩種方式,並計算結果,看看是否有明顯的差異。也就是說,如果你寫的東西對性能至關重要,你不能撥打.length()兩次,你可能需要重新考慮你的方法,看看是否有更好的全球解決方案。除非您有充分理由相信您的程序在未優化版本中顯着較慢,否則微優化很難值得。

0

什麼語言?在許多語言中,這些調用會被優化掉(在編譯時或通過JIT編譯器),直接訪問數組對象的長度字段。

1

如果您必須提出這個問題,那麼您還沒有處在一個重要的地步。如果你是,你已經有了你的代碼,你可以試試看。這種事情很大程度上取決於你的語言和編譯器,唯一重要的結果就是你看到的結果。

不要擔心微觀優化,直到你發現你需要刮臉週期,即使如此算法是第一件事要檢查。