(算法 + 数据结构) = 程序
图灵——计算机科学之父、人工智能之父 图灵奖——计算机界的诺贝尔奖 图灵测试
算法相关性质:输入、输出、确定性、有限性
算法:解决问题的方法或过程
一个算法是正确的,如果它对于每一个输入都最终停止,而且产生正确的输出。
程序调试只能证明程序有错,不能证明程序无错误!
一个算法在一台抽象的计算机上运行所需要的时间 (对特定输入产生结果需要的原子操作或“步”数) T = T ( N , I ) T = T(N,I) T=T(N,I)
N:问题的规模 I:输入
1、最坏情况下的时间复杂性 2、最好情况下的时间复杂性 3、平均情况下的时间复杂性
f(N)和g(N)是定义在正数集上的正函数 若存在正常数 C C C和自然数 N 0 N_0 N0
f ( N ) f(N) f(N)当N充分大时上有界:当 N ≥ N 0 N \geq N_0 N≥N0时,有 f ( N ) ≤ C g ( N ) f(N) \leq Cg(N) f(N)≤Cg(N), g ( N ) g(N) g(N)是 f ( N ) f(N) f(N)的一个上界
f(N)=O(g(N))O ( 1 ) < O ( l o g 2 n ) < O ( n ) < O ( n l o g 2 n < O ( n 2 ) < ⋅ ⋅ ⋅ < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1) < O({log}_2n) <O(n) <O(n{log_2}n <O(n^2)<···<O(2^n)<O(n!)<O(n^n) O(1)<O(log2n)<O(n)<O(nlog2n<O(n2)<⋅⋅⋅<O(2n)<O(n!)<O(nn)
f ( N ) f(N) f(N)当N充分大时下有界:当 N ≥ N 0 N \geq N_0 N≥N0时,有 f ( N ) ≥ C g ( N ) f(N) \geq Cg(N) f(N)≥Cg(N), g ( N ) g(N) g(N)是 f ( N ) f(N) f(N)的一个下界
f(N)=Ω(g(N))高效算法,堆叠硬件
低效算法,堆叠硬件无用
f ( N ) f(N) f(N)当与 g ( N ) g(N) g(N)同阶:当且仅当 f ( N ) = O ( g ( N ) ) f(N) = O(g(N)) f(N)=O(g(N))且 f ( N ) = Ω ( g ( N ) ) f(N) =\Omega(g(N)) f(N)=Ω(g(N))
f(N)=θ(g(N))一个算法对特定输入产生结果所需要的存储空间大小 S = S ( N , I ) S = S(N,I) S=S(N,I)