引自维基百科的P vs NP问题,关于算法的时间复杂性“......询问计算机能够快速验证其解决方案的每个问题是否也可以通过计算机快速解决。”
我希望有人可以澄清“验证问题”和“解决问题”之间的区别在哪里。
答案 0 :(得分:9)
我希望有人可以澄清“验证问题”和“解决问题”之间的区别在哪里。
“验证问题”,但“验证解决方案”。例如,您可以在多项式时间内检查给定集合是否对SAT有效。这样的集合的实际生成是NP难的。 Verifier-based definition in the Wikipedia article NP (complexity)部分可以帮到你一点点:
基于验证者的定义
为了解释 NP 的基于验证者的定义,让我们考虑子集和问题:假设我们给出了一些整数,例如{-7,-3,-2, 5,8},我们想知道其中一些整数是否总和为零。在这个例子中,答案是“是”,因为整数的子集{-3,-2,5}对应于和(-3)+( - 2)+ 5 = 0.决定是否这样的任务存在和零的子集称为子集和问题。
随着我们输入算法的整数数量变大,子集的数量呈指数增长,实际上子集和问题是 NP - 完成。但是,请注意,如果给定一个特定的子集(通常称为证书),我们可以通过仅对子集的整数求和来轻松检查或验证子集和是否为零。因此,如果总和确实为零,则该特定子集是答案为“是”的证据或见证。验证给定子集是否具有零的算法称为验证者。当且仅当存在针对在多项式时间内执行的问题的验证者时,才会在 NP 中出现问题。在子集和问题的情况下,验证者只需要多项式时间,因此子集和问题在 NP 。
如果你更关注图论,那么Hamilton cycle就是NP完全问题。检查给定解决方案是否是Hamilton循环(线性复杂度,遍历解决方案路径)是微不足道的,但是如果P!= NP,则不存在解决问题的多项式运行时算法。
在这种情况下,“快速”一词可能会产生误导。在这方面,算法很快,当且仅当它的最坏情况运行时受多项式函数限制时,例如O(n)
或O(n log n)
。长度为n
的给定范围的所有排列的创建不受限制,因为您有n!
个不同的排列。这意味着问题可以在 n 100 log n 中解决,这将花费很长时间,但这仍然被认为是快速的。另一方面,TSP的第一个算法之一是O(n!),另一个是O(n 2 2 n )。与多项式函数相比,这些东西真的非常快速地增长。
答案 1 :(得分:0)
RSA加密使用以下素数:将两个大素数P和Q(每个200-400位)相乘以形成公钥N. N=P*Q
为了打破加密,需要找出给定N的P和Q.
虽然找到P和Q是非常困难的并且可能需要数年时间,但验证解决方案只是将P乘以Q并与N进行比较。
因此,解决问题非常困难,而无需验证解决方案。
P.S。该示例仅是针对此问题简化的RSA的一部分。真正的RSA要复杂得多。