在學習決策樹的時候,我們知道,其一大特點是:尋找最佳的決策樹是NP完成問題。什么是NP完全問題,決策樹的這一特點又是什么意思?
什么是NP完全問題
這里的NP其實是Non-deterministic Polynomial
的縮寫,即多項式復雜程度的非確定性問題,NP完全問題有時也會簡稱為NP-C問題。與此概念相關的還有P類問題、NP類問題等。要理解什么是NP完全問題,首先得從P類問題開始理解。
所有可以在多項式時間內求解的判定問題構成P類問題
判定問題是指回答結果輸出為Yes
或No
的問題,比如:3233是否可以寫成兩個大於1的數字的乘積?是否存在一條路線有且僅有一次的走過七橋問題的每一座橋?
在設計程序時,我們經常需要評估這個程序的時間復雜度,即衡量當問題規模變大后,程序執行所需的時間增長會有多快。如O(1)表示常數級別,即不管問題的規模變大多少倍,所耗的時間不會改變;O(N2)表示平方級別,即當問題規模增大至2倍時,所花費的時間則放大至4倍;O(2N)表示指數級別,即當問題規模倍數擴大時,所用時間會呈指數放大。
多項式時間則是指O(1)、O(logN)、O(N2)等這類可用多項式表示的時間復雜度,通常我們認為計算機可解決的問題只限於多項式時間內。而O(2N)、O(N!)這類非多項式級別的問題,其復雜度往往已經到了計算機都接受不了的程度。
所有非確定性多項式時間內可解的判定問題構成NP類問題
NP類問題將問題分為求解和驗證兩個階段,問題的求解是非確定性的,無法在多項式時間內得到答案,而問題的驗證卻是確定的,能夠在多項式時間里確定結果。
比如:是否存在一個公式可以計算下一個質數是多少?這個問題的答案目前是無法直接計算出來的,但是如果某人給出了一個公式,我們卻可以在多項式時間里對這個公式進行驗證。
NP中的一類比較特殊的問題,這類問題中每個問題的復雜度與整個類的復雜度有關聯性,假如其中任意一個問題在多項式時間內可解的,則這一類問題都是多項式時間可解。這些問題被稱為NP完全問題。
可以說NP完全問題是NP類問題的一種特殊情況,總結這幾類問題的特點,可參考如下這個表格:
問題類型 | 是否能在多項式時間內求解 | 是否能在多項式時間內驗證 |
---|---|---|
P | 是 | 是 |
NP | 是 or 否 | 是 |
NP-C | 未知 | 是 |
注:表格中的問題類型的困難程度依次遞增
由表可知,NP類問題是否能在多項式時間內求解,其答案並不明確,如果回答為「是」,豈不是跟P類問題一樣了?值得一題的是,P=NP?是千禧七大難題的首個難題,是一個價值百萬美元的問題,這個問題本質是求證:能用多項式時間驗證解的問題是否內在多項式時間內找出解。
決策樹的NP完全問題
在決策樹算法中,尋找最優決策樹是一個NP完全問題。決策樹的這一特點,說明我們無法利用計算機在多項式時間內,找出全局最優的解。
也正因為如此,大多數決策樹算法都采用啟發式的算法,如貪心算法,來指導對假設空間的搜索。可以說,決策樹最后的結果,是在每一步、每一個節點上做的局部最優選擇。決策樹得到的結果,是沒法保證為全局最優的。
----------------------------------------------------------------------------------------
作者:littlehei
鏈接:https://www.jianshu.com/p/dcb0b52f4935
來源:簡書
NP完全問題,是世界七大數學難題之一,排在百萬美元大獎的首位,夠誘惑力吧!咋不求得獎只需要了解了解它是什么就可以了。
什么是NP完全問題,NP=Non-deterministic Polynomial,也就是多項式復雜程度的非確定性問題, 是不是看漢語翻譯一下子給懵了。沒事,我們慢慢來,要了解NP問題,我們先從P問題開始,P就是Polynomial(多項式)的意思。P類問題就是所有復雜度為多項式時間的問題的集合。時間復雜度了解吧,我不多講;多項式就是n^k+n^(k-1)+……等等其中k為任意整數(一般不會很大)。這個數看起來很大,其實人類計算機相對都能接受。就怕遇到指數方增長的問題。
接下來我們探討非確定性問題。什么是非確定性問題呢?有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有一個公式,你一套公式,就可以一步步推算出來,下一個質數應該是多少呢?這樣的公式是沒有的。再比如,大的合數分解質因數的問題,有沒有一個公式,把合數代進去,就直接可以算出,它的因子各自是多少?也沒有這樣的公式。這種問題的答案,是無法直接計算得到的,只能通過間接的“猜算”來得到結果。這也就是非確定性問題。而這些問題通常有個算法,它不能直接告訴你答案是什么,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你“猜算”的答案正確與否的算法,假如可以在多項式時間內算出來,就叫做多項式非確定性問題。而如果這個問題的所有可能答案,都是可以在多項式時間內進行正確與否的驗算的話,就叫完全多項式非確定問題。
完全多項式非確定性問題可以用窮舉法得到答案,一個個檢驗下去,最終便能得到結果。但是這樣算法的復雜程度,是指數關系,因此計算的時間隨問題的復雜程度成指數的增長,很快便變得不可計算了。經典的NP問題有:梵塔問題,推銷員旅行問題等。
總之理解一句:NP完全問題就是 NP=P?的問題。
————————————————
版權聲明:本文為CSDN博主「xueyong4712816」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xueyong4712816/article/details/6509592