[洛穀日報第58期]初賽備考乾貨:P、NP、NP-hard、NPC問題

2021-01-08 洛谷科技

前言

P/NP/NPC問題在2012年左右曾經火了一陣,如果你做過2012年和2013年的提高組真題的話,你會發現,那兩年每年都有一道這種問題的多選題。(不過之後就涼涼了),所以這類問題還是有必要了解一下的。 反正重要的知識點就這麼幾句話,我都劃重點了,其他都是瞎扯可以無視的啦QAQ(這句不是重點啊)

零、預備內容:時間複雜度

時間複雜度分為兩種:多項式級複雜度和非多項式級複雜度 其中多項式級複雜度是指規模 n 在底數位置上的或者常數級的複雜度 比如說 O(1) 、 O(n) 、 O(nlogn) 或者 O(n^2) 等等 而非多項式級複雜度則是規模 n 在指數位置上的複雜度 比如說 O(2^n) 或者 O(n!)

這麼區分的原因是因為這兩種複雜度是天差地別的,後者遠大於前者。 舉個例子:當 n=10 的時候

一、P問題的引入

自從發現了這兩種複雜度之後,有些人就開始想了:「多項式複雜度好棒棒啊!如果所有問題都有多項式複雜度的解法就好了啊!」 這個時候,圖靈跳了出來,丟了一個停機問題,人們吃驚地發現,這個問題甚至沒有正確的解決方法,於是上面的flag就這樣子GG了。 所以又有人來說了:「那能解的問題是不是一定有多項式解法呢?」 於是又來了一個問題:請解決3-SAT問題。 然後不用想了,又GG了。 這個時候臉被打得生疼的科學家們發現,他們有必要劃分一下這些問題,以免再被打臉,因此他們就提出了P問題(Polynomial problem)(P是多項式的簡寫)

定義P問題為存在多項式複雜度算法的問題。

二、NP問題的引入

