p问题、np问题、npc问题、np难问题的理解(纯属个人见解)

本文介绍了P、NP、NPC和NP难问题的概念,通过时间复杂度、约化和多项式时间验证解来阐述。预备知识包括时间复杂度和理发师悖论。P问题在多项式时间内找到解,NP问题可以验证解,NPC问题既是NP问题又是NP难问题,是NP问题的子集。停机问题作为经典的NP难问题,类似于理发师悖论,尚未找到多项式时间解法。理解NPC问题对于解决NP问题至关重要,若找到NPC问题的多项式时间解,意味着所有NP问题都可以在多项式时间内解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近因为要证明np问题,所以找了一系列概念去理解这4个问题。理解的时候看到好多人给出了不同的答案,我下面会借鉴别人的答案来总结出一份对于我自己来说,最容易理解这4个问题的说法。

预备知识了解:

这部分内容的参考链接

时间复杂度

表明问题规模扩大后,程序需要的时间长度增长得有多快。程序的时间复杂度一般可以分为两种级别:

(个人感想:这个对于程序员或者学数学或其他的来说不陌生,从程序的角度出发,就是一个程序运行所需要的时间和输入size存在的一个关于时间上的关系。)

- 多项式级的复杂度,如O(1),O(log(n))、O(n^a)等,

- 非多项式级的,如O(a^n)、O(n!)等。后者的复杂度计算机往往不能承受。

约化(Reducibility)

(个人感想:这个理解是我看过那么多概念觉得最能理解的,最简洁的。约化是这4个问题之间相互转换的关键)

简单的说,一个问题A可以约化为问题B的含义是,可以用问题B的解法解决问题A。(个人感觉也就是说,问题A是B的一种特殊情况。)标准化的定义是,如果能找到一个变化法则,对任意一个A程序的输入,都能按照这个法则变换成B程序的输入,使两程序的输出相同,那么我们说,问题A可以约化为问题B。

例如求解一元一次方程这个问题可以约化为求解一元二次方程,即可以令对应项系数不变,二次项的系数为0,将A的问题的输入参数带入到B问题的求解程序去求解。

另外,约化还具有传递性,A可以化约为B,B可以约化为C,那么A也可以约化为C。

多项式时间内找出这个解&多项式时间内验证这个解

(个人感想:这个概念也是很重要的,我觉得对于理解是不可忽视的一个概念)

比如说著名的背包问题Knapsack problem,你要在多项式的时间内找出这个解释很困难的,但是如果有人给了一个解给你,你来验证这个解(看一下每个背包是否可以装得下这个解分配的物品),这个是可以在有效时间内验证的,毕竟对于这个背包问题来说,它的验证十分简单。

p问题、np问题、npc问题、np难问题的概念:

stackoverflow上的回答?

quora上的回答

(个人感想:这个stackoverflow上面最高票的答案的说法是我觉得,没有能够比拟的,还有一个不错的是一个斯坦福的TA在quora上的回答,下面我会粘贴stackoverflow上最高票的这个答案,如果第一遍读了不能理解,那就读第二遍,直到读懂为止。)

P

P is a complexity class that represents the set of all decision problems that can be solved in polynomial time.

That is, given an instance of the problem, the answer yes or no can be decided in polynomial time.

Example

Given a connected graph G, can its vertices be coloured using two colours so t

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值