0、与算法复杂性的区别
- 算法的复杂性是指解决问题的一个具体的算法的执行时间,这是算法的性质。
问题的复杂性是指这个问题本身的复杂程度,是问题的性质。
比如排序问题的复杂性是O(nlgn),但是排序算法有很多,冒泡法是O(n^2),快速排序平均情况下是O(nlgn)等等,排序问题的复杂性是指在所有的解决该问题的算法中最好算法的复杂性。
问题的复杂性不可能通过枚举各种可能算法来得到,一般都是预先估计一个值,然后从理论上证明。
1、P问题
- 能在多项式时间内解决的问题。(即能找到计算复杂度可以表示为多项式的确定算法)
2、NP问题
- 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题。
- NP问题包括了P问题。
3、NP-Complete问题
- NP完全问题。这类问题中任何一个问题至今未找到多项式时间算法。
4、NP-Hard问题
- 如果所有NP问题都可以多项式归约到问题A,那么问题A就是NP-Hard。
- 如果问题A既是NP-Hard又是NP,那么它就是NP-Complete。
- NP-Hard不一定是NP问题。
- NPC问题一定是NPH问题。