关于P和NP问题的解读

关于P和NP问题的解读

 

在讲P类问题之前先介绍两个个概念:多项式,时间复杂度。(知道这两概念的可以自动跳过这部分)

1、多项式:axn-bxn-1+c

恩....就是长这个样子的,叫x最高次为n的多项式....

咳咳,别嫌我啰嗦。。有些人说不定还真忘了啥是多项式了。。例如第一次看到的鄙人→_→

2、时间复杂度

我们知道在计算机算法求解问题当中,经常用时间复杂度和空间复杂度来表示一个算法的运行效率。空间复杂度表示一个算法在计算过程当中要占用的内存空间大小,这里暂不讨论。时间复杂度则表示这个算法运行得到想要的解所需的计算工作量,他探讨的是当输入值接近无穷时,算法所需工作量的变化快慢程度。

举个例子:冒泡排序。

在计算机当中,排序问题是最基础的,将输入按照大小或其他规则排好序,有利于后期运用数据进行其他运算。冒泡排序就是其中的一种排序算法。假设手上现在有n个无序的数,利用冒泡排序对其进行排序,

①首先比较第1个数和第2个数,如果后者>前者,就对调他们的位置,否则不变

②接着比较第2个数和第3个数,如果后者>前者,就对调他们的位置,否则不变

③一直向下比较直到第n-1和第n个数比较完,第一轮结束。(这时候最大的数移动到了第n个数的位置)

④重复前三步,但是只比较到第n-1个数(将第二大的数移动到第n-1个数位置)

⑤持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

举个实例:5,4,3,2,1,对其进行排序,先是比较5跟4变成4,5,3,2,1,第一轮结束后变成43215,可以计算,当对其排序完正好要经过4+3+2+1=10次比较,当然这是最复杂的情况,即完全反序。可以知道对于n个数,至多要经过1+2+...+n-1即(n^2-n)/2次比较才能排好序。这个式子里n的最高次阶是2,可知道当n→∞时,一次性对其比较次数影响很小,所以我们把这个算法的时间复杂度比作:o(n^2)。取其最高次,可以看出,这是一个时间复杂度为多项式的表示方式。

时间复杂度排序o(1)<o(n)<o(lgn)<o(n^2)<o(n^a)<o(e^n)(a>2,n表示输入的数据个数,o(1)为常数级别)

好了,介绍完上面的概念就可以开始讲关于什么叫P类问题了。以上个例子冒泡排序为例,我们知道了,在排序这个大问题里,是可以找到一种时间复杂度为多项式o(n^2)的算法(如冒泡排序法)来求解排序问题的,所以我们说排序问题是一个有多项式时间算法的问题。

所以我们称,

P类问题:存在多项式时间算法的问题。(P:polynominal,多项式)

然后扯个题外话,为什么我们要研究这个?因为计算机处理的输入常常不是那么几十个几千个那么一点点,想象一下,当计算机处理的数据达到100万个的时候,时间复杂度为o(n^2)和o(e^n)的算法,所需的运行次数简直是天壤之别,o(e^n)指数级的可能运行好几天都没法完成任务,所以我们才要研究一个问题是否存在多项式时间算法。而我们也只在乎一个问题是否存在多项式算法,因为一个时间复杂度比多项式算法还要复杂的算法研究起来是没有任何实际意义的。

好了,接下来我们介绍NP,先给定义,

NP类问题:能在多项式时间内验证得出一个正确解的问题。(NP:Nondeterministic polynominal,非确定性多项式)

P类问题是NP问题的子集,因为存在多项式时间解法的问题,总能在多项式时间内验证他。

注意定义,这里是验证。NP类问题,我用个人的俗话理解就是,不知道这个问题是不是存在多项式时间内的算法,所以叫non-deterministic非确定性,但是我们可以在多项式时间内验证并得出这个问题的一个正确解。举个例子,

