1.算法的定义
算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。
2.算法的五个重要特性
确定性、能行性、输入、输出、有穷性
确定性:算法使用的每种运算必须要有确切的定义,不能有二义性。
能行性:算法中有待实现的运算都是基本的运算,原理上每种运算都能由人用纸和笔在“有限”的时间内完成
输入:每个算法都有0个或多个输入
输出:一个算法产生一个或多个输出
有穷性:一个算法总是在执行了有穷步的运算之后终止
计算过程:满足确定性、能行性、输入、输出,但不一定满足有穷性的一组规则称为计算过程。如操作系统
3.算法时间/空间复杂度的限界函数常用的有三个:上界函数、下界函数、渐进紧确界函数。记:算法的实际计算时间为f(n),计算时间的限界函数为g(n)
Θ记号
如果存在正常量c1和c2,使得对于足够大的n,函数f(n)能“夹入” ,即:如果存在正常数c1,c2和n0,对于所有的n≥n0,有 c1|g(n)| ≤|f(n)| ≤ c2|g(n)|, 则记作f(n) = Θ(g(n))
既有 f(n) = Ω(g(n)),又有f(n) = Ο(g(n)),g 既是f 的下界,又是f 的上界
O记号
如果存在两个正常数c和n0,对于所有的n≥n0,有|f(n)| ≤ c|g(n)|,则记作 f(n)=Ο(g(n))。f(n)=Ο(g(n))表示f(n)是集合Ο(g(n))的成员
Ω记号
如果存在两个正常数c和n0,对于所有的n≥n0,有|f(n)| ≥ c|g(n)|,则记作f(n)=Ω(g(n))。f(n)=Ω(g(n))表示f(n)是集合Ω(g(n))的成员;
o,ω记号
o,ω记号专门用来表示一种非渐进紧确的上界或下界
例:2n = o(n2),但2n2≠ o(n2)
n2/2 = ω(n),但n2/2≠ ω(n2)
4. 限界函数的性质
常见的多项式限界函数有:
Ο(1) < Ο(logn) < Ο(n) < Ο(nlogn) < Ο(n2) < Ο(n3)
常见的指数时间限界函数:
Ο(2n) < Ο(n!) < Ο(nn)
5. 标准记号与常用函数
NP问题:多项式复杂程度的非确定性问题
比如,找大质数的问题。没有一个公式可以一步步推算出来,下一个质数应该是多少。无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题
如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题