《程式設計珠璣》之程式碼調優
chapter 9 書中的觀點:
@1,有些程式設計師太在乎程式的細小“優化”,以至於難以維護;而另外一些程式設計師很少關注效率,雖然他們編寫的程式有著漂亮清晰的結構,但是效率極低以至沒有實際用處。優秀的程式設計師將效率納入整體的考慮之中:效率只是軟體中的問題之一,但有時候也很重要。
@2,快取記憶體原理,什麼場景適合使用來提高效率。
@3,能不優化就不要優化。結合工作經驗,很大一部分bug,事故,都是改動引發的。不成熟的優化是大量程式設計災害的根源,它會危機程式的正確性,功能性,以及可維護性。
附加二分搜尋的優化原始碼:
/* 改進後的二分搜尋,若搜尋的物件有多個,返回最左邊的那個值的位置 */ int binarySearch2(int arr[],int n,int value) { /* 這裡的思路是,假想的下標 -1 的值表示最小值,下標 n 的值表示最大值。 初始階條件 b = -1,e = n;並且有 n >= 0, arr[-1] < value, arr[n] >= value 終止條件是 b + 1 = e 搜尋條件:b < e, arr[b] < value && arr[e] >= value 說明:當條件終止時,b + 1 = e,而arr[b]<value, arr[e]>=value。所以e是最終可能的結果。 */ assert(n >= 0) int b = -1; int e = n; while((b+1) != e) { /*conditon: arr[b]<t, arr[e]>=t, b<e*/ int m = b + (e-b)/2; printf("b:%d, m:%d, e:%d\n",b,m,e); assert(b < e && m > b && m < e); if(arr[m]<t) b = m; else e = m; } /*final: arr[b]<t, arr[e]>=t*/ int p = u; if(p >= n || arr[p] != value) return -1; return p; }