科研小白,在很多文章中都涉及到了NP-Hardness的概念。因为以前都没有接触过这个概念,这里记录一下。
一、P vs NP问题
想要理解这个问题,首先要了解 P vs NP问题。
他表示一个可以快速验证的问题能否存在快速解决的方法。快速指存在一种算法,可以在多项式的时间内运行。这里涉及到另一个概念,多项式时间(polynomial time),指一个算法的运行时间上限受到与输入相关的多项式的限制,与之矛盾的类似于指数时间。
于是,可以在多项式时间内解决的问题就是P类问题,而有些问题无法得到答案,却可以快速验证答案,就属于NP问题。P与NP问题的差距表明可以在多项式时间内验证的问题能够在同等时间内得到答案,NP问题就能够验证而无法求解,P问题则可以求解。
一个典型的NP问题例子就是数独游戏,随着格子的增大,我们用于验证一个解是否正确的时间缓慢增加(多项式增加),而求解正确答案的时间则是指数增长。也就是检查起来很快,但解决起来很慢。NP问题可以通过一个快速的解决方法得到其他的解决方法,这个特性称为NP完备性(NP-completeness),然而找到一个快速解决方法很难。
二、NP-Hardness
在计算复杂性理论体系中,NP-Hardness是一类问题的属性。
当一个NP问题L可以在多项式时间内减少到问题H时,则问题H就是NP-Hard的。则H的解就可以在多项式时间内用于解决NP问题L。只要能够找到一个多项式时间的H的解,则可以在多项式时间内解决NP问题L,然而这个解是很难得到的,一般是使用别的方法逼近这个方法。
后续还有关于P等于NP或不等于的讨论,这个问题关系着现有的很多研究方向,具体可以参考链接:
https://en.wikipedia.org/wiki/P_versus_NP_problem#cite_note-poll-9
的后续内容。