在算法復雜度分析的過程中,人們常常用特定的函數來描述目標算法,隨着變量n的增長,時間或者空間消耗的增長曲線,近而進一步分析算法的可行性(有效性)。
引入了Big-O,Big-Ω,來描述目標算法的上限、下限復雜度函數。
用Big-Θ描述和目標函數同序的復雜度函數,即由Big-Θ既是上限也是下限。
常常用到如下時間復雜度函數標度
1, log n, n, n log n, n^2, 2^n, n!
通常將具有n^x,x為正整數形式的時間復雜度函數稱為多項式復雜度。
通常認為具有多項式時間復雜度的算法是容易求解的。
超過多項式時間復雜度,算法增長迅速,不易求解。
下圖將展示NP和NP完全問題在所有問題中的位置。
通常問題分為 可解決(Solvable) 和 不可解決(Unsolvable)。
可解決問題又可以分為 易解決(Tractable)、不易解決(Intractable)和不確定是否容易解決(NP)
- 可解決(Solvable)是指存在算法能夠解決的問題
- 不可解決(Unsolvable)是指不存在解決該問題的算法,如The Halting Problem。
- 易解決(Tractable),即P問題,是指具有最壞時間復雜度為多項式時間的算法能夠解決的問題
- 不易解決(Intractable)是指不存在最壞時間復雜度為多項式時間的算法能夠解決的問題
- 不確定是否容易解決(NP),還未被證明是否存在多項式算法能夠解決這些問題,而其中NP完全問題又是最有可能不是P問題的問題類型。
判斷是否是NP完全問題
1.元素較少時算法的運行速度非常快,但隨着元素數量的增加,速度會變的非常慢。
2.涉及所有組合問題通常是NP完全問題
3.不能將問題分成小問題,必須考慮各種情況,這可能是NP問題
4.如果問題涉及序列(如旅行商問題中的城市序列)且難以解決,它可能是NP問題
5.如果問題涉及集合(如廣播電台集合)且難以解決,它可能是NP完全問題
6.如果問題可轉化為集合覆蓋問題或商旅問題,那它肯定是NP問題