npc問題的定義非常簡單。同時滿足下面兩個條件的問題就是npc問題。首先,它得是乙個np問題;然後,所有的np問題都可以約化到它。證明乙個問題是 npc問題也很簡單。先證明它至少是乙個np問題,再證明其中乙個已知的npc問題能約化到它(由約化的傳遞性,則npc問題定義的第二條也得以滿足;至於第乙個npc問題是怎麼來的,下文將介紹),這樣就可以說它是npc問題了。
既然所有的np問題都能約化成npc問題,那麼只要任意乙個npc問題找到了乙個多項式的演算法,那麼所有的np問題都能用這個演算法解決了,np也就等於p 了。因此,給npc找乙個多項式演算法太不可思議了。因此,前文才說,「正是npc問題的存在,使人們相信p≠np」。我們可以就此直觀地理解,npc問題目前沒有多項式的有效演算法,只能用指數級甚至階乘級複雜度的搜尋。
順便講一下np-hard問題。np-hard問題是這樣一種問題,它滿足npc問題定義的第二條但不一定要滿足第一條(就是說,np-hard問題要比 npc問題的範圍廣)。np-hard問題同樣難以找到多項式的演算法,但它不列入我們的研究範圍,因為它不一定是np問題。即使npc問題發現了多項式級的演算法,np-hard問題有可能仍然無法得到多項式級的演算法。事實上,由於np-hard放寬了限定條件,它將有可能比所有的npc問題的時間複雜度更高從而更難以解決。
不要以為npc問題是一紙空談。npc問題是存在的。確實有這麼乙個非常具體的問題屬於npc問題。下文即將介紹它。
下文即將介紹邏輯電路問題。這是第乙個npc問題。其它的npc問題都是由這個問題約化而來的。因此,邏輯電路問題是npc類問題的「鼻祖」。
邏輯電路問題是指的這樣乙個問題:給定乙個邏輯電路,問是否存在一種輸入使輸出為true。
什麼叫做邏輯電路呢?乙個邏輯電路由若干個輸入,乙個輸出,若干「邏輯門」和密密麻麻的線組成。看下面一例,不需要解釋你馬上就明白了。
┌───┐
│ 輸入1├─→┐ ┌──┐
└───┘ └─→┤ │
│ or ├→─┐
┌───┐ ┌─→┤ │ │ ┌──┐
│ 輸入2├─→┤ └──┘ └─→┤ │
└───┘ │ ┌─→┤and ├──→輸出
└────────┘┌→┤ │
┌───┐ ┌──┐ │ └──┘
│ 輸入3├─→┤ not├─→────┘
└───┘ └──┘
這是個較簡單的邏輯電路,當輸入1、輸入2、輸入3分別為true、true、false或false、true、false時,輸出為true。
有輸出無論如何都不可能為true的邏輯電路嗎?有。下面就是乙個簡單的例子。
┌───┐
│輸入1 ├→─┐ ┌──┐
└───┘ └─→┤ │
│and ├─→┐
┌─→┤ │ │
│ └──┘ │ ┌──┐
│ └→┤ │
┌───┐ │ │and ├─→輸出
│輸入2 ├→─┤ ┌──┐ ┌→┤ │
└───┘ └→┤not ├→──┘ └──┘
└──┘
上面這個邏輯電路中,無論輸入是什麼,輸出都是false。我們就說,這個邏輯電路不存在使輸出為true的一組輸入。
回到上文,給定乙個邏輯電路,問是否存在一種輸入使輸出為true,這即邏輯電路問題。
邏輯電路問題屬於npc問題。這是有嚴格證明的。它顯然屬於np問題,並且可以直接證明所有的np問題都可以約化到它(不要以為np問題有無窮多個將給證明造成不可逾越的困難)。證明過程相當複雜,其大概意思是說任意乙個np問題的輸入和輸出都可以轉換成邏輯電路的輸入和輸出(想想計算機內部也不過是一些 0和1的運算),因此對於乙個np問題來說,問題轉化為了求出滿足結果為true的乙個輸入(即乙個可行解)。
有了第乙個npc問題後,一大堆npc問題就出現了,因為再證明乙個新的npc問題只需要將乙個已知的npc問題約化到它就行了。後來,hamilton 迴路成了npc問題,tsp問題也成了npc問題。現在被證明是npc問題的有很多,任何乙個找到了多項式演算法的話所有的np問題都可以完美解決了。因此說,正是因為npc問題的存在,p=np變得難以置信。p=np問題還有許多有趣的東西,有待大家自己進一步的挖掘。攀登這個資訊學的巔峰是我們這一代的終極目標。現在我們需要做的,至少是不要把概念弄混淆了。
什麼是P問題,NP問題和NPC問題?
先簡單的幾句話說一下時間複雜度。時間複雜度並不是計算機解決乙個問題需要花多長時間,而是當問題規模擴大後,而是當問題規模擴大後,程式需要的時間增長速度有多快。不管程式資料有多大,程式處理花的時間總是那麼多的,那我們說這個這個程式很好,具有o 1 的複雜度,也就是常數級複雜度 資料規模變得多大,花的時間...
什麼是P問題,什麼是NP問題,什麼是NPC問題
參考 講的真好!非多項式級別 運算慢,巨大 o n o 多項式級的複雜度 運算快,比較小 o 1 o n o 該問題能夠找到乙個解決演算法,時間複雜度是o 1 o n o 多項式時間 的級別 找乙個解很困難,但驗證乙個解很容易。我們可能沒有乙個已知的快速的解決問題的方法,但是如果給我們乙個候選的答案...
什麼是NP問題?
什麼是np問題 概念 在計算機學科中,存在多項式時間的演算法的一類問題,稱之為p類問題 而像梵塔問題 推銷員旅行問題 命題表示式 可滿足問題這類,至今沒有找到多項式時間演算法解的一類問題,稱之為np類問題。拿推銷員旅行問題為例,假設推銷員亨利有向6個城市推銷公司產品的任務,並規定了乙個旅行預算。他手...