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;
}