P问题、NP问题、NP完全问题和NP难问题概念梳理

非"正规"问题

  • 不可解问题:不存在解决算法的问题
    例子:停机问题
  • 不可能有复杂度O(多项式)问题
    例子:输出从1到n这n个数的全排列(因为把结果打印出来也是O(n!)的复杂度)

"正规"问题

正规的问题是让程序解决一个问题

  • 输出一个“YES”或“NO”(这被称为判定性问题)
  • 输出一个什么什么的最优值(这被称为最优化问题)。
    在这里插入图片描述

P | NP

  • P类问题:存在多项式时间算法的问题。
    算法程序(O(多项式))->问题解
  • NP类问题:可以在多项式的时间内验证一个解的问题。
    猜测解->验证程序(O(多项式))->Yes(猜测解是问题解)/No(猜测解不是问题解,选择另外的猜测解)

很显然,P类问题是NP类问题,P类问题的验证程序可以这样设计,显然验证程序属于O(多项式)。

验证程序(猜测解):
	算法程序->问题解
	return 问题解==猜测解

P=NP问题其实探讨的就是P类问题和NP类问题的关系,由前面我们知道P类问题是NP类问题,但是我们仍不知道NP类问题是不是P类问题。为什么这个意义很大呢?

举个例子,比特币的工作量证明很明显是NP问题,验证解只需要哈希一下。

比特币的工作量证明隐含着 P N P P\neq NP 的看法。对于工作量证明这个NP问题,假设比特币矿工的求解方法只有遍历Nonce值(在这种情况下才能保证系统安全)。如果这个前提成立,工作量证明就是 P N P P\neq NP 的例子。因为该算法只有遍历的求解算法,其不是P类问题,同时由前面知道它是NP类问题。

如果, P = N P P=NP ,那么矿工可以多项式方式求解出工作量证明的解,那么比特币系统不再安全。

注意:虽然大部分人都趋向于 P N P P\neq NP ,但这只是个猜想,目前还没得到证明。 P = N P P=NP 问题可以说是计算机科学理论的皇冠。图灵奖颁给证明人,应该算是图灵奖的荣幸。

NPC

NPC问题是在探索 P = N P P=NP 问题过程中发现的一类问题。我们发现所有的NP问题可以在多项式时间内归约于NPC问题。目前,所有的NPC问题没有找到多项式的解,如果找到了,则证明了 P = N P P=NP

注意,这里有个容易混淆的地方,虽然所有的NP问题都可以归约于NPC问题,而NPC问题目前无多项式的解,但并不意味的所有的NP问题都没有多项式的解。逻辑是这样的, O ( N P ) < = O ( N P C ) O(NP)<=O(NPC) 而不是 O ( N P ) = O ( N P C ) O(NP)=O(NPC) 。即,某些NP问题在归约的过程中变得更加复杂,如P类问题。

NPH

NPC问题满足两个条件:

  • 它是一个NP问题
  • 所有的NP问题都可以约化到它

NPH问题只满足上面中的一个条件:

扫描二维码关注公众号,回复: 5299473 查看本文章
  • 所有的NP问题都可以约化到它

因此,NPH问题不一定是NP问题,所以它的范围比NPC要广。

猜你喜欢

转载自blog.csdn.net/jason_cuijiahui/article/details/87900848