友快網

導航選單

【創投行聚焦】np完全問題:一個簡單的寫法是np等於p,還是p??

NP完全問題

今天我們來聊一下關於NP完全問題的相關知識,初看到這個名詞,其實我也是不懂是什麼東西,但是百度百科給出了這樣的解釋:NP完全問題(NP-C問題),是

世界七大數學難題之一。 NP的英文全稱是Non-deterministic Polynomial的問題,即多項式複雜程度的非確定性問題。簡單的寫法是 NP=P?,問題就在這個問號上,到底是NP等於P,還是NP不等於P。是不是看完也不知道在說什麼?那我們就開門見山,NP完全問題的簡單定義是,以難解著稱的問題,如旅行商問題和集合覆蓋問題。很多非常 聰明的人都認為,根本不可能編寫出可快速解決這些問題的演算法。

旅行商問題求解

在旅行商這個問題種,有一位旅行商需要前往5個不同的城市。如下圖所示

旅行城市

如果需要找出前往這5個城市的最短路徑,為此,必須計算每條可能的路徑

路徑規劃

那麼前往5個城市時,可能的路徑有多少條呢?

我們假設現在只有兩個城市(馬林和舊金山),那麼可供我們選擇的路線只有兩條:1、馬林——-舊金山 2、舊金山——-馬林

那麼你可能會有這麼一個疑問?這兩條路線不相同嗎?不一定,如果有個城市是單行的話,那麼就無法按原路返回,就需要找到一個岔路然後回去,因此,這兩條路線不一定相同。

如果我們再增加一個城市伯克利,此時可能的路線會有多少條呢?

應該是有6條,當從伯克利出發時,從伯克利到馬林再到舊金山這是一條路線,從伯克利到舊金山到馬林這是另外一條路線。同理當從馬林出發時又是兩條路線,舊金山出發時又是兩條路線,因此當涉及3個城市時,可能的路線有6條。

路徑規劃

分析完3個城市的路線規劃時,此時再增加一個城市——弗裡蒙特,假設從弗裡蒙特出發,有6條可能的路線,為什麼?其實就是上面的路線規劃中加了起點城市弗裡蒙特,但是我們可以選擇弗裡蒙特作為起點,相對應其他三個城市也可以作為我們的起點城市,同樣會獲得6條路線規劃,這樣算下來就會有4x6=24條路線。

路徑規劃

由此我們可以得出這樣一個規律:每增加一個城市,需要計算的路線數都將增加

規律

當涉及6個城市時,可能的路線就有720條,7個城市就有5040條,8個城市就有40320條,由歸納法可知當有n個城市時,那麼路線就有n!條。因此,一旦涉及的城市多,找出旅行商問題的正確解就顯得尤為困難。;旅行商問題需要計算所有的解,並從中選出最短的那個,屬於NP完全問題。

還記得上次我們學習貪婪演算法中提到的近似求解的概念,那麼對於這麼多路線規劃,我們找到一條相對較短的路線才是解決這個問題的最優解。解決旅行商問題時,我們可以隨便選擇出發城市,然後每次選擇要去的下一個城市,但這個城市都選擇的是下一個沒去過的且最近的城市,假設旅行商從馬林出發:

近似最優解

總旅程為71公里,當然了這條路徑可能不是

最短

的,但也相對短了

如何判斷NP完全問題

元素較少時演算法的執行速度非常快,但隨著元素數量的增加,速度會變得非常慢。

涉及“所有組合”的問題通常是NP完全問題。

不能將問題分成小問題,必須考慮各種可能的情況。這可能是NP完全問題。

如果問題涉及序列(如旅行商問題中的城市序列)且難以解決,它可能就是NP完全問題。

如果問題涉及集合(如廣播臺集合)且難以解決,它可能就是NP完全問題。

如果問題可轉換為集合覆蓋問題或旅行商問題,那它肯定是NP完全問題。

上一篇:【燒友分享】手機也能玩純主觀,k40g上手半天
下一篇:為什麼windows 10的更新總能在最不適合的時候以最不適合的形式出現在我們