先說一下時間複雜度,時間複雜度並不是表示乙個程式解決問題需要花多少時間,而是當問題規模擴大後,程式需要的時間長度增長得有多快。也就是說,對於高速處理資料的計算機來說,處理某乙個特定資料的效率不能衡量乙個程式的好壞,而應該看當這個資料的規模變大到數百倍後,程式執行時間是否還是一樣,或者也跟著慢了數百倍,或者變慢了數萬倍。
在時間複雜度的計算中常用的時間複雜度按照耗費的時間從小到大依次是:o(1)只要演算法的複雜度不會是最後兩個指數或者階乘型,前面的o(1)到o(n^m)(m為常數)任意組合都算是多項式級的複雜度,它們的規模n都出現在底數字置;而o(2ⁿ),o(n!)型 複雜度,就是非多項式級的,問題規模較大時,計算機也很難算出結果。所以我們一般會選擇多項式級複雜度的演算法。
p問題:
p問題:只要問題存在確定性多項式級複雜度的解決演算法,就稱之為p問題。
np問題:
np問題:不存在確定性多項式級複雜度的解決演算法,但是存在多項式時間的演算法來驗證某個答案是否正確,就稱之為np問題。
p問題和np問題區別,p問題可以在多項式時間內求解,例如3x=15,我們可以得出精確的解x=5,o(x)時間複雜度;而np問題呢,雜湊函式hash(x)=aswindhkfuil,在多項式時間內,我們雖然無法求解x,但是如果有人說他知道x,他把x=iisdfsdfw給你,你可以用x=iisdfsdfw帶入hsah進行驗證是否正確,而驗證的時間複雜度o(1);
p類問題是np問題的乙個子集。也就是說,能多項式時間地解決乙個問題,必然能多項式時間地驗證乙個問題的解。那是否所有的np問題都是p類問題,乙個總的趨勢和大方向是人們普遍認為,p=np不成立,也就是說,多數人相信,存在至少乙個不可能有多項式級複雜度的演算法的np問題。
np-c問題:
npc問題的定義非常簡單。同時滿足下面兩個條件的問題就是npc問題。首先,它得是乙個np問題;然後,所有的np問題都可以約化到它。證明乙個問題是 npc問題也很簡單。先證明它至少是乙個np問題,再證明其中乙個已知的npc問題能約化到它(由約化的傳遞性,則npc問題定義的第二條也得以滿足;至於第乙個npc問題是怎麼來的,下文將介紹),這樣就可以說它是npc問題了。
既然所有的np問題都能約化成npc問題,那麼只要任意乙個npc問題找到了乙個多項式的演算法,那麼所有的np問題都能用這個演算法解決了,np也就等於p 了。因此,給npc找乙個多項式演算法太不可思議了。因此,前文才說,「正是npc問題的存在,使人們相信p≠np」。我們可以就此直觀地理解,npc問題目前沒有多項式的有效演算法,只能用指數級甚至階乘級複雜度的搜尋。
約化(reducibility,有的資料上叫「歸約」,簡單地說,乙個問題a可以約化為問題b的含義即是,可以用問題b的解法解決問題a,或者說,問題a可以「變成」問題b。
np-h問題:
np-hard問題是這樣一種問題,它滿足npc問題定義的第二條但不一定要滿足第一條(就是說,np-hard問題要比 npc問題的範圍廣)。np-hard問題同樣難以找到多項式的演算法,但它不列入我們的研究範圍,因為它不一定是np問題。即使npc問題發現了多項式級的演算法,np-hard問題有可能仍然無法得到多項式級的演算法。事實上,由於np-hard放寬了限定條件,它將有可能比所有的npc問題的時間複雜度更高從而更難以解決。
P問題 NP問題和NPC問題
p就是能在多項式時間內解決的問題 np就是能在多項式時間驗證答案正確與否的問題。p是否等於np實質上就是在問,如果對於乙個問題我能在多項式時間內驗證其答案的正確性,那麼我是否能在多項式時間內解決它?再說說np hardness和np completenes.這裡涉及乙個概念,不妨稱為問題之間的歸約。...
P問題,NP問題,NPC問題,NP hard問題
1.p問題 乙個問題能找到乙個在多項式時間裡解決他的演算法 2.np問題 在多項式時間找不到問題的解,但可在多項式時間驗證問題的解 所有p問題都是np問題 3.npc問題 存在乙個np問題,所有其他np問題都可以約化為它 是乙個np問題 所有np問題都可約化為它 一元二次方程可以約化一元一次方程 一...
P問題 NP問題 NPC問題 NP難問題的概念
你會經常看到網上出現 這怎麼做,這不是np問題嗎 這個只有搜了,這已經被證明是np問題了 之類的話。你要知道,大多數人此時所說的np問題其實都是指的npc問題。他們沒有搞清楚np問題和npc問題的概念。np問題並不是那種 只有搜才行 的問題,npc問題才是。好,行了,基本上這個誤解已經被澄清了。下面...