1. 程式人生 > >P、NP、NP完全問題

P、NP、NP完全問題

不存在 並不是 包含 定性 系列 返回 指數 給定 最終

如果一個算法的最差時間效率屬於O(p(n)),則該算法可以在多項式的時間內對問題進行求解,其中p(n)是輸入規模n的一個多項式函數。

可以在多項式時間內求解的問題是易解的。不能在多項式時間內求解的問題是難解的

判定問題是能夠回答是或否的問題,通常第一,只有判定問題才屬於P。

P類問題是一類能夠用確定性的算法,在多項式的時間內求解的判定問題,這種問題類型也稱為多項式類型。

為什麽要將P約束為判定問題?

1、不能在多項式時間內求解的問題會產生指數級的巨大輸出。

2、許多重要問題可以化簡為一系列更容易研究的判定問題。

並不是每一個判定問題都能夠在多項式的時間內求解,某些判定問題是不能用任何算法求解的,這種問題成為不可判定的問題。這是相對於用算法求解的可判定問題來說的。不可判定問題,我們稱它為停機問題:給定一段計算機程序和它的一個輸入,判斷對於該輸入是會終止,還是會無限的運行下去。

存在可以判定,但又難解的問題。也有許許多多的重要問題,我們竟沒有找到它的多項式類型算法,也無法證明這樣的算法不存在。比如哈密頓回路問題,旅行商問題,背包問題,劃分問題,裝箱問題,圖的著色問題,整數線性規劃問題。這些問題中有一些是判定問題,另一些不是判定問題,都可以轉化為等價的判定問題,這些問題的共同點是,他們都有著按這指數增長的候選項,其規模是輸入規模的函數,我們需要在這些候選項中尋找問題的最終結。其次,雖然在計算機上對問題的求解可能是困難的,但是在計算上判定一個待定解是否解決了該問題,就是簡單的,這種判定可以在多項式時間內完成。

一個不確定算法是一個兩階段過程,他把一個判定問題的實例l作為它的一個輸入,並進行下面的操作:

  非確定階段,生成一個任意串s,,把它當作給定實例的一個候選解。

  確定階段,確定算法把l和s都作為它的輸入,如果s的確是l的一個解,就輸出是,否則輸出否或者不停下來。

  當且僅當對於問題都每一個真實例,不確定算法都會在某次執行中返回是的時候,我們說它能夠求解這個判定問題。

  如果一個不確定算法在驗證階段的時間效率是多項式級的,我們說它是不確定多項式的類型。

NP類問題是一類可以用不確定多項式算法求解的判定問題,這種問題類型稱為不確定多項式類型。

大多數判定問題都屬於NP問題。NP問題也包含哈密頓回路問題,旅行商問題,背包問題,劃分問題,裝箱問題,圖的著色問題,整數線性規劃問題。停機問題則屬於為數很少,一句不屬於NP問題的判定問題。

一個NP完全問題是NP中的一個問題,他和該類型中任何其他問題的難度都是一樣的,NP中的任何其他問題都能夠在多項式的時間內化解為這種問題.

一個判定問題D是NP完全問題,條件是,一它屬於NP問題,二NP中的任何問題都能夠在多項式時間內化簡為D.

P、NP、NP完全問題