通俗理解P和NP

2021-07-24 12:24:55 字數 1553 閱讀 6136

通俗理解p和np

上篇博文談及np,有博友認為我文中沒有解釋np的概念,是不妥的,這次對p和np進行詳細的講解,使得非計算機專業的理工類也能看懂,計算機專業的當然就更能透徹地看懂了。

要計算或解決乙個問題,該問題通常有乙個大小規模,用n表示。例如,若分析計算乙個二進位制數,該數有多少位,這個位就是其大小規模。再比如,從n個數裡面找出最大的那個數,這個n就是該問題的規模大小。怎麼找?我們要比較n-1次才能得到結果,這個n-1就是所花的時間,也就是時間複雜度。再比如,將n個數按從大至小排序,n是其規模大小,若是我們按這樣的方法:第一次從n個數里找最大,第二次從n-1個數里找最大,以此類推,需要的比較次數就是n(n-1)/2,稱我們所用的方法為演算法,稱n(n-1)/2為該演算法的時間複雜度。對於時間複雜度,當n足夠大時,我們只注重最高次方的那一項,其他各項可以忽略,另外,其常數係數也不重要,所以,n(n-1)/2我們只重視n的平方這一項了,記為o(n的平方),這就是該演算法對該問題的時間複雜度的專業表示。

所有形如a*n^k+b*n^(k-1)+c*n^(k-2)……都可記為o(n^k), n^k表示n的k次方,*為乘號,這樣的複雜度稱為多項式時間複雜度,若是時間複雜度形如k^n,k為大於1的常數,或n!,或更大的,就稱為指數型時間複雜度。顯然,當n足夠大時,指數型時間比多項式要大得多的多。

所有能用多項式時間演算法計算得到結果的問題,稱為多項式問題,也就是p,所有絕對不可能用多項式時間求解的問題,稱為指數型問題。

有這樣一類問題,假使你得到了問題的解,我要驗證你的解是否正確,我驗證所花的時間是多項式,至於求解本身所花的時間是否是多項式我不管,可能有多項式演算法,可能沒有,也可能是不知道,這類問題稱為np問題。

np概念的奧妙在於,它躲開了求解到底需要多少時間這樣的問題,而僅僅只是強調驗證需要多少時間,從而為p與np這一千年難題的產生埋下了伏筆。顯然,p肯定是np,因為你既然能用多項式求解,就肯定能用多項式驗證(難不成我再算一遍!),但np是否是p誰也確定不了。另外,目前已經很明確的指數型問題也肯定不是np。當然要理解這一點還有點難,看我下面的解釋。

講到目前為止,np的概念還是抽象的,聽者恐怕還沒有達到透徹掌握的程度。要是我給學生講課的話,對這樣抽象難理解的概念,我會告訴學生用如下方式去透徹的掌握它(呵呵,但願我不要是那種自己僅停留在背概念的水平,甚至連概念都沒有理解透,卻要厚臉皮地自吹自己「講課水平高」的人了,我的邏輯非常簡單,我自己曾經用這樣的方法高效透徹地掌握了,我讓學生按這樣的方法去做,他們也能達到高效而透徹):

1,找三個例子,乙個為p,乙個為np但不知道是否為p,再乙個為明顯的指數型問題比如全排列、漢諾塔等,反覆比較理解。

2,盡可能多的找出np問題的特點,哪怕有重疊也沒關係,針對每乙個特點,結合例子去理解。np最顯著的特點有兩個,乙個是分步及每一步的並行性,二就是任何np問題都可轉化為是和否的問題,當然,最根本的還有驗證多項式。

當然我也會詳細的總結出特點,細細的準備相應的例子,但這裡就沒有必要花這個時間筆墨了。

許多人由於沒有理解p和np的實質,僅僅只是背了一下其關於確定性和非確定性圖靈機、語言、空間等概念,又沒有理解透,將概念進行無謂的倒騰,以為僅憑這些概念的文字表述所指的範疇,就能得出p不等於np的結論,莫非這些人真的以為粑粑不要公尺做?

NP問題通俗理解

時間複雜度 時間複雜度並不是處理乙個問題要花費多少時間,我們研究解決乙個特定的資料問題花費多少時間是沒有意義的,時間複雜度衡量的是隨著問題規模的擴大,程式所需要的時間長度增加的情況。p問題 問題可以在多項式時間內求解的統稱為p問題 可以在多項式內求解的問題一定可以在多項式時間內驗證,所以p問題一定是...

P 問題和 NP 問題

p就是能在多項式時間內解決的問題,np就是能在多項式時間驗證答案正確與否的問題。用大白話講大概就是這樣。所以p是否等於np實質上就是在問,如果對於乙個問題我能在多項式時間內驗證其答案的正確性,那麼我是否能在多項式時間內解決它?這個表述不太嚴謹,但通俗來講就是如此。再說說np hardness和np ...

P問題 NP問題 NP完全問題和NP難問題

在講p類問題之前先介紹兩個個概念 多項式,時間複雜度。知道這兩概念的可以自動跳過這部分 1 多項式 axn bxn 1 c 恩.就是長這個樣子的,叫x最高次為n的多項式.咳咳,別嫌我囉嗦。有些人說不定還真忘了啥是多項式了。例如第一次看到的鄙人 2 時間複雜度 我們知道在計算機演算法求解問題當中,經常...