著名的NP类问题:旅行家推销问题(TSP)。即有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的环路,这个环路路径小于a。我们知道这个问题如果单纯的用枚举法来列举的话会有(n-1)! 种,已经不是多项式时间的算法了,(注:阶乘算法比多项式的复杂)。那怎么办呢?我们可以用猜的,假设我人品好,猜几次就猜中了一条小于长度a的路径,我画画画画,好的,我得到了一条路径小于a的环路,问题解决了,皆大欢喜。可是,我不可能每次都猜的那么准,也许我要猜完所有种呢?所以我们说,这是一个NP类问题。也就是,我们能在多项式的时间内验证并得出问题的正确解,可是我们却不知道该问题是否存在一个多项式时间的算法,每次都能解决他(注意,这里是不知道,不是不存在)。

所以这就引出了这类讨论的一个千年问题:是否 NP类问题=P类问题?

即,是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题呢?

太让人震惊了,要是解决了这个问题,那岂不是所有的NP问题都可以通过计算机来解决?

圣战的结果是,有的存在,有的不存在。=_=

在这场圣战中,人们还发现了很多的东东,也就是我们接下来要介绍的NPC问题(啊喂,我不是游戏NPC)和NPH问题。

(PS :网络上经常有人说,这不是个NP问题吗,其实很多时候他们说的应该是NPC问题,而不是NP问题)

为了证明这个千古难题,科学家想出了很多办法。其中之一就是问题的约化。所谓问题约化就是,可以用问题B的算法来解决A ,我们就说问题A可以约化成问题B。举个例子,一元一次方程的求解,跟二元一次方程的求解,我们知道,只要能求解二元一次方程,那就可以用二元一次方程的解法来求解一元一次方程,只需要将一元一次方程加上y,并附加一个方程y=0就可以将一元一次方程变形为一个二元一次方程,然后用二元一次方程的解法来求解这个方程。注意,这里二元一次方程的解法会比一元一次的复杂。所以我们说,只需要找到解二元一次方程的规则性解法,那就能用这个规则性解法来求解一元一次方程。从这里也可以看出,约化是具有传递性的,如A约化到B,B约化到C,A就可以约化到C,同时不断约化下去,我们会发现一个很惊人的特性,就是他一定会存在一个最大的问题,而我们只需要解决了这个问题,那其下的所有问题也就解决啦!这就是我们所说的NPC问题的概念!!!

引到NP问题里就是,对于同一类的所有的NP类问题,若他们都可以在多项式时间内约化成最难的一个NP类问题,(我们直观的认为,被约化成的问题应具有比前一个问题更复杂的时间复杂度)当我们针对这个时间复杂度最高的超级NP问题要是能找到他的多项式时间算法的话,那就等于变向的证明了其下的所有问题都是存在多项式算法的,即NP=P!!!!给出NPC问题定义。

(3)NPC类问题(Nondeterminism Polynomial complete):存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。其定义要满足2个条件: 

首先,它得是一个NP问题;

然后,所有的NP问题都可以约化到它。

要证明npc问题的思路就是: 

先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它。

(4)NP难问题(NP-hard问题):

    NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是他不一定是一个NP问题。

    NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

以上四个问题他们之间的关系可以用下图来表示: 

