一.多項式時間
時間複雜度並不是表示一個程序解決問題需要花多少時間,而是當問題規模擴大後,程序需要的時間長度增長得有多快。也就是說,對於高速處理數據的計算機來說,處理某一個特定數據的效率不能衡量一個程序的好壞,而應該看當這個數據的規模變大到數百倍後,程序運行時間是否還是一樣,或者也跟着慢了數百倍,或者變慢了數萬倍。時間複雜度一般分爲兩種級別:一種是 O(1) , O(log(n)) , O(na) 等,我們把它叫做多項式級的複雜度,因爲它的規模n出現在底數的位置;另一種是 O(an) 和 O(n!) 型複雜度,它是非多項式級的,其複雜度計算機往往不能承受。當我們在解決一個問題時,我們選擇的算法通常都需要是多項式級的複雜度,非多項式級的複雜度需要的時間太多,往往會超時,除非是數據規模非常小。
時間複雜度 | 複雜度類別 |
---|---|
O(n) | 多項式級的複雜度 |
O(log(n)) | 多項式級的複雜度 |
O(na) | 多項式級的複雜度 |
O(an) | 指數級複雜度 |
O(n!) | 階乘級複雜度 |
二.P類問題、NP類問題
P類問題即爲所有可以由一個確定型圖靈機在多項式表達的時間內解決的問題;NP類問題由所有可以在多項式時間內驗證它的解是否正確的決定問題組成,或者等效的說,那些可以在非確定型圖靈機上在多項式時間內找出解的問題的集合。很可能,計算理論最大的未解決問題就是關於這兩類的關係的。----------------上述內容摘自維基百科
- P類問題:所有可在多項式時間內用確定算法求解的判定問題的集合
- NP類問題:所有可在多項式時間內用不確定算法求解的判定問題的集合,也就是說一個問題的解可以在多項式的時間內被驗證
三.NP-hard問題
對於問題Q以及任意的NP類問題Q1NP,都有Q1可以歸約到Q,那麼Q是NP-hard問題
- 任意np問題都可以在多項式時間內歸約爲該問題。歸約的意思是爲了解決問題A,先將問題A歸約爲另一個問題B,解決問題B同時也間接解決了問題A。
四.NP-complete問題
對於問題NP類問題Q並且該問題Q是NP-hard,那麼Q是NP-complete問題
換言之,NP-complete問題同時具有以下兩個特點:
- 它是NP類問題
- 同時它也是NP-hard類問題;
五.相互關係
顯然,所有P問題都是NP問題,反之則不一定。NP-complete問題是NP問題的子集,也是P問題和NP問題的差異所在。如果找到一個多項式內能被解決的NP-complete問題的解決方法,那麼P=NP。
六.寫在最後
本文是題主主要研究算法博弈論,看到該部分內容的時候,覺得收穫頗多。故再次將其展示與博客,爲了讓大家更多的瞭解博弈論的真面目,另外一方面也會在後來做該方面工作的時候可以繼續去補充,希望能和大家共勉,一起去貢獻出更精彩的博客!
注:文章內容引用列表: