《编程珠玑》 读书笔记
《編程珠璣》
讀書筆記
婁雨禛 PB16060356
準確的問題描述
很多時候,我們總是過度關注了解決問題所用的巧妙算法,而將問題本身的重要性忽視。當我們拿到一個問題時,應當反復研讀問題的每一個細節,因為正是這些細節的細微偏差導致了我們在解決問題時方案與技巧的重大不同。
如果我們只花很少的時間研讀問題本身,而過度專注于問題的解決時,極有可能在百般忙碌之后,發現自己走了一大段彎路。所謂“舍本逐末”,或許說的就是這個道理吧。
數據決定程序結構
程序語言是給人閱讀的,程序的執行效率是由數據流的高效與否體現的。而橫跨這兩者之間的,便是程序結構。事實上,良好的程序結構能夠非常好地同時達成上述兩個目標,而基本的方法,就是讓我們尊崇這么一個原則:數據決定程序結構。
這里有一些值得記錄的注意點。
出錯信息
混亂系統的數百個出錯信息散布在出錯代碼中。同時,這些出錯信息又和其他語句混雜在一起。而清晰系統則通過一個專用函數來訪問這些出錯信息。
單詞分析
很多計算機問題都是由英文單詞的分析引起的。拼寫檢查器會使用“后綴去除”來精簡詞典,這是所有編程人員應當注意的。
結構化數據
最初,結構化數據就意味著選擇恰當的變量名。后來,在程序員使用“平行數組”或寄存器偏移量的地方,編程語言加入了記錄或結構以及指向它們的指針。指針的引入極大地優化了數據的傳遞和表達。我們在編程過程中也要盡量發揮指針操作的優越性。
代碼調優法則
代碼調優大致有以下六條法則。
空間換時間法則
空間換時間在很多地方都見得到。比如,求斐波那契數列時,我們為了防止遞歸所產生的龐大計算量拖慢運行速度,往往將之前步驟的數據存儲起來,以便后次調用。空間換時間的思想在今天尤為適用。隨著儲存空間的大幅增加,我們更追求速度的提升。
時間換空間法則
密集儲存表可以通過增加儲存和檢索數據所需的時間來減小存儲開銷。
循環法則
將代碼移出循環 與其在循環的每一次迭代中都執行一次某種運算,不如將其移到循環體外,只計算一次。
循環展開 通過將循環展開,可以減少修改循環下標的開銷,從而有效避免管道延遲,增加指令的并行性。
刪除賦值 如果內循環中很多開銷來自普通的賦值,通常可以通過重復代碼并修改變量的使用來刪除這些賦值。
消除無條件分支
循環合并
邏輯法則
利用等價的代數表達式。如果邏輯表達式的求值開銷太大,就將其替換為開銷較小的等價代數表達式。
過程法則
打破函數層次。對于調用自身的函數,通常可以將其改寫為內聯版本并固定傳入的變量來縮短其運行時間。
表達式法則
消除公共子表達式。如果兩次對同一個表達式求值時,其所有變量都沒有任何改動,那么,就應當儲存第一次的變量值以取代第二次的求值。
轉載于:https://www.cnblogs.com/RainLou/p/8623760.html
總結
以上是生活随笔為你收集整理的《编程珠玑》 读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 183. Customers Who N
- 下一篇: 超便携式截屏录屏软件FastStone