NP问题的通俗解释

文章介绍了图灵机的概念,包括确定性和非确定性图灵机,以及它们在计算复杂度理论中的应用。NP问题指的是不能用确定性图灵机线性判别的问题,而P类问题则是能在多项式时间内解决的问题。文章探讨了物理装置与图灵机的关系,以及非确定性图灵机在解决存在性问题时的优势。

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

本博客参考:

  • https://zhuanlan.zhihu.com/p/348250098
  • https://zhuanlan.zhihu.com/p/348020672
  • https://zhuanlan.zhihu.com/p/260512272
  • 以及相关的1-6。

是什么

NP的全称是Non Deteministic Polynomial,是线性所不能判别的问题的集合。

NP这个东西是从哪里来的呢?

起源

NP的提出,是基于图灵机模型的。

什么是图灵机?

图灵机有k条带子,左端有限,右端要多长可以有多长(潜在无限长)。每条带子都按顺序划分了格子,一个格子可以记录一个符号。符号的有限集我们称之为字母表(alphabet) . 每条带子上有一个带头(tape head),可以读取或更改一个格子里的内容。带头可以左右移动,我们规定图灵机的每个步骤中,带头只能向左一格、向右一格或不动。
在这里插入图片描述用最通俗的语言来解释,图灵机是运行在3条带子和寄存器上的符合规则的自动化的机器。

用图灵机解决问题

有了这个机器,怎样才算使用这个机器解决了问题呢?为了简洁,我们目前只限定“判别命题是否为真”这种判别类问题。

当对输入和问题,图灵机运算后,图灵机能停,并且输出判定结果,则称图灵机解决了此问题。

通俗理解,是对于一个命题,图灵机能够不死循环,并且输出判别结果是真是否,那么就说此问题被图灵机解决。

对图灵机的大胆猜测

强邱奇-图灵(CT)论题:任何物理上可实现的计算装置A,都可被图灵机以多项式代价模拟。

再换句话说,任何装置都可以别图灵机以多项式的代价模拟。

不过请注意,这是一个论题,不是结论,是一个猜想。
为了验证此猜想,其举例了三个装置,每一个装置都能用图灵机“代替”,三个装置分别是:1. 任意大的字母表;2.单带图灵机;3.双向图灵机。(感兴趣可以看原帖子,我们只需要理解,此猜想大胆认为任何装置都能被以线性代价图灵机模拟替代。)

图灵机的泛化

该泛化认为,任意一个装置/程序,都可以被看成一个“通用图灵机”,即输入-处理-输出。

以当前我们熟悉的东西举个例子,对于某一个单独的指令,一个主机可以被看成图灵机;一个手机可以被看成图灵机;以及一个程序,也可以被看成一个图灵机

对图灵机解决问题的复杂度

A reminder,“解决问题”的定义,是图灵机能够判断此命题是否为真。

结合C-T论题,我们把所有具有多项式时间算法的问题认为是同一类,也就是P (Polynomial)类。但凡在这类里面的问题,都被叫做在图灵机上有“高效算法”。

这其实也变相声明了图灵机的计算复杂度上限,是线性问题,也就是复杂度 O ( 1 ) 、 O ( n a ) 、 O ( l o g a ( n ) ) O(1)、O(n^a)、O(log_a(n)) O(1)O(na)O(loga(n)),其中 a a a是常数。

非确定性图灵机

刚刚我们所“熟悉”的图灵机,叫做确定性图灵机。还有一种,叫做非确定性图灵机。二者对比:
在这里插入图片描述
换一张:
在这里插入图片描述可以看到,左侧的情况下,对于计算的“搜索” 的效率,不如右侧的高。

这种非确定性的图灵机,通常用来解决存在性问题。NDTM的每一条计算路径试图构造一个存在性证明,若构造成功,在输出带上写1并停机,称该计算是成功的,该终止格局为接受格局;若构造失败,在输出带上写0并停机,称该计算是失败的,该终止格局为拒绝格局;永不终止的计算路径也视为失败的。