这里写图片描述
<think>嗯,用户现在在询问如何在ARIMA模型中确定pq参数的最佳方法。首先,我需要回顾之前对话的历史。用户之前提到过参考站内引用,但指出这些引用仅供参考,并非真实需求,应该多参考上一次的问题回答。不过,在这个新对话中,用户之前的问题是关于ARIMA模型的pq值确定,而我的回答似乎已经给出了详细的步骤,包括ACF、PACF图的使用,信息准则如AIC、BIC,网格搜索等。用户当前的查询是希望了解确定pq的最佳方法,可能是在之前回答的基础上需要更深入的信息,或者有具体的疑问。用户可能在实际操作中遇到了困难,比如如何解读ACF/PACF图,或者如何使用AIC/BIC选择参数。此外,用户没有提到d参数,可能在之前的回答中已经覆盖,这里主要关注pq。考虑到ARIMA模型参数选择的复杂性,用户可能期望更详细的步骤,或者常见问题的解决方案。例如,用户可能在模型拟合过程中遇到过参数选择导致的过拟合或欠拟合问题。需要确保回答涵盖实际应用中可能遇到的问题,比如ACF/PACF截尾的判断,信息准则的权衡,计算资源的限制等。另外,用户提到参考站内引用,但在当前对话中没有具体的引用内容,所以可能不需要处理引用问题。重点应放在方法论上,如使用自相关图偏自相关图的细节,如何通过AIC最小化选择模型,网格搜索的实现方式等。需要保持结构清晰,分步骤说明,并可能提供例子或注意事项,帮助用户避免常见错误。还要注意用户可能的身份,可能是学生、数据分析师或研究人员,对统计知识有一定基础但需要实用指导。因此,回答要兼顾理论实践,比如推荐Python中的statsmodels库的操作步骤。同时,考虑到用户希望尽可能多的参考上一次的问题回答,可能需要重复之前提到的关键点,但避免冗余,而是补充更深入的内容或常见陷阱。最后,生成的相关问题需要贴近实际应用场景,比如模型诊断、季节性处理、调参工具等,这些能帮助用户扩展理解,解决后续可能遇到的问题。</think> 在ARIMA模型中确定最优的$p$(自回归阶数)$q$(移动平均阶数)需要结合统计诊断数值优化技术。以下是逐步操作流程: ### 一、核心方法(结合使用更可靠) 1. **自相关图(ACF)偏自相关图(PACF)** - $q$值:ACF图中**滞后$k$阶后截尾**的位置(例如$q=2$) - $p$值:PACF图中**滞后$k$阶后截尾**的位置(例如$p=1$) $$( \text{ACF}(k) \approx 0 \quad \forall k>q ), \quad ( \text{PACF}(k) \approx 0 \quad \forall k>p )$$ 📌 *注意:仅适用于ARIMA(p,d,0)或ARIMA(0,d,q)等简单模型* 2. **信息准则最小化** 遍历不同$p,q$组合,选择**AIC/BIC值最小**的模型: $$ \text{AIC} = 2k - 2\ln(L), \quad \text{BIC} = k\ln(n) - 2\ln(L) $$ *其中$k=p+q$为参数总数,$L$是似然函数值,$n$是样本量* 3. **网格搜索(Grid Search)** ```python from statsmodels.tsa.arima.model import ARIMA import numpy as np best_aic = np.inf for p in range(0,5): # 搜索p:0~4 for q in range(0,5): # 搜索q:0~4 model = ARIMA(data, order=(p,1,q)) # d值需预先确定 results = model.fit() if results.aic < best_aic: best_aic = results.aic best_order = (p,1,q) print(f"最优参数(p,d,q): {best_order}") ``` ### 二、关键注意事项 1. **$d$值需预先确定** - 通过ADF检验确认差分阶数$d$(使序列平稳的最小差分次数) - 非平稳数据直接优化$p,q$会导致模型失效[^1] 2. **避免过拟合** - PACF/ACF中**拖尾**现象(缓慢衰减)需结合信息准则判断 - 遵循**简约原则**:优先选择$p+q$更小的组合(AIC相近时选BIC更小的) 3. **诊断检验** 最优模型需通过: - **残差自相关检验**(Ljung-Box检验p值>0.05) - **残差正态性检验**(QQ图/Jarque-Bera检验) ### 三、推荐工具 ```text Python:statsmodels.tsa.arima.model.ARIMA(自动AIC优化) R语言:forecast::auto.arima()(内置智能搜索) ``` ### 四、实例解析 某销售量数据最优$p,q$搜索结果: | p | q | AIC | BIC | |---|----|----------|---------| | 0 | 1 | 352.1 | **358.3** | | 1 | 1 | **350.2** | 359.6 | | 2 | 1 | 351.8 | 364.1 | 👉 虽$p=1,q=1$的AIC最小,但$p=0,q=1$的BIC更小且参数更少,最终选择ARIMA(0,1,1) [^1]: Box-Jenkins方法论强调参数需满足可逆性平稳条件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值