提示:呢篇文講嘅唔係數學最佳化

軟件最佳化粵拼jyun5 gin2 zeoi3 gaai1 faa3英文software optimization)指將一隻軟件改到更加有效率,等個系統行起上嚟唔使用咁多系統資源。簡單例子有檢查吓隻軟件嘅源碼,確保段源碼完全冇任何多餘(即係有同冇都唔會影響隻軟件嘅功效)嘅碼-想像家陣編寫緊一隻網上遊戲程式,隻遊戲好受歡迎,有數以十萬計嘅玩家,如果個程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼,會搞到部伺服器嘅負責大咗好多。因為噉,最佳化喺實際嘅軟件工程工作上係一個相當受重視嘅課題[1]

以下嘅內容,假設讀者已經識嗮電腦程式編寫嘅基礎概念。

基礎概念

編輯

軟件最佳化係軟件工程上嘅一樣重要工序:軟件(software)泛指用嚟做某啲特定功能電腦程式,例如一隻電子遊戲就係一隻用嚟做娛樂用途嘅軟件;齋靠日常觀察就可知,部電腦要行一個電腦程式,梗要或多或少噉花啲時間同埋記憶體,而事實表明,一個寫程式嘅人寫程式嗰陣用嘅手法,會對「個程式要行幾耐先行得完」(睇埋編譯期執行期等嘅概念)或者「個程式要用幾多記憶體」造成具體影響[2][3]

舉個簡單例子,想像家陣想寫個程式,個程式要攞個數 ainputoutput 出嗮所有「細過或者等如 a、又係 10 嘅倍數」嘅數,即係[4]

如果 input 係 200,就要出 200, 190, 180, 170, 160,... 噉嘅一列數;
如果 input 係 150,就要出 150, 140, 130, 120, 110,... 噉嘅一列數;

想像下面段虛擬碼

 a = 200; # 設 a 做 200
 while (a > 0)  # 可以睇埋 while 迴圈嘅概念。
 {
   b = 10;
   if (a % b == 0} # 如果 a 係 b 嘅倍數,print a 出嚟睇。
     print(a);
   a -= 1; # a 數值下降 1
 }

上面段碼查實唔係咁有效率b = 10 呢個步驟唔使喺個 while 迴圈每個圈度都行一次,而因為段碼有咗不必要嘅步驟,就搞到段碼行起上嚟慢咗。上面段碼可以改做:

 a = 200;
 b = 10;
 while (a > 0) 
 {  
   if (a % b == 0} 
     print(a);
   a -= 1;
 }

b = 10 呢個步驟就變成淨係做一次咁多,令到段碼效率高咗。軟件最佳化指緊嘅就係[2]:p. 1[5]

要減少一個程式消耗嘅資源量,當中『資源量』包括-
  • 碼嘅數量、
  • 行起上嚟嘥嘅時間,同埋
  • 行起上嚟嘥嘅記憶體量,

同時保持個程式功能唔變

上面攞嚟做例子嗰個程式好簡單。就算做咗最佳化,齋靠肉眼睇唔多覺佢行得快咗。不過專業軟件工程上整嗰啲軟件,好多時閒閒哋成幾萬行碼咁長,有啲甚至仲有成上億行碼[6]。對於噉嘅軟件嚟講,如果佢哋每 50 行碼就要嘥多 10 毫秒(1 毫秒 = 0.001 秒)行,已經會對佢實際用嗰陣嘅表現造成明顯影響。因為噉,專業嘅軟件工程師都相當關注最佳化嘅問題,會諗好多技巧想令啲程式更加有效率。

層面

編輯

演算法

編輯
睇埋:窮舉搜尋

源碼

編輯

強度折減

編輯
内文:強度折減

系統樽頸

編輯
内文:系統樽頸

缺點

編輯

最佳化好多時會令個程式嘅可讀性下跌

睇埋

編輯

文獻

編輯
  • Abelson, H., & Sussman, G. J. (1996). Structure and interpretation of computer programs. The MIT Press.
  • Gorelick, M., & Ozsvald, I. (2020). High Performance Python: Practical Performant Programming for Humans. O'Reilly Media.
  • Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
  1. Wadleigh, K. R., & Crawford, I. L. (2000). Software optimization for high-performance computing. Prentice Hall Professional.
  2. 2.0 2.1 Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
  3. Lowry, E. S., & Medlock, C. W. (1969). Object code optimization (PDF). Communications of the ACM, 12(1), 13-22.
  4. Code Optimization in Compiler Design. GeeksForGeeks. 1. Code Motion or Frequency Reduction, Example.
  5. Performance Optimization in Software Development. Medium.
  6. 5 Most Complex Software Ever 互聯網檔案館歸檔,歸檔日期2022年10月8號,.. JavaScript in Plain English.