看到这里,目前所有的程序,都是左侧的图灵机的泛化,对于右侧的非确定性图灵机,还没有一个物理现实(不过好像量子计算机就是,但是还没实用)。在原帖中,对于非线性复杂度的问题,右侧的非确定性图灵机能够以线性复杂度解决。

所以出现了P类问题Polynomial,即能使用确定性图灵机有高效解决方法的问题;和NP问题Non deterministic Polynomial,不能用确定性图灵机线性判别的问题。

回到现在,网络上的帖子

看到很多视频或者回答说P问题就O()多少的问题,然后复杂度上到O多少,就是NP问题了。

确实说的也不能算错,就是这个NP出现的源头,其实算是说,有没有存在一个“高效算法”在当前这个问题上。

由于现在所有的程序都是确定性图灵机的泛化,所以对于非线性的复杂度问题是不存在“高效算法”的。现在大家也不说deterministic了,只说能否在合理时间下输出结果。这也算概念的引申吧!

### 贝叶斯优化的基本概念及原理 贝叶斯优化是一种用于寻找黑盒函数全局最优解的方法,尤其适用于评估成本较高的场景。其核心思想在于通过构建目标函数的概率模型来指导后续的采样点选择,从而尽可能减少不必要的计算开销。 #### 1. 核心组成部分 贝叶斯优化主要由以下几个部分组成: - **贝叶斯定理** 贝叶斯定理提供了更新先验分布的方式,使得我们可以利用已有数据不断调整对未知参数的认知[^1]。具体来说,在每次迭代过程中,贝叶斯优化会根据当前已知的信息动态调整候选区域的可能性分布。 - **高斯过程 (Gaussian Process)** 高斯过程被用来建模目标函数的行为模式。作为一种非参数化回归技术,它可以有效地捕捉输入变量与输出之间的复杂关系,并提供预测值及其不确定性估计。这种特性对于探索潜在的最佳位置至关重要。 - **平衡“开采”和“勘探”策略** 在实际应用中,我们需要决定是在表现较好的区域内继续挖掘 (“开采”) 还是对尚未充分研究的空间进行尝试 (“勘探”). 此种权衡通常借助获取函数(acquisition function) 来完成, 它衡量每一个可能的新样本点的价值并指引下一步行动方向. #### 2. 如何通俗易懂地理解贝叶斯优化? 假设你在一片陌生的土地上寻找埋藏最深的宝藏。你并不知道确切的位置在哪里,但是你可以做一些探测实验来获得关于某个地点是否有价值的信息。然而,每一次探测都需要花费时间和资源,所以你不希望随便乱试。这时就可以采用类似于贝叶斯优化的思想来进行高效搜索: - 初始阶段随机挑选几个地方做初步测试; - 结合这些结果建立一个近似描述整个地形特征的地图(即代理模型); - 使用这张地图帮助判断哪些新位置值得进一步考察; - 不断重复上述流程直到找到满意的答案或者达到预设的最大次数限制为止。 这种方法不仅考虑到了已经发现的好成果附近可能存在更多机会("开采"), 同时也会适当关注那些尚不清楚情况但理论上存在潜力较大的空白地带("勘探")。 #### 3. 示例代码展示简单的贝叶斯优化实现 下面是一个非常基础的例子演示如何运用Python中的`scikit-optimize`库执行单维连续空间内的最小化问题求解操作: ```python from skopt import gp_minimize import numpy as np def objective_function(x): return np.sin(5 * x[0]) * (1 - np.tanh((x[0]**2))) res_gp = gp_minimize(objective_function, [(-2.0, 2.0)], # 参数范围定义 n_calls=20, # 总共调用次数 random_state=0) print(f"Best parameter:{res_gp.x}") print(f"Lowest value of the objective function found: {res_gp.fun}") ``` 此脚本首先导入必要的模块,接着设定待处理的目标函数以及相应的约束条件;之后调用`gp_minimize()`函数自动完成一系列内部运算最终得出结论。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值