继续。
第3章,函数的增长。这章比较简单。渐进符号,O, Θ, Ω。函数的上下界。
练习3.2-8,k*ln(k)>=C1*n; k*ln(k)<=C2*n; 解不等式,k=Θ(n/lnn)。
思考题3-6,a: n; b: lg*(n); c: log2(n); d: log2(n)-1; e: -lg(lg(n)); f: 无穷大; g: -log3(log2(n)); h: log(lgn)(n/2) //非最优;
第4章,分治策略。递归式,子问题,求解递归式的三种方法。对递归树法比较感兴趣。举了个最大子数组的例子。这个例子中分治与暴力枚举的区别在与,分治是先划中间点,寻找跨越中间点的一对最大最小点,然后在左右两个分划的区域继续寻找。这样,每层Θ(n),一共log2(n)层。而暴力枚举法需要对每个元素都检查n次,总共是Θ(n^2)。如果用非常不严谨的伪码表示:
function find(A){if count(A)<2 return 0; if count(A)==2 return A[end]-A[begin]; return max(find_cross(A),find(A前半),find(A后半));}
function find_cross(A){return find_biggest_in(A后半)-find_smallest_in(A前半);}
递归树计算渐进紧确解。按层分解,每层各自求和后,求各层总和。主定理无感。
练习4.4-8,T(n)=T(n-a)-T(a)+cn,a是常数,所以总的层数是n/a,每层cn,故总计为Θ(n^2)。</