算法初探

算法

算法和数据结构作为编程学习的一部分,没有算法的程序即没有灵魂。在数学和计算科学中,算法作为一个计算的具体步骤,常用于计算、数据处理和自动推理等。
最早的算法为欧几里德提出的“求最大公因子的算法”——即我们都非常熟悉的辗转相除法。

算法分析

·算法的正确性
·算法的复杂性
算法的复杂度多种多样,最常用的包括时间复杂度——用于刻画程序输入的大小、空间复杂度——刻画程序所需要的最大内存,以及I/O等其他复杂性。

算法设计
实现方法
递归与迭代
顺序、并行与分布式
确定性与非确定性
近似求解与精确求解等等

算法分析的数学基础
计算复杂性函数的阶用于描述算法的增长率

⊙分析时间复杂度忽略系数和低次项 常数次操作的时间复杂度均为Θ(1)

时间复杂度的描述方法
f(n)=Θ(g(n))
c1g(n)〈f(n)〈c2g(n)
表明f(n)在g(n)的两个系数之间

f(n)=Ο(g(n))
0〈f(n)〈cg(n) (当n>N时)

f(n)=Ω(g(n))
0〈cg(n)〈f(n) (当n>N时)

Ω(g(n))常用于描述问题的最佳求解复杂度
排序问题的T(n)=Ω(n)

和式的估计与界限
1.线性和
2.级数

        Σi=n(n+1)/2=Θ(n^2)
        Σa^k=(a^(n+1)-1)/(a-1)     (a!=1)
调和级数 Σ1/k=Θ(ln(n))+Ο(1)=Θ(ln(n))

递归方程
使用小的输入值来描述一个函数方程和不等式

替换法:联想已知的常用的算法的T(n)
例 求解2T(n/2+17)+n
类似于2T(n/2)+n 猜想T(n)=Ο(nlogn)

例 求解T(n)=2T(n/2)+n
首先很容易猜想到时间复杂度的上下界
T(n)=Ω(n) T(n)=Ο(n^2)
再在n和n^2之间 猜想 自然会联想到熟悉的nlogn

Master定理
求解T(n)=aT(n/b)+f(n) a>1 b>0 f(n)为正整数
(1)若f(n)=Ο(n^logb(a)-ε) ε>0 则 T(n)=Θ(n^logb(a))

(2)若f(n)=Θ(n^logb(a)) 则 T(n)=Θ(n^logb(a)lgn)

(3)若f(n)=Ω(n^logb(a)+ε) ε>0,且对于所有充分大的n有af(n/b)<= cf(n), 则 T(n)=Θ(f(n))

例 T(n)=9T(n/3)+n
a=9 b=3 f(n)=n n^logb(a)=Θ(n^2)
f(n) =n=Ο(n^logb(a)-ε)
则 T(n)=Θ(n^logb(a))=Θ(n^2)

你可能感兴趣的:(算法)