• 什么是NP完全问题


    在学习决策树的时候,我们知道,其一大特点是:寻找最佳的决策树是NP完成问题。什么是NP完全问题,决策树的这一特点又是什么意思?

    什么是NP完全问题

    这里的NP其实是Non-deterministic Polynomial的缩写,即多项式复杂程度的非确定性问题,NP完全问题有时也会简称为NP-C问题。与此概念相关的还有P类问题、NP类问题等。要理解什么是NP完全问题,首先得从P类问题开始理解。

    所有可以在多项式时间内求解的判定问题构成P类问题

    判定问题是指回答结果输出为YesNo的问题,比如:3233是否可以写成两个大于1的数字的乘积?是否存在一条路线有且仅有一次的走过七桥问题的每一座桥?

    在设计程序时,我们经常需要评估这个程序的时间复杂度,即衡量当问题规模变大后,程序执行所需的时间增长会有多快。如O(1)表示常数级别,即不管问题的规模变大多少倍,所耗的时间不会改变;O(N2)表示平方级别,即当问题规模增大至2倍时,所花费的时间则放大至4倍;O(2N)表示指数级别,即当问题规模倍数扩大时,所用时间会呈指数放大。

    多项式时间则是指O(1)、O(logN)、O(N2)等这类可用多项式表示的时间复杂度,通常我们认为计算机可解决的问题只限于多项式时间内。而O(2N)、O(N!)这类非多项式级别的问题,其复杂度往往已经到了计算机都接受不了的程度。

    所有非确定性多项式时间内可解的判定问题构成NP类问题

    NP类问题将问题分为求解和验证两个阶段,问题的求解是非确定性的,无法在多项式时间内得到答案,而问题的验证却是确定的,能够在多项式时间里确定结果。

    比如:是否存在一个公式可以计算下一个质数是多少?这个问题的答案目前是无法直接计算出来的,但是如果某人给出了一个公式,我们却可以在多项式时间里对这个公式进行验证。

    NP中的一类比较特殊的问题,这类问题中每个问题的复杂度与整个类的复杂度有关联性,假如其中任意一个问题在多项式时间内可解的,则这一类问题都是多项式时间可解。这些问题被称为NP完全问题

    可以说NP完全问题是NP类问题的一种特殊情况,总结这几类问题的特点,可参考如下这个表格:

    问题类型是否能在多项式时间内求解是否能在多项式时间内验证
    P
    NP 是 or 否
    NP-C 未知

    注:表格中的问题类型的困难程度依次递增

    由表可知,NP类问题是否能在多项式时间内求解,其答案并不明确,如果回答为「是」,岂不是跟P类问题一样了?值得一题的是,P=NP?是千禧七大难题的首个难题,是一个价值百万美元的问题,这个问题本质是求证:能用多项式时间验证解的问题是否内在多项式时间内找出解。

    决策树的NP完全问题

    在决策树算法中,寻找最优决策树是一个NP完全问题。决策树的这一特点,说明我们无法利用计算机在多项式时间内,找出全局最优的解。

    也正因为如此,大多数决策树算法都采用启发式的算法,如贪心算法,来指导对假设空间的搜索。可以说,决策树最后的结果,是在每一步、每一个节点上做的局部最优选择。决策树得到的结果,是没法保证为全局最优的。


    ----------------------------------------------------------------------------------------
    作者:littlehei
    链接:https://www.jianshu.com/p/dcb0b52f4935
    来源:简书

    NP完全问题,是世界七大数学难题之一,排在百万美元大奖的首位,够诱惑力吧!咋不求得奖只需要了解了解它是什么就可以了。

         什么是NP完全问题,NP=Non-deterministic Polynomial,也就是多项式复杂程度的非确定性问题, 是不是看汉语翻译一下子给懵了。没事,我们慢慢来,要了解NP问题,我们先从P问题开始,P就是Polynomial(多项式)的意思。P类问题就是所有复杂度为多项式时间的问题的集合。时间复杂度了解吧,我不多讲;多项式就是n^k+n^(k-1)+……等等其中k为任意整数(一般不会很大)。这个数看起来很大,其实人类计算机相对都能接受。就怕遇到指数方增长的问题。

          接下来我们探讨非确定性问题。什么是非确定性问题呢?有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。再比如,大的合数分解质因数的问题,有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?也没有这样的公式。这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式时间内算出来,就叫做多项式非确定性问题。而如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题。

        完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。经典的NP问题有:梵塔问题,推销员旅行问题等。

        总之理解一句:NP完全问题就是 NP=P?的问题。 
    ————————————————
    版权声明:本文为CSDN博主「xueyong4712816」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xueyong4712816/article/details/6509592

  • 相关阅读:
    基于python的知乎开源爬虫 zhihu_oauth使用介绍
    python scrapy 抓取脚本之家文章(scrapy 入门使用简介)
    模拟退火算法(SA)求解TSP 问题(C语言实现)
    遗传算法的C语言实现(二)-----以求解TSP问题为例
    遗传算法的C语言实现(一):以非线性函数求极值为例
    C语言实现粒子群算法(PSO)二
    C语言实现粒子群算法(PSO)一
    python wordcloud 对电影《我不是潘金莲》制作词云
    svn更新失败,解决
    java发送邮箱验证码
  • 原文地址:https://www.cnblogs.com/liyuewdsgame/p/13277350.html
Copyright © 2020-2023  润新知