通俗理解NP,NPC,NP Hard問題

2021-09-28 12:41:06 字數 1293 閱讀 1580

我們把解決一類問題的方法或過程,稱之為演算法。而演算法有乙個很重要的指標就是時間複雜度o。因為我們最終是要通過計算機來執行這些演算法的,而計算機的算力再高也終究是個有限值,因此如果乙個演算法的時間複雜度很高,那麼當輸入的資料量十分龐大時,計算機處理的時間就會無法想象地增長。通過時間複雜度的概念就可以引出np,npc等問題。

有這樣一類問題,求解它們所需的時間複雜度是多項式時間複雜度,也就是o(n

c)

o(n^c)

o(nc),c

cc是乙個常數。這種就是p類問題(p是polynomial的首字母),計算機能夠容忍多項式時間複雜度的演算法,即使誇張點來說,c

=10000000000

c=10000000000

c=1000

0000

000,計算機也是能夠接受的。隨之要提到的就是np問題。首先需要明確字母n不是not的首字母,np全稱是non-deterministic problem。也就是說,np問題並不是肯定沒有多項式時間的解法,只是 可能 沒有。np問題指的是 能在多項式時間內驗證乙個解的一類問題。注意求解和驗證是不同的。那麼用來驗證的這個解,是怎麼得到的?猜出來的。因為np問題不一定有多項式時間的解法能求出乙個解。比如有這樣乙個問題「對於tsp問題,找到一條路徑長度總和小於100的路徑」,那我們就可以隨便猜一條路徑,再把這n條路徑長度加起來o(n

)o(n)

o(n)

,看是不是小於100就行了。如果小於100,那這條路徑就是乙個問題的解,雖然這個解是猜出來的。那麼p問題一定是np問題,p∈n

pp\in np

p∈np

.因為p問題能在多項式時間內得到解決,那必然能在多項式時間內驗證乙個猜出來的解。

之後就簡單了解一下npc問題的概念。npc問題首先是乙個np問題,也就是該類問題也能在多項式時間內驗證乙個解的正確性。所以npc問題並不是想當然的認為「npc比np更難,所以npc問題就是不能在多項式時間驗證乙個解的問題」。npc問題和np問題一樣,也是可能存在乙個多項式時間的解法。npc中的c是complete的首字母,它的含義是 所有的np問題都能夠約化為乙個npc問題。那麼npc問題存不存在呢?存在! 但關鍵的是,npc問題是存在的,即所有的np問題都能約化為npc問題,但目前人們並沒有找到乙個多項式時間複雜度的解法來解決npc問題。所以暫時可以說npc問題是無法求解的。所以,能解決npc問題是一件非常非常非常非常厲害的事情。

np-hard的問題則更廣。np-hard不一定是np問題,也就是它可能連在多項式時間內驗證乙個解都做不到。所以可以把np-hard理解為比npc更難的問題,也就是求解np-hard問題比求解npc問題更離譜!

(如有錯誤,我道歉。。)

NP,NPC,NPhard問題說明

np,npc,nphard問題說明 p問題是初始問題,所有這類問題都可以用乙個確定性演算法在多項式時間內求出解。np問題,能夠多項式時間求得解,或者多項式時間內判斷是否是正確的,p包含於np npc問題,全部np問題在多項式時間內,可以約化到的問題,npc包含於np nph問題,npc問題在多項式時...

redis通俗理解

一,redis是什麼 redis是一種支援key value等多種資料結構的儲存系統。可用於快取,事件發布或訂閱,高速佇列等場景。該資料庫使用ansi c語言編寫,支援網路,提供字串,雜湊,列表,佇列,集合結構直接訪問,基於記憶體,可持久化。二,支援的語言 三,redis的應用場景有哪些四,redi...

通俗理解HashMap

原理 hashmap是以key value鍵值對的形式存在著的,大致邏輯為進行put時,根據key值,進行hashing,生成hashcode,對應到bucket的位置然後在當前位置進行key value儲存。根據key值對應的每個字元的阿斯克碼的和再取模於的map長度得出的值都是固定的對應的下標值...