数学基础系列文章目录
前提
多项式定义:形如
a
n
x
n
+
a
n
−
1
x
n
−
1
+
⋯
+
a
1
x
1
+
a
0
=
0
a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x^1+a_0=0
anxn+an−1xn−1+⋯+a1x1+a0=0的式子称为多项式;
时间复杂度:表示算法运行得到解所需的时间;
例子:
冒泡排序法,有
n
n
n个数需要排序,至多需要
(
n
2
−
n
)
/
2
(n^2-n)/2
(n2−n)/2次比较才能完成排序,当n→∞时,除了
n
2
n^2
n2其它均可忽略,故其时间复杂度为
O
(
n
2
)
O(n^2)
O(n2);
P类问题
存在多项式时间算法的问题(polynomail);
排序问题便是一个有多项式时间的问题;
一般地,计算机处理的数据量很大,当一个问题的所需时间超过了多项式时间,那便毫无意义,因为所需时间过长;
NP类问题
能在多项式时间内验证并得到一个正确解的问题(nondeterministic polynomial);
P类问题是NP类问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证它;
但是,值得注意的是,NP类问题能够在多项式时间内得到验证,但无法说明这个问题存在多项式时间内的算法;故此引出一个问题,NP类问题是否等于P类问题;
NPC类问题
存在这样一个NP问题,所有的NP问题都可以约化成它(nondeterministic polynomial complete);
一般地,我们直观地认为,被约化成的问题具有比前一个问题更复杂的时间复杂度;
当同一类的所有NP问题,都可以在多项式时间内约化成一个最复杂的NP问题,如果我们针对这个最复杂的NP问题可以找到它的多项式时间内的算法,那我们就可以说同一类的所有NP问题都具有多项式时间内的算法,即NP=P;
NP难问题
存在这样一个问题,所有的NP问题都可以约化成它(NP-Hard);
NPH问题是NPC问题的拓展,这个最复杂的问题不一定是NP问题;
即使NPC问题得到解决,但是NPH问题可能仍然不能得到多项式时间内的算法;