演算法基礎 NP完全問題

2021-09-11 23:50:48 字數 2016 閱讀 8501

相信稍微做過一點學術研究的都不會對「np完全問題」這個概念感到陌生。它是千禧難題之首。

。簡單的寫法是 np=p?,問題就在這個問號上,到底是np等於p,還是np不等於p。

通俗地來說,有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來的。一般這種無法按部就班計算出來的問題,只能通過窮舉法等暴力的方法來解決。

對於np完全問題,有乙個經典的例子,就是旅行商問題。

假如你是乙個旅行商,需要前往5個不同的城市,當然,你希望找出前往這5個城市的最短路徑。為此,你必須計算每條可能的路徑,然後一一對比。

那麼這裡就不得不考慮乙個問題了,前往5個城市,可能的路徑有多少條呢?

為了解決這個問題,我們先來考慮只有兩個城市的情形,然後依次增加城市數量。

對於兩個城市,可供選擇的路徑有兩條,如下圖所示:

這裡可能會有一點爭議,那就是理論上來說,從a到b和從b到a應該是相同的,但是實際生活中經常會遇到單行道,所以我們在這裡認為從a到b和從b到a不同。

於是,涉及兩個城市時,可能的路線有兩條。

現在增加乙個城市,我們考慮有3個城市的情況。

此時,我們需要首先考慮從哪乙個城市出發,有3種情況,而從每個城市出發時,都有兩條不同的路線,所以總共有6條路線:

接下來是4個城市的情況。

我們依然是首先考慮從哪個城市出發,於是有4種情況,而選定了出發城市之後,便剩下3個城市,這3個城市的可能路徑為6條,所以在選定出發城市的情況下,又分別有6條不同的路徑,所以總路徑數為4*6=24條。

這裡就不詳細畫出來了。

其實這個問題不難看出來是乙個數字階乘的問題,即涉及n個城市時,可能的路徑條數為n!條

所以前面我們提出的問題就可以有解了,即5個城市時,可能的路線有5!=1*2*3*4*5=120條!

於是,為了尋找這5個城市的最優路線,我們需要遍歷120種可能路線,然後一一對比來獲取最優路線!

如果你認為這並不是乙個多麼困難的事情,那麼試想一下如果是10個城市呢?10!=3628800。也就是說,你需要計算的可能路線超過300萬條。很明顯,這很難。

旅行商問題總結一下就是:你需要計算所有的解,並從中選出最小/最短的那乙個。為此你必須遍歷所有可能,然後一一比對。

旅行商問題就是乙個很經典的np完全問題。

還有一種很典型的np完全問題稱為集合覆蓋問題。

假設你正在為乙個虛構的橄欖球隊挑選隊員,報名的球員名單如下圖所示:

該名單無非就是各個報名選手具備的各種橄欖球技巧。

當然,為了組成一支有實力的球隊,我們不可能光挑選乙個方面的球員,自然是要挑選各個方面的優秀球員,而且由於名額有限,我們必須在已有的資源中選擇乙個最優的球員組合。

於是,我們需要列出乙個需要的橄欖球技巧清單:優秀的四分衛,優秀的跑衛,擅長雨中作戰,能承受壓力,等等等等。

在現有的報名選手中,我們根據上面列出的技巧清單來尋找乙個最優的球員組合。

面對這個問題,我們可以使用貪婪演算法來解決:

找出符合最多要求的報名選手。

不斷重複這個過程,直到球隊滿足要求或者球隊名額已滿。

很明顯,這是乙個集合覆蓋問題,根據上面的報名清單我們可以獲得以下的集合:

集合覆蓋問題也是乙個很典型的np完全問題。

既然np完全問題是多項式複雜程度的非確定性問題,簡言之就是難解決的問題,自然也是難判別的。

其實,根本沒有乙個定理來判斷乙個問題是否是np完全問題。只是,還是有很多線索可以幫助我們來做識別的。這些線索羅列如下:

NP完全問題

np完全問題是不確定性圖靈機在p時間內能解決的問題,是 世界七大數學難題 之一。np完全問題排在百萬美元大獎的首位,足見他的顯赫地位和無窮魅力。數學上著名的np問題,完整的叫法是np完全問題,也即 np complete 問題,簡單的寫法,是 np p?的問題。問題就在這個問號上,到底是np等於p,...

NP完全問題

下面是在看 data structures and algorithm analysis in c 一書時所記錄的筆記,大部分為原書內容 np的乙個性質,所有np中的任一問題都能夠多項式地歸約 也即是在多項式複雜度內對映 成np完全問題。也就是說,只要有乙個np問題,其它所有的np問題都可以歸約到它...

NP完全問題

np完全問題,是世界七大數學難題之一,排在百萬美元大獎的首位,夠 力吧!咋不求得獎只需要了解了解它是什麼就可以了。什麼是np完全問題,np non deterministic polynomial,也就是多項式複雜程度的非確定性問題,是不是看漢語翻譯一下子給懵了。沒事,我們慢慢來,要了解np問題,我...