算法分析(学习笔记)

前言

He calculated just as men breathe, as eagles sustain themselves in the air.          ----Francois Arago


算法分析

两个主要任务

     1.正确性

         (不变性

          单调性)

     2.复杂度。

小知识:因为C++等高级语言的基本指令,均等于常数条RAM的基本指令;在渐进意义下,二者大体相当。

 分析的主要方法

迭代:级数求和

递归:递归跟踪 + 地推方程

猜测 + 验证。

分析的具体实例

算数级数

与末项平方同阶: T(n) = 1 + 2 + ... +n = n( n+1)/2 = O(n^2)

幂方级数

比幂次高出一阶

T2(n) = 1^2 + 2^2 + 3^2 +  ...  +  n^2  = n(n+1)(2*n+1)/6 = O(n^3);

T3(n) = 1^3 + 2^3 + 3^3 + ...   + n^3 = n^2(n+1)^2/4 = O(n^4);

同理:k^m(k 从1 到 n )之和 的复杂度是 n^(m+1)


几何级数

Ta(n) = a^0+a^1+...a^n = (a^(n+1) - 1 )/(a - 1) = O(a^n)



收敛级数

1/1/2 + 1/2/3 + 1/3/4 + .. + 1/(n-1)/n = 1 - 1/n = O(1);

1+ 1/(2^2)  + ... + 1/n^2 < 1 + 1/(2^2) + ... =PI^2/6 =O(1);

(以下可能未必收敛,然而长度有限)

h(n) = 1 + 1/2 + 1/3 + ... + 1 / n = O(log n)     //调和级数

log1 + log2 + log3 + ... + log n = log(n!) = O (n * log n)  //对数级数













posted @ 2018-01-22 16:10  过道  阅读(509)  评论(0)    收藏  举报