在学习决策树的时候,我们知道,其一大特点是:寻找最佳的决策树是NP完成问题。什么是NP完全问题,决策树的这一特点又是什么意思?
什么是NP完全问题
这里的NP其实是Non-deterministic Polynomial
的缩写,即多项式复杂程度的非确定性问题,NP完全问题有时也会简称为NP-C问题。与此概念相关的还有P类问题、NP类问题等。要理解什么是NP完全问题,首先得从P类问题开始理解。
所有可以在多项式时间内求解的判定问题构成P类问题
判定问题是指回答结果输出为Yes
或No
的问题,比如:3233是否可以写成两个大于1的数字的乘积?是否存在一条路线有且仅有一次的走过七桥问题的每一座桥?
在设计程序时,我们经常需要评估这个程序的时间复杂度,即衡量当问题规模变大后,程序执行所需的时间增长会有多快。如O(1)表示常数级别,即不管问题的规模变大多少倍,所耗的时间不会改变;O(N^2) 表示平方级别,即当问题规模增大至2倍时,所花费的时间则放大至4倍;O(2^N) 表示指数级别,即当问题规模倍数扩大时,所用时间会呈指数放大。
多项式时间则是指O(1)、O(logN)、O(N^2) 等这类可用多项式表示的时间复杂度,通常我们认为计算机可解决的问题只限于多项式时间内。而O(2^N)、O(N!)这类非多项式级别的问题,其复杂度往往已经到了计算机都接受不了的程度。
所有非确定性多项式时间内可解的判定问题构成NP类问题
NP类问题将问题分为求解和验证两个阶段,问题的求解是非确定性的,无法在多项式时间内得到答案,而问题的验证却是确定的,能够在多项式时间里确定结果。
比如:是否存在一个公式可以计算下一个质数是多少?这个问题的答案目前是无法直接计算出来的,但是如果某人给出了一个公式,我们却可以在多项式时间里对这个公式进行验证。
NP中的一类比较特殊的问题,这类问题中每个问题的复杂度与整个类的复杂度有关联性,假如其中任意一个问题在多项式时间内可解的,则这一类问题都是多项式时间可解。这些问题被称为NP完全问题。
可以说NP完全问题是NP类问题的一种特殊情况,总结这几类问题的特点,可参考如下这个表格:
问题类型 | 是否能在多项式时间内求解 | 是否能在多项式时间内验证 |
---|---|---|
P | 是 | 是 |
NP | 是 or 否 | 是 |
NP-C | 未知 | 是 |
注:表格中的问题类型的困难程度依次递增
由表可知,NP类问题是否能在多项式时间内求解,其答案并不明确,如果回答为「是」,岂不是跟P类问题一样了?值得一题的是,P=NP?是千禧七大难题的首个难题,是一个价值百万美元的问题,这个问题本质是求证:能用多项式时间验证解的问题是否内在多项式时间内找出解。
决策树的NP完全问题
在决策树算法中,寻找最优决策树是一个NP完全问题。决策树的这一特点,说明我们无法利用计算机在多项式时间内,找出全局最优的解。
也正因为如此,大多数决策树算法都采用启发式的算法,如贪心算法,来指导对假设空间的搜索。可以说,决策树最后的结果,是在每一步、每一个节点上做的局部最优选择。决策树得到的结果,是没法保证为全局最优的。
(全文完)
参考文章:
1、什么是P问题、NP问题和NPC问题
2、what are the differences between np, np-complete and np-hard