NPC问题浅析

1. npc问题

通俗的理解方式:无法在多项式时间内求解,但是可以在多项式时间内验证结果

e.g. :

验证一个hash值是否通过A的私钥生成复杂度低,但是要猜出什么内容,通过A的私钥生成的hash值会是B,则是一个多项式时间无法求解的问题

1.1 多项式时间

多项式时间

算法的复杂度,我们通常会说O(1) O(n) O(n^2) => 从括号里看出,复杂度可以用一个多项式来表达的算法,即为多项式时间算法

多项式:∑n^k 可表达的复杂度,比如 e^n是指数复杂度,就超越了多项式复杂度

比如:

遍历数组:算法复杂度为O(n)

二分查找:  算法复杂度O(log(n))

冒泡排序:O(n^2)

非多项式时间

复杂度无法通过多项式表达,一个最简单的例子,打印n个元素的所有组合,复杂度为O(n!), 阶乘的复杂度,超越了多项式可表达的范围


1.2 P 问题

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。(证明:得出完备解决)

我们大多数实现的程序和算法,都可以理解为P问题,参见【多项式时间章节里面的例子】


1.3 NP问题

如果一个问题的解,能在多项式时间内得到验证,那么这个问题就是NP问题

1.4 NP-Hard问题

所有的NP问题都可以约化到它

约化的概念:解决问题B, 就意味着解决问题A. 例如:乘法可以约化到加法

理解:无法在多项式时间内求解的问题 (证明一个问题时NP-hard问题,通常是证明它可以解决一个NPC问题)

例子参见文末

1.5 NPC问题 NP完备问题

同时满足下面两个条件的问题就是NPC问题。

1. 它得是一个NP问题;2. 所有的NP问题都可以约化到它

理解:无法在多项式时间内求解,但是可以在多项式时间内验证结果

例如这样一个问题:

已知md5值,求原内容,这个问题只能用穷举的方法,是一个无法在多项式时间内求解的问题

但是,我们拿到一个md5值和一个内容,却可以再很有限的计算代价下,验证这个md5是否是这个内容hash得到的

你可能感兴趣的:(NPC问题浅析)