引用自维基百科,关于算法时间复杂度的P与NP问题,它“...询问了一个问题,即是否每个能够被计算机快速验证其解的问题也能够被计算机快速求解。”
我希望有人可以澄清这里“验证问题”和“解决问题”的区别。
引用自维基百科,关于算法时间复杂度的P与NP问题,它“...询问了一个问题,即是否每个能够被计算机快速验证其解的问题也能够被计算机快速求解。”
我希望有人可以澄清这里“验证问题”和“解决问题”的区别。
为了解释NP的基于验证器的定义,让我们考虑子集和问题:假设我们有一些整数,比如{-7,-3,-2,5,8},我们想知道是否有一些这些整数相加等于零。在这个例子中,答案是“是”,因为整数的子集{-3,-2,5}对应于和(-3) + (-2) + 5 = 0。决定是否存在这样一个和为零的子集的任务被称为子集和问题。
随着我们输入算法的整数数量变得越来越多,子集的数量呈指数级增长,实际上子集和问题是NP-完全的。然而,请注意,如果我们给出一个特定的子集(通常称为证书),我们可以轻松地检查或验证子集和是否为零,只需将子集的整数相加即可。因此,如果和确实为零,那个特定的子集就是答案为“是”的证明或证人。验证给定子集是否具有零和的算法称为验证器。如果一个问题存在一个在多项式时间内执行的验证器,则该问题被称为NP问题。在子集和问题的情况下,验证器仅需要多项式时间,因此子集和问题属于NP。
如果您更喜欢图论,Hamilton cycle是一个NP完全问题。检查给定解是否为汉密尔顿回路很容易(线性复杂度,遍历解路径),但如果P != NP,则不存在具有多项式运行时间的算法来解决该问题。O(n)
或O(n log n)
,算法才在这方面快速。对于给定长度为n
的范围内的所有排列的创建是没有限制的,因为您有n!
不同的排列。这意味着问题可以在n 100 log n中解决,这需要很长时间,但仍被认为是快速的。另一方面,TSP的第一个算法是O(n!),另一个算法是O(n2 2n)。与多项式函数相比,这些东西增长得非常快。N=P*Q
为了破解加密,需要找出给定N的P和Q。虽然找到P和Q非常困难,可能需要数年时间,但验证解决方案只需将P乘以Q并与N进行比较。因此,解决问题非常困难,而验证解决方案则不需要任何东西。