NP问题

作者:raving.lunatic
链接:https://www.zhihu.com/question/27039635/answer/133886448
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

大致整理过对几种问题的理解
  • 你需要了解的几个概念(若了解这些概念可以跳过本节):
    • 首先,你需要知道什么是图灵机模型(Turing Machine - TM): 为了理解的便利,TM可以看作是在计算机“读/写”0或1时直接进行工作的部件,实际上它是一个抽象的理想计算模型。在计算的每一时刻,它都处于一个可以用表达式描述的状态,这个表达式里包括了TM当前的状态,读写头目前所读的数,读写头即将在目前位置写入的数,以及未来读写头的去向(转移方案)等信息。
    • 其次,你需要理解Deterministic TM与Nondeterministic TM的区别: 根据当前状态和读写头所读的符号,前者只存在一种状态转移方案。而后者存在多种状态转移方案,机器将选择其中一种方案继续运作,直到最后停机为止。
    • 除此之外,所谓A问题规约为B问题是指,B问题是A问题的泛化情况,B问题的解决方法相对于A问题更具有普适性,即B问题的解决方案同样可以用于解决A问题。
    • 最后,你需要明白可以用多项式时间复杂度(polynomial time)的算法去解决的问题才是我们通常认为的容易解决的问题。
  • P问题:可于Deterministic Turing Machine中以多项式时间复杂度的算法解决,则称P问题
    • 理解:可在多项式时间里解决的问题。
  • NP问题:Nondeterministic Turing Machine中可用多项式时间复杂度的算法解决,则称NP问题
    • 理解:可在多项式里猜出(验证)一个解的问题。
    • 显然P问题一定是NP问题,因为任何一个在多项式时间内可以解决的问题一定可以在多项式时间内验证一个解。(思考Hamilton回路问题,如果我已经找出了一个解,那么我一定能在多项式时间内去验证它是一个有效的解)。
  • NPC问题: 存在一个NP问题,使得所有的该类NP问题都可以多项式时间地规约(Polynomial-time Reducibility) 为NPC问题。根据规约的传递性,对NP问题进行一层接一层地规约,最终可以得到一个足够泛化的NP问题,即NPC问题。
    • NPC问题本身一定是一个NP问题。
    • 如果一个NPC问题可用多项式时间复杂度的算法去解决,则所有的此类NP问题都可以用这一算法解决。当然,这一算法拥有比所有解决该类NP问题的算法都要高的时间复杂度。
    • 如Hamilton回路问题 (但更多见于逻辑电路问题)。
  • NP-Hard问题: 满足NPC问题定义中的由NP通过规约的条件,但是它本身未必是一个NP问题

posted on 2018-03-19 10:42  WegZumHimmel  阅读(213)  评论(0编辑  收藏  举报

导航