1.1算法与程序
算法的性质:输入、输出、确定性、有限性。
程序是算法用某种程序设计语言的具体实现,可以不满足算法的有限性。
1.2算法复杂性分析
算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性。
一般只讨论时间复杂性。
实践表明,可操作性性最好的是最坏情况下的时间复杂性。
分析时间复杂性时可以将复杂性函数简化为渐进复杂性,比较两个算法的渐进复杂性的阶即可确定哪个算法的效率高。
上界(O):如果存在正的常数C和自然数N0 ,使得当N >= N0时有f(N) <= Cg(N),则称函数f(N)当N充分大时上有界,且g(n)是它的一个上界,记为f(N) = Og(N)。这时还说f(N)的阶不高于g(N)的阶。
下界(Ω):如果存在正的常数C和自然数N0 ,使得当N >= N0时有f(N) >= Cg(N),则称函数f(N)当N充分大时下有界,且g(n)是它的一个下界,记为f(N) = Ωg(N)。这时还说f(N)的阶不低于g(N)的阶。
定义f(N) = θ(g,(N))当且仅当f(N) = O(g(N))且f(N) = Ω(g(N))是,称为f(N)与g(N)同阶。
如果对于任意给定的ε>0,都存在正整数N0,使得当N >= N0时有f(N) / g(N) < ε,则称函数f(N)当N充分大时的阶比g(N)低,记为f(N) = o(g(N))。
1.3NP完全性理论
1.P类问题:存在多项式时间算法的问题。
2.NP问题:能在多项式时间内验证得出一个正确解的问题。
3.NPC类问题:存在这样一个NP问题,所有的NP问题都可以约化成它。
4.NP-Hard问题:NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是它不一定是一个NP问题。
P⊆NP 并且 NPC = NP ∩ NP-hard