P P-C NP NP-C 以及圖靈機問題


     學研究生算法可能很大部分都在講p,np問題,有他們的地方也少不了圖靈機問題。所以偶首先給出上面幾個問題的定義。
     p:所謂p問題,就是那些能在多項式時間裏解決的問題。更標準的定義是確定圖靈機能在多項式時間裏解決的問題。
     p-c:也就是p完全問題(p-coplete),它的定義主要是在complete上,也就是那些在p類中as hard as others的問題。
     np問題(non-deterministic polynomial-time problem):np問題是能在不確定圖靈機上多項式時間裏面解決的問題集合。
     np-c:也就是在np裏面的一些as hard as others的問題。
     確定圖靈機:其實我自己理解的確定圖靈機就是執行一個狀態後只能有一個待選狀態被執行。
     不確定圖靈機:就是執行一個狀態後,接下來的狀態存在不確定性,圖靈機根據算法設計選擇不同的狀態執行。
     多項式時間:也就是算法執行所需要的時間(大概估計),比如:n,log n,nlog n,n的k次方。這些都叫做多項式時間。n!以及n的n次方以上的就不是了,輸入規模的大小嚴重印象算法執行時間,一般都相當長。有前者時間複雜度的問題也是易處理的,後者的就不易處理,就需要藉助一些不確定算法求解(probabilitic algorithm 等)。定義應該差不多了吧!

     接下來就是判定一個問題屬於哪一個複雜類了,注意這裏你必須清楚這些所謂的p, np問題都是對算法的時間複雜度的劃分。根據不同的時間複雜度我們可以把那個問題歸屬於某一

類,但是這裏有牽涉到他們的包含與被包含問題,的確很複雜,我也不就一一解釋了,我也還需要繼續學習。就給出一些大概的概念和列子就行了。
     我們就舉例判斷一個字符串是不是迴文串來進一步解釋:我們的一般算法是直接讀取字符串(數組定義)前後的元素一個一個挨着比較就是,這個時間複雜度肯定是在多項式時間裏面可以解決的,所以它是屬於p的。我們也可以用圖靈機來模擬實現這個算法,一根輸入帶,直接在輸入帶上按照這個算法操作。狀態之間是一一對應的關係,不會出現一對多,所以也是可以在確定性圖靈機上多項式時間類解決。同時我們也可以用不確定圖靈機解決這個問題,不確定圖靈機工作的主要特點是存在不確定性,那麼我們就猜測字符串的中間位置,然後從中間位置截斷成兩個字符串,一半複製到另一條工作帶上,直接比較輸入帶和工作帶上的字符串(操作對享受工作待上是前半字符串,輸入帶上是後半字符串)如果我們切斷的地方正好是中間位置,那麼我們成功的概率就更高。但是存在對中間字符猜測的不確定性。整個比較過程也能在多項式時間裏解決。所以迴文既能在確定也能在不確定圖靈機上的多項式時間裏面解決,這裏證明了p問題是屬於np問題的。我們來看個np問題,那就是著名的哈密爾頓迴路問題。本科的時候我想大家都學習過這個算法,其實我都忘記了當時老師是怎麼講的了。這裏我就說說它是怎麼被證明是np問題的。問題本身是要找個一個各個結點花銷最少的迴路。這個問題我們是能用確定的方法決絕,那就是把所有的結點組合找出來,一個組合一個組合的計算開銷,最後得出最小開銷的那條路徑。最壞的情況下有n的n-1次方條可供計算的路徑。這個開銷是比較大的,算法時間複雜度和輸入規模(節點數目)是exponentially增長的。雖然這個方法我們能解決這個問題,但是太不可實際操作。迄今爲止也沒有證明這個問題不能在多項式時間裏面解決。所以她還是個np問題。
其實哈密爾頓迴路也是個np-c問題,只是那個證明牽涉到歸約問題,歸約原理簡單,誰都會說,但是操作起來難度我覺得是忒大的。同理但貨郎問題也是該類問題。

      p是屬於np的,但是np是否等於p還是一個有待研究的問題。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章