算法的時間複雜度
如果某個算法的複雜度可以表示爲 ,即問題規模n出現在底數的位置,這種複雜度稱爲多項式時間複雜度;
如果某個算法的複雜度表示爲 或 ,這種複雜度稱爲指數型時間複雜度。
相同問題規模下,指數型時間複雜度遠遠大於多項式時間複雜度。
當我們在解決一個問題時,我們選擇的算法通常都需要是多項式時間複雜度的,指數型時間複雜度的算法是計算機所不能承受的(除非是數據規模很小)。
P、NP、NP-Complete、NP-Hard問題
如果一個問題可以找到一個只有多項式複雜度的算法(這個算法可以在多項式時間內求得解),那這個問題就屬於P(Polynomial)問題(即多項式問題);
無法找到任何多項式複雜度算法的可解問題,則稱爲指數型(Exponential)問題;
沒有任何可解算法的問題,則稱爲不可解問題;
此外,我們關注多項式時間內是否可以驗證一個解,如果可以,這個問題就被稱爲NP(Non-Deterministic Polynomial )問題(即非決定性多項式問題)。
由此可知,所有的P問題都是NP問題。
之所以要定義NP問題,是因爲通常只有NP問題纔可能找到多項式的算法。我們不會指望一個連多項式地驗證一個解都不行的問題存在一個解決它的多項式級的算法。
在NP問題中,有這麼一類問題,所有的NP問題在多項式時間內都可以歸約【注:“問題A可約化爲問題B”有一個重要的直觀意義:B的時間複雜度高於或者等於A的時間複雜度。也就是說,NP問題不比NPC問題難。 】成這類問題,這類問題被稱爲NPC(NP-Complete)問題。
如果能夠證明任何一個NPC問題可以在多項式時間內求得解,就可以證明P=NP?這個困擾信息學的重要問題了。
而無論是不是NP問題,又有這麼一類問題,所有的NP問題在多項式時間內都可以歸約成這類問題,這類問題就被稱爲NPH(NP-Hard)問題;
NPC和NPH兩者的區別是: 驗證一個問題A是否爲NP-Hard無須判斷A是否屬於NP,但是NPC問題必須首先是NP問題. 根據定義可知NPC ∈ NPH。
由於P=NP?並沒有得到證明,因此,目前可以對問題作出這樣的分類:
典型的NP-Hard問題
旅行商問題,即TSP問題(Traveling Salesman Problem)又譯爲旅行推銷員問題、貨郎擔問題,是數學領域中著名問題之一。假設有一個旅行商人要拜訪n個城市,他必須選擇所要走的路徑,路徑的限制是每個城市只能拜訪一次,而且最後要回到原來出發的城市。路徑的選擇目標是要求得的路徑路程爲所有路徑之中的最小值。 若有 20 個城,則排法就有 種。因故在排列組合裏 寫起來輕鬆,但 是一個大得不得了的數字。若每秒鐘排一次,要排 年。旅行社問題可以歸約到NPC問題。
參考文獻
算法的時間複雜度和空間複雜度-總結
什麼是P問題、NP問題和NPC問題
P/NP/NPC/NP-hard
NP-Hard問題淺談