P和NP及NPC的问题

P和NP及NPC的问题

一、介绍

P和NP以及NPC是个什么东西?有什么用。这个如果没有接触到一些具体的应用场景可能还真不了解。不过,这不代表着你没接触到过类似的实际问题。在科幻小说《三体》里就有一个P=NP问题证明的问题。如果看过三体,可能有印象。而在实际生活中,大家可能接触过一些类似于货郎担的问题,它实质上就是一个NP问题。而NPC问题,估计好多人都遇到过地图的着色问题,这个其实就是NPC问题。
既然知道了这三个问题,那么它们到底是什么呢?应用范围是哪些?

二、P问题

P问题的定义:A是问题T的一个算法,如果在处理T的实例时,在算法的整个执行过程中,每一步只有一个确定的选择,就是说算法A是确定性算法,算法执行的每一步,都有确定的选择,重新使用同一输入实例运行该算法,得到的结果严格一致。
说得比较通俗一点:如果一个问题可以找到在一个能在多项式的时间里解决它的问题的算法,那个这个问题就属于P问题。说得再简单一点,就是多项式有解。
啥是多项式?ax^n + bx^(n-1)+c,明白了吧,数学之美就在这儿,多么复杂的问题,都可以归结到一个简单的式子。但是简单归简单,能找到又能证明,就得靠数学家们了,特别是数学的天才(比如数学天才小王子高斯)。
那问题又来了,这玩意儿有用呗?搞个这个能顶饭吃。嗯,还真能顶饭吃。比如在计算机领域,处理一些问题的时候儿,基本就是对空间和时间复杂度的控制。这些复杂度展开其实就是一个多项式,如果能够设计一个次数低的多项式,就意味着空间或者时间复杂度的大幅降低,这是啥,是钱啊。内存和硬盘还有CPU都是钱啊。

三、NP(Non-deterministic Polynomial)问题

一定要注意,NP问题不是非P问题。千万不要被N误导。先来看一下它的定义:如果对某个判定问题T,存在着一个非负整数K,对输入规模为N的实例,能够以O(n^k)的时间运行一个非确定性的算法,得到正确或者不正确的答案,则该判定问题T是一个NP类型判定问题。
说得直白一些,就是存在一种确定性的算法,可以以多项式时间来检查和验证在推测产生的答案是否正确。
比如上面的货郎担问题,也就是旅行家推销问题(TSP),数学枚举的解法有(n-1)!种,这个可不是多项式的解法了。但是在实践过程中,好多人都是凭经验,走出一条路来。这个路小于要求的一个值。
这就回到了一个巨牛的数学证明,P=NP。好吧,数学的天才们,靠你们了。不过这个虽然没有被证明,但是大家都倾向于P!=NP。这个证明的排名好像是最高,比大家熟知的啥猜想啥的,都高。

四、NPC(Non-deterministic Polynomial complete)问题

要想说明NPC问题,就得首先解决一个术语:约化(Reducibility)。什么是约化(规约)?令T和T1是两个判定问题,如果存在一个具有如下性能的确定性算法A,可以用多项式的时间把T1的实例转换为T的实例,使得T1的实例答案正确当且令仅当T的实例答案正确。就说是T1以多项式时间约化(规约)于T。
说得比较通俗一些就是:问题T的解法可以用问题T1的解法来解决。网上有一个例子举得好,求解一元一次方程和一元二次方程,可以说前者可以约化为后者。也就是说,如果会解一元二次方程,就会解一元一次方程。
还有一个比较熟悉的是汉密尔顿回路问题,可以约化为TSP问题中存在长为0的回路。
NPC问题是NP问题的一个子集。
多说一个,NPH问题:即NP难问题,其不是一个NP问题,然后所有的NPC问题都可以在多项式时间内转化为其的话,我们就叫其NPH(hard)问题。

五、总结

其实有感于这个问题,是因为在做零知识证明中,其实应用到的也是一个NP问题。前面说过了,数学家们证明了,所有的NP问题都有零知识证明的算法。既然用到了,搞一搞也是应该的。
当然,在AI中也会用到这东西。数学真是令人着迷,可惜,我已经失之交臂,只能在远方欣赏她的佚丽容颜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值