时间复杂度
表明问题规模扩大后,程序需要的时间长度增长得有多快。程序的时间复杂度一般可以分为两种级别:
[1] - 多项式级的复杂度,如O(1),O(log(n))、O(n^a)等,
[2] - 非多项式级的,如O(a^n)、O(n!)等。后者的复杂度计算机往往不能承受。
空间复杂度表示一个算法在计算过程当中要占用的内存空间大小
约化(Reducibility)
简单的说,一个问题A可以约化为问题B的含义是,可以用问题B的解法解决问题A。(个人感觉也就是说,问题A是B的一种特殊情况。)标准化的定义是,如果能找到一个变化法则,对任意一个A程序的输入,都能按照这个法则变换成B程序的输入,使两程序的输出相同,那么我们说,问题A可以约化为问题B。
例如求解一元一次方程这个问题可以约化为求解一元二次方程,即可以令对应项系数不变,二次项的系数为0,将A的问题的输入参数带入到B问题的求解程序去求解。
另外,约化还具有传递性,A可以化约为B,B可以约化为C,那么A也可以约化为C
基本概念
PProblem: 对于任意的输入规模n,问题都可以在n的多项式时间内得到解决;
NP(Non-deterministicPolynomial) Problem: 可以在多项式的时间里验证(猜到)一个解的问题;
NPC(Non-deterministicPolynomial Complete) Problem: 满足两个条件 (1)是一个NP问题 (2)所有的NP问题都可以约化到它;其是NP问题的子集;NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。
NP-Hard Problem:满足NPC问题的第二条,但不一定要满足第一条;
(很难求解)