AI數學基礎之:P、NP、NPC問題

簡介

咱們在作組合優化的時候須要去解決各類問題,根據問題的複雜度不一樣能夠分爲P、NP、NPC問題等。今天給你們來介紹一下這些問題類型。程序員

P問題

在計算複雜度理論中,P(也稱爲PTIME或DTIME)是基本的複雜度類型。 它是指可以使用肯定圖靈機在多項式時間內解決的全部決策問題。算法

這裏咱們給一下P的定義,若是一個公式語言L是一個P類型,那麼當且僅當存在這樣的一個肯定圖靈機M時成立:優化

  1. 對於全部的輸入,M都會在多項式時間內運行
  2. 對於L中全部的x, M的輸出都是1
  3. 對於不在L中的全部x,M輸出都是0

常見的P問題包括線性規劃的決策版本,計算最大公因數和找到最大匹配。 在2002年,證實了肯定數字是否爲質數的問題也是一個P問題。spa

NP問題

在計算複雜度理論中,NP(nondeterministic polynomial time)不肯定性多項式時間主要用來衡量分類決策問題的複雜度。 NP是一組決策問題,對於這些問題實例來講,若是答案爲「是」,那麼表示該實例使用肯定圖靈機可在多項式時間內驗證成功。code

NP其實是由兩個階段組成的,第一階段包括對解決方案的猜想,該階段以非肯定性方式生成,而第二階段包括肯定性算法,驗證猜想是否能夠解決問題。也就是說NP= nondeterministic + polynomial。教程

根據P和NP的定義,咱們能夠發現全部的P問題都是NP問題,由於P的定義是全部問題均可以在多項式時間內肯定地解決,而NP的定義是問題能夠在多項式時間內獲得驗證的問題。rem

可是NP包含了更多的問題,其中NP中最難的問題被稱爲NP-complete 問題。解決多項式時間中的此類問題的算法也可以解決多項式時間中的任何其餘NP問題。get

NP問題的例子

在計算機科學中,不少搜索優化的問題均可以被看作是NP問題。旅行商問題就是一個典型的NP問題。it

「給出一個城市列表以及每對城市之間的距離,要找到一條訪問每一個城市一次最後返回原城市的最短路徑」 這是組合優化中的一個NP難題,在理論計算機科學和運籌學中很重要。class

有些NP問題很難解決

由於NP問題中包含了不少實際生活中很是重要的問題,因此人們爲查找NP中的多項式時間算法付出了巨大的努力。可是,NP中仍然存在許多問題,這些問題好像沒法在多項式時間內獲得解決。關於這些問題在多項式時間內是否可以被解決是計算機科學中最大的未解決問題之一。

在這種狀況下,引入了一個重要的概念就是NP徹底決策問題集(NP-complete),它是NP的子集,能夠非正式地描述爲NP中「最難」的問題。若是咱們說一個問題被證實是NPC問題,那麼意味着在這個問題上沒法找到多項式時間算法。

可是,在實際應用中,一般不會花費大量的計算去尋找一個最優解,可是能夠在多項式時間內找到一個次優解,這對於實際應用就已經足夠了。

NPC問題

在計算複雜度理論中,知足如下狀況的問題是NPC問題:

  1. 一個不肯定的圖靈機能夠在多項式時間內求解。
  2. 肯定性的Turing機能夠在較大的時間複雜度中進行求解(EXPTIME或者暴力搜索算法),而且能夠在多項式時間內驗證其解。
  3. 它能夠用來模擬任何其餘具備類似可解性的問題(NP中的其餘問題均可以在多項式時間內轉換或者規約爲該問題)。

根據規則3,由於NPC問題是NP問題的更加複雜的形式,若是你能夠找到一個解決某個 NP-complete 問題的多項式算法,那麼全部的 NP 問題都將能夠很容易地解決。

舉個例子,一個一元一次方程能夠規約爲求一個一元二次方程,只須要將二次型係數變爲0便可。經過不斷地規約,咱們能獲得複雜度更高可是應用範圍更廣的算法來代替複雜度雖低可是應用範圍小的一類問題的算法。

儘管能夠「快速」驗證NPC問題的解決方案,可是沒有已知的方法能夠快速找到解決方案。即,隨着問題的大小增加,使用任何當前已知的算法解決問題所需的時間迅速增長。

仍未發現用於計算NP徹底問題的解決方案的方法,可是計算機科學家和程序員仍然常常遇到NP徹底問題。 NP徹底問題一般經過使用啓發式方法和近似算法來解決。

NP-hard

在計算複雜性理論中,NP-hard是對一類問題的描述,這些問題「至少與NP中最難的問題同樣難」。 NP-hard問題的一個簡單例子是子集和問題。

若是一個已知的NPC問題可以規約到此問題,那麼這個問題就叫作NP-hard問題。

因此NPC問題必定是NP-Hard問題,但並非全部的NP-Hard問題都是NPC問題。

P和NP問題

P和NP問題是計算機科學中還沒有解決的主要問題。它談論的是若是一個問題能夠快速的被驗證,那麼該問題是否能夠被快速解決?

P是指該問題可以在多項式時間內找到解決方案,而NP是指若是找到候選的答案,則可以進行快速驗證。

通常狀況下你們都任務P != NP,也就是說雖然沒法在多項式時間內解決,但答案能夠在多項式時間內驗證。

根據P和NP是否相同,咱們分別做出P、NP、NPC和NP-Hard的關係圖。

本文已收錄於 http://www.flydean.com/04-p-np-npc-problem/

最通俗的解讀,最深入的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

歡迎關注個人公衆號:「程序那些事」,懂技術,更懂你!

相關文章
相關標籤/搜索