算法分析基础

来源:互联网 发布:mac guid分区方案 编辑:程序博客网 时间:2024/06/14 00:15

1.级数

a. 算数级数(等差)

1+2+3+4+...+n = O(n^2) //末项的平方


b. 幂数级数

1^a + 2^a + ... + n^a = O(n^(a+1)) //末项的幂数加一次方


c. 几何级数

a^0 + a^1 + a^2 + ... + a^n=O(a^n)//末项


d. 调和级数

1/1 + 1/2 + 1/3 + ... + 1/n = O(logn)

log1 + log2 + log3 + ... + logn = O(nlogn)


2.正确性证明

a. 不变性证明:第k轮后,一定会...;此时考虑第k+1轮...(数学归纳法)

b. 单调性证明:第k轮后,问题规模会变成n-k,算法必然会终止

因此,一定会有边界。


3. 递归

减而治之

分而治之

以上两种可同时用,例如lcs中末尾字符相同,则减而治之;不相同,则分成两种情况(分而治之)。


4. 封底估算

主流计算机频率: 10^9/s

fie = 1.618

fie^36 = 2^25

2^10 = 10^3

10^5 s = 1 day

10^10 = 3 centuries


5.关于递归的复杂度

无论是减而治之还是分而治之,复杂度取决于分成的递归进程个数。

一般来说,减而治之,复杂度不变;分而治之,复杂度指数级。