目前看到了很多文章中都提到了NP-Hard问题,于是就去网上查了一些基本概念:
(NP:non-deterministic polynomial,非确定性多项式)
1、首先要了解时间复杂度的问题:时间复杂度是指随着问题规模的扩大,程序解决问题所需时间增长的有多快。
问题规模:n
多项式时间复杂度:O(nk)
指数型时间复杂度:O(kn) 、O(n!)、或更大的时间复杂度
2、P:多项式问题,能用多项式时间算法得到结果的问题
指数型问题:所有绝对不可能用多项式时间求解的可解问题
(当然还有一些不可解的问题)
NP:得到一类问题的解,但需要验证解的正确性,验证所花的时间是多项式时间,至于求解所用时间不考虑长短,这类问题被称为NP问题
简单来说,NP问题解的正确性很容易被检验出来,这里所说的检验是指存在一个多项式算法
3、约化(reducibility)
问题A可约化为问题B,说明B的时间复杂度高于A
(例:解一元一次方程问题可约化为解一元二次方程问题)
4、NPC(NP完全问题)问题定义:两个条件(1)是一个NP问题;(2)所有的NP问题都能约化到它
NP-Hard问题:满足NPC问题的第二个条件,但不一定满足第一个条件(即比NPC问题范围广)