有了P問題,科學家想了想,那我們就搞個不是P問題的專有名詞,專指找不到多項式複雜度的問題(非P問題)不就行了嗎? 然後他們就提出了NP問題,全劇終 (霧嗯,事情沒有這麼簡單,如果你要向上面那樣想,你就可能要涼涼了。

NP問題不是非P問題

上面那種NP問題的定義會變得非常爆炸,因為你有時候並不能證明這個問題是不是一定沒有多項式解,也就是說不確定現在這個不存在多項式複雜度的問題在未來也不存在多項式複雜度解法,顯然這些問題你既不能歸入P又不能歸入NP,所以你還要再定義一個別的東西來表示他們,反正這個定義GG了

回顧之前所說,我們一開始的希望是找到多項式複雜度的解法,接著才會去考慮劃分這些問題,所以我們的劃分理應去往這個方向靠。

那麼可以將NP問題定義為還不存在多項式複雜度解法的問題,用未解代替無解.(這體現了定義的科學性、準確性、嚴謹性、平實性、周密性)

以及我們的目標是找到NP問題的多項式解法,所以我們要使NP問題有可能能解,顯然要去掉所有能證明無多項式解的問題,如果一個問題的一個解的驗證都是非多項式級別的,這個問題就不可能做到多項式級複雜度,因為如果我們連它的一個條件都無法在多項式複雜度中證明,那麼就更別談在多項式複雜度中把他的所有條件都證明出來了。

終於可以給出NP問題(Non-deterministic Polynomial problem)的完全定義了(沒錯,這個N是不確定的意思)

一個問題的一個解可以用多項式級複雜度檢驗,它就是NP問題

所以有一點值得注意的

找不到多項式複雜度解的(非P問題)不一定是NP問題

因為有些無法在多項式複雜度中檢驗一個解的問題存在。

同時,這裡可以很明顯的發現,如果一個問題是P問題,那麼他肯定能在多項式時間複雜度內檢驗任意一組解。於是又可以推出

P∈NP

但是P=NP嗎?這是一個世紀難題,反正了解一下有這個問題就行了,初賽不會讓你證明的,放心好了。

三、NP-hard和NPC問題的引入

雖然說不用讓你去證明P=NP這種鬼畜的東西,但是科學家不斷嘗試證明的這段歷史是沒準會考的。(畢竟這是一種自強不息的求索精神,很符合二十四字核心價值觀)

在此之前我們先引入歸約的定義

歸約指的是將A問題進行歸約後可以用B問題的解決方法解決,也就是把A問題變成B問題解決

NPhard問題是指

如果有一個問題可以使所有NP問題在多項式複雜度內歸約到它,那麼它就是NP-hard問題

顯然如果難度有一個上界的話,解決所有的NP問題歸約起來的問題難度肯定就是那個上界,所以這類問題被稱為NP-hard。

如果你有了解過停機問題的話,會知道這個問題是不可判的,但是如果把問題理解成輸入一個東西到某個程序裡,判斷他是否會停機,就可以把所有NP問題歸約到停機問題上來,所以停機問題是NP-hard,於是

NP-hard問題不一定是NP問題

既然不一定是NP問題那麼對我們解決P=NP就沒啥用了。 所以科學家又提出了NPC問題:

一個NP問題可以使所有NP問題在多項式複雜度內歸約到它,那麼它就是NPC問題

也就是說如果解決了NPC問題就可以解決所有的NP問題,然後就可以證明P=NP。

常見的NPC問題有3-SAT問題,旅行商問題等等。 這些的證明有興趣大家可以研究一下。最後祭上這張圖來總結上面知識點之間的聯繫

接著我們來切幾道真題。

四、歷年真題

2012.20.以下關於計算複雜度的說法中,正確的有( )。 A.如果一個問題不存在多項式時間的算法,那它一定是NP類問題 B.如果一個問題不存在多項式時間的算法,那它一定不是P類問題 C.如果一個問題不存在多項式空間的算法,那它一定是NP類問題 D.如果一個問題不存在多項式空間的算法,那它一定不是P類問題

解析: A 還記得圖靈停機問題嗎?那是一個NP-hard而不是NP問題 B 這是對的,因為P問題的定義是存在多項式時間的複雜度算法 C、D 時間複雜度和空間複雜度都是複雜度,是等價的。

所以選BD

2013.14. ( )屬於 NP 類問題。 A. 存在一個 P 類問題 B. 任何一個 P 類問題 C. 任何一個不屬於 P 類的問題 D. 任何一個在(輸入規模的)指數時間內能夠解決的問題

解析:這裡考察的知識點是NP問題的定義以及P∈NP 由之前可知任何P問題都是NP問題,同理一定存在一個P問題是NP問題AB都是對的C的話我們可以繼續用萬能的停機問題去反駁他 D考察的是定義,指數時間內能解決不意味著多項式時間能驗證解,所以D是錯的

所以選AB

那就這樣子了,希望對大家有所幫助。

本文發布於洛穀日報,特約作者:Styx

原文地址:https://www.luogu.org/blog/styx-ferryman/chu-sai-bei-kao-gan-huo-p-wen-ti-np-wen-ti-npc-wen-ti-sha-sha-fen-fou

相關焦點

  • 什麼是 P = NP 問題?
    設為「置頂或星標」,第一時間送達乾貨
  • [洛穀日報第70期]NOIP2018初賽解析
    3.今年是第35屆NOI,因此第一屆NOI是1984年。每次都有這種沒啥實際意義的題目。4.考慮一個等比數列求和。=T_0+(1+2+3+…+n)=\frac{n*(n+1)}{2} 這題是2015年提高組初賽原題,如果有在洛谷有題上寫過這個題應該不會寫錯。6.建出表達式樹,然後先序遍歷即可。
  • [洛穀日報第79期]二進位與位運算
    簡單來說,二進位基數為 2 ,只有 1 和 0二進位轉十進位對於一個二進位數,他的十進位數為從左往右的每一位乘上該位數的 2 次方(從第0位開始),例如 十進位轉二進位把上面的操作反過來,將十進位數除以 2 直到其為 0 ,每位的餘數即二進位的每一位。
  • [洛穀日報第53期]淺談一些求近似值的方法
    沒有問題,會用就行NOIP不考QwQ求零點、不動點、函數近似值、極值、最值……基本可以認為是一類問題,所以本文以討論如何** 求零點的近似值為主**因為筆者太弱所以沒有遺傳算法、模擬退火之類的玄學算法筆者是∑狂魔,要是有式子不理解請展開QwQ對於低於5次的多項式方程,我們有通用的公式解法求零點的精確值對於一些特殊高次多項式方程(例如可以因式分解的或者滿足一些特定形式的方程
  • lz-np-un6是什麼意思 lz-np-un6有何特殊含義或套路
    最近不少小夥伴們在微博上還有微信上都看見了lz-np-un6,不知道這個究竟是什麼意思,是什麼梗?因此不清楚的小夥伴們,就讓小編給大家詳細的講講吧。  lz-np-un6是什麼意思  其實小夥伴們只要倒過來就行了,出現的就是三個字,滾犢子,並沒有什麼特殊的含義,要是有人給你發這個,就趕緊罵他吧。
  • 最小二乘法(1)——線性問題
    1.3504 A = np.mat(np.array([[-y1, x1], [-y2, x2]]))5 b = np.mat(np.array([x1 * y1, x2 * y2])).T6 x = A.I * b7 print(x)  結果是 x≈58.77,y≈73.87。
  • 定量分析方法第04講:Scipy基礎
    2]p, res, rnk, s = lstsq(M, y)p_= plt.plot(x, y, 'o', label='data')xx = np.linspace(0, 9, 101)yy = p[0] + p[1]*xx**2_= plt.plot(xx, yy, label='least squares fit, $y = a + bx^2$
  • f值 mse p值 ssr 線性回歸 - CSDN
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25], "B":[0.9,1.1,4.8,3.2,7.8,2.7,1.6,12.5,1.0,2.6,0.3,4.0,0.8,3.5,10.2,3.0,0.2,0.4,1.0,6.8,11.6,1.6,1.2,7.2,3.2], "C":[67.3,111.3,173.0,80.8,199.7,16.2,107.4,185.4,96.1,72.8,64.2,132.2,58.6,174.6,263.5,79.3,14.8,73.5,24.7,139.4,368.2,95.7,109.6,196.2,102.2
  • 「強制愛」高嶺之花帝師vs各路豺狼虎豹,喪心病狂,np向爽文yo!
    大家好,好久不見,我是小鯨魚,歡迎來到純愛文的世界,哈哈哈~新鮮出爐的文章喲,快來看哦~【強制愛】高嶺之花帝師vs各路豺狼虎豹,喪心病狂,np向爽文yo!《平平無奇四師弟》簡介:我三個師兄皆是人中龍鳳,唯我一人,排行第四,平平無奇,是個龍套。
  • [公開課]《Python:從計算到算計》第04講: 科學計算(Scipy)
    2]p, res, rnk, s = lstsq(M, y)pplt.plot(x, y, 'o', label='data')xx = np.linspace(0, 9, 101)yy = p[0] + p[1]*xx**2plt.plot(xx, yy, label='least squares fit, $y = a + bx^2$')
  • 乾貨| 利用Python實現FMCW雷達的距離都卜勒估計
    通過利用一些第三方的庫比如numpy,scipy和matplotlab也可以進行同樣的科學計算。OK,廢話少說,速速回到正題。關於如何利用MATLAB對FMCW雷達的距離和都卜勒估計前不久有寫一篇,乾貨 | 利用MATLAB實現FMCW雷達的距離都卜勒估計下面我們就如何利用Python得到FMCW雷達的距離都卜勒估計進行介紹。
  • 比特幣論文中泊松分布期望公式問題|火星技術帖
    小編:記得關注哦來源:CSDN在比特幣創始論文的第11章中存在這樣一個問題,就是為什麼這個分布的期望為lamda=z*(q/p)?11. 計算設想如下場景:一個攻擊者試圖比誠實節點產生鏈條更快地製造替代性區塊鏈。
  • 給數據科學家直白解釋P值的含義
    最近,有人問我如何向外行人簡單地解釋 p 值。我發現這很難做到。即使對了解 p 值的人,解釋 p 值總是一個令人頭疼的問題,更不用說對不懂統計學的人了。我去維基百科找了一些東西,這是它的定義:在統計假設檢驗中,對於給定的統計模型,p 值或概率值是在原假設為真時,統計值(如兩組間的樣本均值差)與實際觀察結果相等或更大的概率。
  • 一文講解機器學習算法中的共線性問題
    當時,即當第i個變量和其他變量之間存在線性關係時,VIF趨於無窮大。所以 VIF 的大小反應了變量的共線性程度。一般地,當VIF大於5或10時,認為模型存在嚴重的共線性問題。同時考慮參數顯著性檢驗的 t 統計量:當存在共線性時,參數的標準差偏大,相應的 t 統計量 會偏小,這樣容易淘汰一些不應淘汰的解釋變量,使統計檢驗的結果失去可靠性。
  • thx,np,kk,lol,2b?老外在遊戲裡說的英語什麼意思?
    而下面的這些英語單詞,就跟這種方式差不多的:thx:thanks 謝謝ty: thank you謝謝你np: no problem沒問題yw: you are welcome不用謝k:ok好的kk: ok,相比k更加隨意ya: yeah是nah: no,相比no更加隨意wut