精华内容
下载资源
问答
  • NP难问题求解综述
    万次阅读
    2020-09-29 05:34:14

     

    摘要:定义NP问题及P类问题,并介绍一些常见的NP问题,以及NP问题的一些求解方法,最后最NP问题求解的发展方向做一些展望。 

    关键词:NP难问题 P类问题 算法 最优化问题

    正文:

    一.NP难问题及P类问题

    为了解释NP难问题及P类问题,先介绍确定性算法和非确定性算法这两个概念,设A是求解问题Π的一个算法,如果在算法的整个执行过程中,每一步只有一个确定的选择,则称算法A是确定性(Determinism)算法。设A是求解问题Π的一个算法,如果算法A以如下猜测并验证的方式工作,就称算法A是非确定性(Nondeterminism)算法:(1)猜测阶段:在这个阶段,对问题的输入实例产生一个任意字符串y,在算法的每一次运行时,串y的值可能不同,因此,猜测以一种非确定的形式工作。(2)验证阶段:在这个阶段,用一个确定性算法验证:① 检查在猜测阶段产生的串y是否是合适的形式,如果不是,则算法停下来并得到no;② 如果串y是合适的形式,则验证它是否是问题的解,如果是,则算法停下来并得到yes,否则算法停下来并得到no。

    什么是NP难问题,如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n的实例,能够以O(nk)的时间运行一个非确定性算法,得到yes或no的答案,则该判定问题Π是一个 NP 类(Nondeterministic Polynomial)问题

    令Π是一个判定问题,如果对于NP类问题中的每一个问题Π',都有Π'∝pΠ,则称判定问题Π是一个NP难问题

    什么是P类问题,如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n的实例,能够以O(nk)的时间运行一个确定性算法,得到yes或no的答案,则该判定问题Π是一个 P 类(Polynomial)问题。所有易解问题都是P类问题。

    P类问题和NP类问题的主要差别:P类问题可以用多项式时间的确定性算法来进行判定或求解;NP类问题可以用多项式时间的非确定性算法来进行判定或求解。

     

    二.常见的NP类问题

    上面介绍了什么是NP问题,下面我将介绍我查阅到的一些常见的NP问题,他们同时也是著名的NP问题。

    ①图着色问题 按图中所示方式将16条边着色,那么不管你从哪里出发,按照“蓝红红蓝红红蓝红红”的路线走9步,你最后一定达到黄色顶点。路线着色定理就是说在满足一定条件的有向图中,这样的着色方式一定存在。严格的数学描述如下。我们首先来定义同步着色。G是一个有限有向图并且G的每个顶点的出度都是k。G的一个同步着色满足以下两个条件:1)G的每个顶点有且只有一条出边被染成了1到k之间的某种颜色;2)G的每个顶点都对应一种走法,不管你从哪里出发,按该走法走,最后都结束在该顶点。有向图G存在同步着

      

    色的必要条件是G是强连通而且是非周期的。一个有向图是非周期的是指该图中包含的所有环的长度没有大于1的公约数。路线着色定理这两个条件(强连通和是非周期)也是充分的。也就是说,有向图G存在同步着色当且仅当G是强连通而且是非周期的。

    ②哈密顿回路问题:天文学家哈密顿(William Rowan Hamilton) 提出,在一个有多个城市的地图网络中, 寻找一条从给定的起点到给定的终点沿途恰好经过所有其他城市一次的路径。这个问题和著名的过桥问题的不同之处在于,某些城市之间的旅行不一定是双向的。比如A→B,但B→A是不允许的。换一种说法,对于一个给定的网络,确定起点和终点后,如果存在一条路径,穿过这个网络,我们就说这个网络存在哈密顿路径。哈密顿路径问题在上世纪七十年代初,终于被证明是“NP完备”的。据说具有这样性质的问题,难于找到一个有效的算法。实际上对于某些顶点数不到100的网络,利用现有最好的算法和计算机也需要很长的时间(可能要几百年之久)才能确定其是否存在一条这样的路径。

    ③TSP问题:旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP问题是一个组合优化问题。该问题可以被证明具有NPC计算复杂性。

    上面三个即是非常著名的NP问题,也是比较常见的NP问题。它们的求解算法非常复杂,要寻找到一个最优算法需要花费很长的时间,但正因为这些问题的复杂性,使得它们备受人们的关注。当然NP问题本身也是世界七大数学难题之一。

     

    三.求解NP类问题的常见方法

    对于那些棘手的NP问题,我们也并非束手无策,有一些方法可供我们去探究NP问题。

    ①近似算法:所有已知的解决NP难问题算法都有指数型运行时间。但是,如果我们要找一个“好”解而非最优解,有时候多项式算法是存在的。给定一个最小化问题和一个近似算法,我们按照如下方法评价算法:首先给出最优解的一个下界,然后把算法的运行结果与这个下界进行比较。对于最大化问题,先给出一个上界然后把算法的运行结果与这个上界比较。近似算法比较经典的问题包括:最小顶点覆盖、旅行售货员问题、集合覆盖等。

    ②概率算法:很多算法的每一个计算步骤都是固定的,而概率算法允许算法在执行的过程中随机选择下一个计算步骤。许多情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时。因此概率算法可在很大程度上降低算法的复杂度。概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。这两次求解问题所需的时间甚至所得到的结果可能会有相当大的差别。一般情况下,可将概率算法大致分为四类:数值概率算法,蒙特卡罗(Monte Carlo)算法,拉斯维加斯(Las Vegas)算法和舍伍德(Sherwood)算法。

    ③并行计算:并行计算或称平行计算是相对于串行计算来说的。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程。为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。并行计算的主要目的是快速解决大型且复杂的计算问题。此外还包括:利用非本地资源,节约成本 ― 使用多个“廉价”计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制。包含以下三个特征:1,将工作分离成离散部分,有助于同时解决;2,随时并及时地执行多个程序指令;,3,

     

     

    多计算资源下解决问题的耗时要少于单个计算资源下的耗时。

    ④智能算法:在工程实践中,经常会接触到一些比较“新颖”的算法或理论,比如模拟退火,遗传算法,禁忌搜索,神经网络等。这些算法或理论都有一些共同的特性(比如模拟自然过程),通称为“智能算法”。智能优化算法要解决的一般是最优化问题。最优化问题可以分为(1)求解一个函数中,使得函数值最小的自变量取值的函数优化问题和(2)在一个解空间里面,寻找最优解,使目标函数值最小的组合优化问题。典型的组合优化问题有:旅行商问题(Traveling Salesman Problem,TSP),加工调度问题(Scheduling Problem),0-1背包问题(Knapsack Problem),以及装箱问题(Bin Packing Problem)等。优化算法有很多,经典算法包括:有线性规划,动态规划等;改进型局部搜索算法包括爬山法,最速下降法等,本文介绍的模拟退火、遗传算法以及禁忌搜索称作指导性搜索法。而神经网络,混沌搜索则属于系统动态演化方法。

     

    四.NP问题求解未来发展方向

    NP问题是世界七大数学难题之一,在名称上就有别于其它六个问题,也是其中唯一一个不是用人名来命名的数学难题。因为它不是某个数学家火花一闪、灵机一动所提出的理论或是猜测,而是一个非常古老的问题,涉及到了最基础的数学理论,并且经过了几百年来无数数学家们持之以恒的努力,直到现在仍然是一个没有得到解决的公开问题。

    NP问题排在世界七大数学难题之首,七个问题都是经过美国克雷数学研究所的科学顾问委员会精心挑选出来的,这些问题的获解上哪怕是获得了些许的进展,就将对数学理论的发展和应用产生极其巨大的推动作用。研究这些“千年大奖问题”已经成为世界数学界的热点,不少国家的数学家正在组织联合攻关,同时它们也是任何一个数学工作者都梦寐以求予以摘取的数学皇冠上的耀眼明珠。可以预期,这些“千年大奖问题”将会改变新世纪数学发展的历史进程。因此NP问题的求解将会不断地被注视着,当然如果有一天它被人求解出来,那么我们身边的许多问题将会被解决。

     

    参考文献:

    [1] 黄文奇 许如初. 《近世计算理论导引:NP难度问题的背景、前景及其求解算法研究》. 科学出版社 2004.  87

    [2] 陈志平 徐宗本. 《计算机数学:计算复杂性理论与NPC、NP难问题的求解》 科学出版社.  2001.  292

    更多相关内容
  • NP难问题

    2020-04-28 23:03:53
    NP难问题求解综述 彭茗菁 2008221104210521 [摘要]: 上世纪70年代开始,诞生了一种许多数学家及电子计算器学家所关心的大问题NP难问题, “P=NP?”这个问题,作为理论计算机科学的核心问题,其声名早...

    NP难问题求解综述

    彭茗菁

    2008221104210521

    [摘要]: 上世纪70年代开始,诞生了一种许多数学家及电子计算器学家所关心的大问题—NP难问题, “P=NP?”这个问题,作为理论计算机科学的核心问题,其声名早已经超越了这个领域。它是Clay研究所的七个百万美元大奖问题之一,在2006国际数学家大会上,它是某个1小时讲座的主题。

    [关键词]: NP难问题,NP完全问题,计算复杂性,多项式函数

     

    NP难问题,不确定性图灵机在P时间内能解决的问题,是世界七大数学难题之一。 NP问题排在百万美元大奖的首位,足见他的显赫地位和无穷魅力。NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。

    一、NP难问题和P类问题的介绍

       NP问题属于“计算复杂性”研究的课题。计算复杂性通俗来说就是用计算机求解问题的难易程度。其度量标准:一是计算所需的步数或指令条数(即时间复杂度),二是计算所需的存储单元数量(即空间复杂度)。它不是对一个具体问题去研究它的计算复杂性,而是依据难度去研究各种计算问题之间的联系,按复杂性把问题分成不同的类,即复杂性类。

       如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。通俗的称所有复杂度为多项式时间的问题为易解的问题类否则为难解的问题。

    然而有些问题很难找到多项式时间的算法(或许根本不存在),但是如果给了该问题的一个答案,可以在多项式时间内判断这个答案是否正确,这种可以在多项式时间内验证一个解是否正确的问题称为NP问题,亦称为易验证问题类。

       1971年 古克 (Stephen A. Cook) 发表了《The Complexity of Theorem Proving Procedures》才把 P 之外约问题归成了三大类, 即 NP, NP-complete 及 NP-hard。简单地说,存在多项式时间的算法的一类问题,称之为P类问题;而像梵塔问题,推销员旅行问题等问题,至今没有找到多项式时间算法解的一类问题,称之为NP类问题。

    二、几个常见的NP问题

       

    问题1:售货员旅行问题

    NP 问题的代表问题之一是售货员旅行问题 (traveling salesman problem)。有一个售货员要开汽车到 n 个指定的城市去推销货物,他必须经过全部的 n 个城。现在他有一个有此 n 城的地图及各城之间的公路距离,试问他应如何取最短的行程从家中出发再到家中?

         

     

    图1 售货员之地图,A,B,C,… 表城名,数字表两城之间之里数。 

       

    如图1中,A,B,C,…,G 表示 7 个城市,而售货员要从 A 城出发再回到 A 城并访问 B,C,…,G,所有的城,一个可行的方法是

    A->B->C->D->E->F->G->A

       

    加起来的结果路径总长225里。但是否存在一个更短的路径呢?目前的方法接近一个一个的排着试,还没有找到更好可以寻得最短路径的方法。对七个城而言,共有 6!=720 个排法,尚不算难,但若有 20 个城,则排法就有 19! 种。因

                               

                               

    在排列组合里 n! 写起来轻松,但 1.21 x 1017 是一个大得不得了的数字,若每秒钟排一次,要排 3.84 x 109 年(一年约为 3.15 x 107 秒), 即使使用计算器,每秒排一百万次(不容易做到)也得重做三千年才能找到答案。「生也有涯,知也无涯」,想不到区区二十个城,要三十个世纪才能找到答案。

    问题2:背袋问题(甲)

    有物体 n 个,各重 w1,w2,…,wn,今欲将它们分为二袋, 试问如何分法可使两袋之重要最为接近。 (不妨假定 wi 皆为正整数,这并未失去一般性。) 

    问题3:包装问题

    有 n 个各别重量小于 1 公斤的物品及足够可以装 1 公斤东西的盒子,今将物品装于盒子之中,多个物品可装于一盒,但任何一盒不得重于 1 公斤,试求最小的盒子数。 

    问题4:舞伴问题

    今有 n 个男孩子与 n 个女孩子参加舞会,每个男孩与女孩均交给主持一个名单, 写上他(她)中意的舞伴(至少一人,但可以多于一人)。试问主持人在收到名单后,是否可以分成 n 对,使每人均得到他(她)所喜欢的舞伴。 

    问题5:库存问题

    某仓库有 D 个存仓,排成一列,今有 n 批货物,各可占有一个或多个存仓,并已知各批物品存入与提出之日期。试问可否将各货物存入库时不发生存仓不够的困难且同一批货物若需一个以上存仓时,其存仓必须相邻。

      问题6:

    (甲) 给定一 n 位正整数 a,试问其是否为质数? 

    (乙) 给定一 n 位正整数 a,试问是否存在 m,n >1 且 a=mn? 

    问题7:分丛问题

    已知空间 n 个点,并假定各点之间之距离为正整数,又给定两正整数 K 与 B, 问是否可将此 n 点分成小于 K 个不重合的子集,使得在同一子集内之任意二点距离均不大于 B? 

       

    三、目前求解NP难问题的常见方法

    (1) 特殊情形:仔细分析所遇到的NP完全问题,研究具体实例的特殊性,考虑是否必须在最一般的意义来解此问题。也许可利用具体实例的特殊性,在特殊条件下解此问题。许多NP完全问题在特殊情形下可以找到多项式时间算法。例如求图G的最大团问题(典型描述,给定一个图G,要求G的最大团,团是指G的一个完全子团,该子团不包含在任何其他的完全子图当中,最大团指其中包含顶点最多的团)是NP完全问题,而在图G是平面图的情形下,该问题是多项式时间可解的。

    (2) 动态规划和分枝限界方法:对于许多NP完全问题来说,用动态规划和分枝限界方法常可得到较高的解题效率。

    (3) 概率分析:对于许多NP完全问题,其困难实例出现的概率很小,因此对这类NP完全问题常可设计出平均性能很好的算法。

    (4) 近似算法:通常可以设计出解NP完全问题的多项式时间近似算法,以近似解来代替最优解。

           例1

    在第二章的问题3,包装问题中,若采取「能装就装」的办法,即现有的盒子若可以装得下,就不用新盒子,则此法所需用之盒子数 k1 与最可能少的盒子数 k0 满足 。 

    证明

    今令 n 个物品之重为 w1,w2,…,wn 公斤,因每个盒子只可以装1公斤,故 

    另一方面,「能装就装」法不可能有两个以上的盒子同时少于 1/2公斤,故 


    本例得证。 

    这个问题的结果是说,我们大约可以用「能装就装」法做得最好情形的一半好。 经过较复杂的证明,Johnson 在1974年证得,当 n 很大时, 

    (i)

    ,且存在一种情形能产生。 

    (ii)

    也就是用「能装就装」法不会坏到 70% 以上,但可以坏到多用了 70% 的盒子。

    例2

    第二章问题1的售货员旅行问题的一个直观走法是先访问最近那个尚未访问过的城,称为「先访近城」法,以图1为例,其走法为 

    A->B->C->D->E->F->G->A

    Rosenkrantz 等在1977年证明这并不是一个很理想的走法,他们证出若各城间的距离满足三角不等式 7 ,则「先访近城」法所走的总程 D1 与最短路径 D0 之关系为 


    且当 n 很大时,可以有一种情形使得 

    上式中之 [x] 表示大于 x 之最小整数,例如 [5]=5, [2.5]=3。 因 当 n 大时可以很大,故 D1 可与 D0 相差非常之大,但在同一篇论文之中,Rosenkrantz 等证明另一种复杂的「直观」走法可以达到D1 ≤ 2D0之地步。 

    在上面的定理中,三角不等式的条件很重要,若城之距离无此关系存在时,Sahni 与Gonzalez 在1976年证得:若 P≠NP,则不可能存在一个有限的 m,及一个 O(nk) 计算量的走法,能使其全程长 D1 在任何 n 时满足 

    D1 ≤  mD0


    即上式中 m 非等于无限大不可,亦即所有 O(nk) 的做法都不很好。

    (5) 启发式算法:在用别的方法都不能奏效时,也可以采用启发式算法来解NP完全问题。这类方法根据具体问题的启发式搜索策略来求问题的解,在实际使用时可能很有效,但有时很难说清它的道理。

    四、NP问题求解的未来发展方向

       人们在七十年代开始对NP完全问题的研究主要是横向发展,也就是以许多不同的计算模型来分析难解问题的本质。这些新的计算模型包括了平行计算模型、概率计算模型、布尔线路、判断树、平均复杂性、交互证明系统以及程式长度复杂性等等。对这些新的计算模型的研究一方面使我们对难解问题有了更深一层的认识,一方面也产生了一些预想不到的应用。最显著的一个例子就是计算密码学的革命性突破:基于NP问题的公钥密码体系。另一个有名的例子是线性规划的多项式时间解的发现。

       到了八十年代中,对NP完全问题的研究有了纵向的突破,在许多表面看来并不相关的计算模型之间发现了深刻的刻划关系。这些刻划关系不但解决了几个令人困扰多年的未解问题,同时也刺激了其它相关领域的发展。其中之一是对线路复杂性的研究发现了一些问题在某种有限制的线路模型中必有指数下界。这些结果使用了组合数学与概率方法等新的数学工具,并且解决了一个有名的有关多项式分层的未解问题。另一个更重大的结果是以概率可验证明对NP类的刻划。这个结果来自于对交互证明系统这个概念的扩展,并且使用了线性代数与编码理论等数学证明技巧。

       P和NP是理论计算机科学的核心问题。从数学的角度来说,它和其他历史上有名的数学问题一样,给与人们一个智力上重大的挑战。而更为重要的是,在无数与计算有关的的学术领域中,NP完全问题以各种不同形式层出不穷。因此,这并不是一个纯粹的与世独立的智力游戏,而是对计算机科学有全面影响力的问题。 

    计算机与社会科学、自然科学和思维科学等许多学科相互渗透和交叉,形成了许多新的边缘学科和新学科群,正在改变许多传统学科。分子与量子计算机的深入研究和技术难关的攻克,并最终投入运算,必将在政治、经济、军事、文化乃至人类生活的各个方面产生深刻的影响。 

    最近美国南加州大学Adleman博士应用基于DNA分子计算技术的生物实验方法有效地求解了“哈密顿路径问题”——目前计算机无法解决的NP完备问题。生物分子计算机的研制是基于生物分子的信息处理技术,即生物材料的信息处理功能与生物分子的计算技术。 

    能以叠加方式存贮信息的量子计算可生成一些真正的随机数,这是传统计算机无能为力的。数学上已证明量子计算可大大加快因式分解的速度。这一证据也吸引人们将注意力集中在根据量子力学原理制造量子计算机上。 

    计算能力超越图灵机、突破现有的体系结构是计算业界的梦想,不断有报道在DNA计算模型上找到了某NP问题的多项式算法,这应该意味着基于DNA计算模型的P类和NP类的划分会和经典模型有所不同。但是我们仍然希望量子计算能够突破图灵模式,给计算机科学带来一个崭新的世界。

    展开全文
  • P问题NP问题、NPC问题以及NP-hard问题理解与区分

    这或许是众多OIer最大的误区之一。
    你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看到,把NP问题当成是NPC问题是一个多大的错误。
    还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O(n^3+n^2)的复杂度也就是O(n^3)的复杂度。因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。
    容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
    自然地,人们会想到一个问题:会不会所有的问题都可以找到复杂度为多项式级的算法呢?很遗憾,答案是否定的。有些问题甚至根本不可能找到一个正确的算法来,这称之为“不可解问题”(Undecidable Decision Problem)。The Halting Problem就是一个著名的不可解问题,在我的MSN Space上有过专门的介绍和证明。再比如,输出从1到n这n个数的全排列。不管你用什么方法,你的复杂度都是阶乘级,因为你总得用阶乘级的时间打印出结果来。有人说,这样的“问题”不是一个“正规”的问题,正规的问题是让程序解决一个问题,输出一个“YES”或“NO”(这被称为判定性问题),或者一个什么什么的最优值(这被称为最优化问题)。那么,根据这个定义,我也能举出一个不大可能会有多项式级算法的问题来:Hamilton回路。问题是这样的:给你一个图,问你能否找到一条经过每个顶点一次且恰好一次(不遗漏也不重复)最后又走回来的路(满足这个条件的路径叫做Hamilton回路)。这个问题现在还没有找到多项式级的算法。事实上,这个问题就是我们后面要说的NPC问题。
    下面引入P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。P是英文单词多项式的第一个字母。哪些问题是P类问题呢?通常NOI和NOIP不会出不属于P类问题的题目。我们常见到的一些信息奥赛的题目都是P问题。道理很简单,一个用穷举换来的非多项式级时间的超时程序不会涵盖任何有价值的算法。
    接下来引入NP问题的概念。这个就有点难理解了,或者说容易理解错误。在这里强调(回到我竭力想澄清的误区上),NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。比方说,我RP很好,在程序中需要枚举时,我可以一猜一个准。现在某人拿到了一个求最短路径的问题,问从起点到终点是否有一条小于100个单位长度的路线。它根据数据画好了图,但怎么也算不出来,于是来问我:你看怎么选条路走得最少?我说,我RP很好,肯定能随便给你指条很短的路出来。然后我就胡乱画了几条线,说就这条吧。那人按我指的这条把权值加起来一看,嘿,神了,路径长度98,比100小。于是答案出来了,存在比100小的路径。别人会问他这题怎么做出来的,他就可以说,因为我找到了一个比100小的解。在这个题中,找一个解很困难,但验证一个解很容易。验证一个解只需要O(n)的时间复杂度,也就是说我可以花O(n)的时间把我猜的路径的长度加出来。那么,只要我RP好,猜得准,我一定能在多项式的时间里解决这个问题。我猜到的方案总是最优的,不满足题意的方案也不会来骗我去选它。这就是NP问题。当然有不是NP问题的问题,即你猜到了解但是没用,因为你不能在多项式的时间里去验证它。下面我要举的例子是一个经典的例子,它指出了一个目前还没有办法在多项式的时间里验证一个解的问题。很显然,前面所说的Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点非常容易。但我要把问题换成这样:试问一个图中是否不存在Hamilton回路。这样问题就没法在多项式的时间里进行验证了,因为除非你试过所有的路,否则你不敢断定它“没有Hamilton回路”。
    之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。相信读者很快明白,信息学中的号称最困难的问题——“NP问题”,实际上是在探讨NP问题与P类问题的关系。
    很显然,所有的P类问题都是NP问题。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。关键是,人们想知道,是否所有的NP问题都是P类问题。我们可以再用集合的观点来说明。如果把所有P类问题归为一个集合P中,把所有NP问题划进另一个集合NP中,那么,显然有P属于NP。现在,所有对NP问题的研究都集中在一个问题上,即究竟是否有P=NP?通常所谓的“NP问题”,其实就一句话:证明或推翻P=NP。
    NP问题一直都是信息学的巅峰。巅峰,意即很引人注目但难以解决。在信息学研究中,这是一个耗费了很多时间和精力也没有解决的终极问题,好比物理学中的大统一和数学中的歌德巴赫猜想等。
    目前为止这个问题还“啃不动”。但是,一个总的趋势、一个大方向是有的。人们普遍认为,P=NP不成立,也就是说,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题,也即所谓的NPC问题。C是英文单词“完全”的第一个字母。正是NPC问题的存在,使人们相信P≠NP。下文将花大量篇幅介绍NPC问题,你从中可以体会到NPC问题使P=NP变得多么不可思议。
    为了说明NPC问题,我们先引入一个概念——约化(Reducibility,有的资料上叫“归约”)。
    简单地说,一个问题A可以约化为问题B的含义即是,可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。《算法导论》上举了这么一个例子。比如说,现在有两个问题:求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以约化为后者,意即知道如何解一个一元二次方程那么一定能解出一元一次方程。我们可以写出两个程序分别对应两个问题,那么我们能找到一个“规则”,按照这个规则把解一元一次方程程序的输入数据变一下,用在解一元二次方程的程序上,两个程序总能得到一样的结果。这个规则即是:两个方程的对应项系数不变,一元二次方程的二次项系数为0。按照这个规则把前一个问题转换成后一个问题,两个问题就等价了。同样地,我们可以说,Hamilton回路可以约化为TSP问题(Travelling Salesman Problem,旅行商问题):在Hamilton回路问题中,两点相连即这两点距离为0,两点不直接相连则令其距离为1,于是问题转化为在TSP问题中,是否存在一条长为0的路径。Hamilton回路存在当且仅当TSP问题中存在长为0的回路。
    “问题A可约化为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。这很容易理解。既然问题A能用问题B来解决,倘若B的时间复杂度比A的时间复杂度还低了,那A的算法就可以改进为B的算法,两者的时间复杂度还是相同。正如解一元二次方程比解一元一次方程难,因为解决前者的方法可以用来解决后者。
    很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。这个道理非常简单,就不必阐述了。
    现在再来说一下约化的标准概念就不难理解了:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。
    当然,我们所说的“可约化”是指的可“多项式地”约化(Polynomial-time Reducible),即变换输入的方法是能在多项式的时间里完成的。约化的过程只有用多项式的时间完成才有意义。
    好了,从约化的定义中我们看到,一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。再回想前面讲的P和NP问题,联想起约化的传递性,自然地,我们会想问,如果不断地约化上去,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC问题,也就是NP-完全问题。NPC问题的出现使整个NP问题的研究得到了飞跃式的发展。我们有理由相信,NPC问题是最复杂的问题。再次回到全文开头,我们可以看到,人们想表达一个问题不存在多项式的高效算法时应该说它“属于NPC问题”。此时,我的目的终于达到了,我已经把NP问题和NPC问题区别开了。到此为止,本文已经写了近5000字了,我佩服你还能看到这里来,同时也佩服一下自己能写到这里来。
    NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。证明一个问题是NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍),这样就可以说它是NPC问题了。
    既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P了。因此,给NPC找一个多项式算法太不可思议了。因此,前文才说,“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

    顺便讲一下NP-Hard问题。NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比NPC问题的范围广)。NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。
    不要以为NPC问题是一纸空谈。NPC问题是存在的。确实有这么一个非常具体的问题属于NPC问题。下文即将介绍它。
    下文即将介绍逻辑电路问题。这是第一个NPC问题。其它的NPC问题都是由这个问题约化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。
    逻辑电路问题是指的这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。
    什么叫做逻辑电路呢?一个逻辑电路由若干个输入,一个输出,若干“逻辑门”和密密麻麻的线组成。看下面一例,不需要解释你马上就明白了。
    

    ┌───┐
    │ 输入1├─→┐ ┌──┐
    └───┘ └─→┤ │
    │ OR ├→─┐
    ┌───┐ ┌─→┤ │ │ ┌──┐
    │ 输入2├─→┤ └──┘ └─→┤ │
    └───┘ │ ┌─→┤AND ├──→输出
    └────────┘ ┌→┤ │
    ┌───┐ ┌──┐ │ └──┘
    │ 输入3├─→┤ NOT├─→────-┘
    └───┘ └──┘
    这是个较简单的逻辑电路,当输入1、输入2、输入3分别为True、True、False或False、True、False时,输出为True。
    有输出无论如何都不可能为True的逻辑电路吗?有。下面就是一个简单的例子。
    ┌───┐
    │输入1 ├→─┐ ┌──┐
    └───┘ └─→┤ │
    │AND ├─→┐
    ┌─→┤ │ │
    │ └──┘ │ ┌──┐
    │ └→┤ │
    ┌───┐ │ │AND ├─→输出
    │输入2 ├→─┤ ┌──┐ ┌→┤ │
    └───┘ └→┤NOT ├→──┘ └──┘
    └──┘
    上面这个逻辑电路中,无论输入是什么,输出都是False。我们就说,这个逻辑电路不存在使输出为True的一组输入。
    回到上文,给定一个逻辑电路,问是否存在一种输入使输出为True,这即逻辑电路问题。
    逻辑电路问题属于NPC问题。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(不要以为NP问题有无穷多个将给证明造成不可逾越的困难)。证明过程相当复杂,其大概意思是说任意一个NP问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些0和1的运算),因此对于一个NP问题来说,问题转化为了求出满足结果为True的一个输入(即一个可行解)。
    有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton回路成了NPC问题,TSP问题也成了NPC问题。现在被证明是NPC问题的有很多,任何一个找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P=NP变得难以置信。P=NP问题还有许多有趣的东西,有待大家自己进一步的挖掘。攀登这个信息学的巅峰是我们这一代的终极目标。现在我们需要做的,至少是不要把概念弄混淆了。


    1。有解但无算法的问题:
    比如圆周率Pi的小数点后面是否有连续的100万个0。因为Pi是一个客观存在的实数,所以Pi的值是确定的,因此这个问题的解也是存在的。要么是yes,要么是no,虽然我们不知道他到底是什么,但他是客观存在的,不随时间改变,不随人的认识而改变。但是没有算法可以计算这个问题的答案。当然,可以用一种苯办法来解决这个问题,就是不停地计算Pi的小数点后面的值,如果发现了有连续的100万个0,则这个问题的答案就是yes,但是如果没有发现,我们必须一直计算下去,而且永远无法停止~~,所以这种苯办法根本称不上是算法,因为他不满足算法在有限步内终止的条件。所以这个问题是没有算法的(至少目前认为如此,也许以后可以从数论中找到某种方法来求出小数点后面是否有连续的k个0,或从概率的角度计算Pi的小数点后面的值的分布等等等等)。

    2.无解也无算法的问题:
    例如,给定任意一个命题,是否存在一种算法判断这个命题是真是假?这就是著名的图灵停机问题。如果存在这个算法,那么我们只要找到这个算法就可以一劳永逸了,以后无论拿到什么新的命题,都可以用这个算法来验证一下,立刻就知道该命题是真是假,这样我们就掌握了整个宇宙的终极真理:)。但是图灵已经证明了这样的算法是不存在的,这个问题也是无解的。(证明中主要利用了康托尔对角线删除法,就是用来证明实数和自然数不等势的那种对角线删除法)

    3。可计算与不可计算:
    根据图灵-丘奇论题,:
    1。可计算的问题就是能被图灵机计算的问题;(图灵的定义)
    2。可计算的问题就是使用lamda演算系统可以计算的问题;(丘奇的定义)

    图灵丘奇论题与其说是定理,不如说是算法的定义。因为算法本身就是一个不精确的概念,到底什么是算法,以前一直没有确切的定义。而图灵-丘奇论题则从数学上给出了算法的形式定义。

    图灵说:所有的图灵机能计算的问题都是有算法的(也就是可计算的),所有有算法的问题都可以用图灵机计算。这个论题本身是无法证明的,它就像物理中的光速不变定律一样,是一条自然定律,不能加以逻辑上的证明,只能用实验来检验。而目前来看,图灵命题也和光速不变一样,经得住历史和时间的检验,现在即使发展到了量子计算机,还是没有摆脱图灵机的约束,量子计算机上可计算的问题也是普通的图灵机上可计算的问题,只不过计算效率不同而已。

    不可计算的问题的两个例子前面已经说过了,一个是Pi的例子,另一个是图灵停机问题。

    4。可证明性与不可证明性
    在一个公里系统中,有若干条公里,有一些推导规则,在系统中进行定理的证明,就是从公理出发,利用这些规则推导出新的定理。如果最终能得到我们需要证明的命题,则该命题为真;如果最终得到了和我们需要证明的命题相违背的命题,则我们要证明的命题为假。

    如果把系统中所有的定理看作图中的节点,假如从定理i1,i2,..ik根据系统的规则可以推导出定理j,则从i1,i2,…ik分别连接一条到j的有向边。这样整个公理系统构造成了一个有向图。定理的证明过程事实上是在公理系统中从公理表示的节点出发,构造一颗到达目标命题节点的“证明树”。因而定理的证明就和图论中的路经搜索类似(BTW,这就是定理自动化证明的基本原理)。

    超级天才歌德尔在25岁的时候提出了著名的歌德尔不完备性定理。该定理指出:在任何一个公理化系统中,要么存在着矛盾,这个系统是不完备的。
    所谓存在着矛盾,就是可以证明命题A成立,也可以证明命题A的否命题成立,这就自相矛盾了。
    所谓不完备,是指系统中存在着一些命题,无法证明它成立,也无法证明它不成立。这就好像在一个图中存在着某些孤立点,从基本的公理节点出发永远无法访问到这些孤立点。

    歌德尔在“不完备性定理”的证明过程中构造出了一个无法证明是真是伪的定理。具体说起来比较麻烦,我根据自己的理解将其简化为下述的简单形式:

    命题A = “命题A不成立”

    现在问命题A是否成立。如果命题A成立,则根据命题A的内容,命题A应该不成立;如果命题A不成立,则根据命题A的内容,命题A又应该成立。

    这个例子很不严谨,因为它事实上混淆了语法和语义层次。但我觉得这个例子可以作为歌德尔的例子的一个简化版本。歌德的那个例子要比这个严谨和复杂得多,但实质上是差不多的,也是利用了逻辑中的悖论。

    罗素等人所提倡的解决这种悖论的方法就是给谓词逻辑分层次,从而产生了一阶谓词逻辑、二阶谓词逻辑等。像上面的例子,罗素认为命题A的内容描述了命题A本身的性质,这就超出了命题A所能表达的范围,他认为这样的A不是合法的命题。

    【转自:http://www.matrix67.com/blog/archives/105 http://blog.csdn.net/dongwq/article/details/4305435

    展开全文
  • NP系列问题详解

    千次阅读 2020-12-06 23:57:28
    什么是NP问题?这个是我之前比较纠结的一个问题,一直没有搞清楚它的来龙去脉。直到看了《数学之美》附录中的介绍才清楚。要清楚地了解这个问题,得从怎么衡量计算量这个问题开始。现在基本每个学习计算机相关学科的...

    ​时间复杂度

    什么是NP问题?这个是我之前比较纠结的一个问题,一直没有搞清楚它的来龙去脉。直到看了《数学之美》附录中的介绍才清楚。要清楚地了解这个问题,得从怎么衡量计算量这个问题开始。现在基本每个学习计算机相关学科的同学都知道,衡量一个算法的计算量是用时间复杂度。现在看起来理所当然的事情,在计算机科学发展初期却是个大问题,因为没有衡量算法的标准,不同算法无法比较优劣。自从有了时间复杂度后,算法优劣可以很方便地衡量,也就鼓励学者们找出更多更好的算法,好的算法也可以得到最有效的利用。提出时间复杂度的学者也因此获得了诺贝尔奖。

     

    P问题

    自从用时间复杂度来衡量计算量后,学者们开始对现有的问题分类。有一类问题是能在多项式的时间内找到解的,这类问题学者们就把它叫作多项式问题,即P问题。P是多项式的英文单词polynomial的第一个字母。什么是多项式?我们来看一下维基百科上的定义:多项式是代数学中的基础概念,是由称为不定元的变量和称为系数的常数通过有限次加减法、乘法以及自然数幂次的乘方运算得到的代数表达式。例如X^2 - 3X + 4就是一个多项式。5^X + X 就不是一个多项式,因为有非自然数的幂次的乘方运算(5的X次方)。比如快速排序算法的时间复杂度是N*logN,属于多项式问题。

     

    NP问题

    现在区分出一类问题属于多项式问题,即P问题,那剩余的其它就是目前还不能在多项式的时间内找到解的问题, 这类问题统称为非多项式问题。非多项式问题需要的计算量非常大, 现有的计算能力不能有效地解决这些问题。于是很多学者就开始研究这些问题, 看能不能在多项式的时间内找到解。随着他们研究深入, 他们发现非多项式问题中有一类问题比较特殊,虽然这类问题还不确定能不能在多项式的时间内找到解,但是这类问题可以在多项式的时间内验证一个解是否正确。即,虽然不能在多项式时间内找到解,但可以在多项式时间内验证一个解是不是正确。这类问题就是NP问题(Non-deterministic Polynomial)。

     

    NPC问题

    学者们发现NP问题后又继续研究,然后他们发现一类特殊的NP问题。特殊在什么地方呢? 特殊在所有NP问题都可以在多项式时间内归约到它。他们称这类问题为NP-Complete问题,即NPC问题。NPC问题满足两个条件:首先它是NP问题,然后所有NP问题都能在多项式时间内归约到它。也就是说,如果能在多项式时间内找到一个NPC问题的解,也就相当于能在多项式时间内找到所有NP问题的解。从上可知,NPC问题也是NP问题中最难的问题。

     

    NP-Hard问题

    学者们还发现一类问题,所有NP问题都可以归约到它,但它不一定是NP问题,也就是说它们甚至不能在多项式时间内验证一个解是否正确。学者们把这类比NPC更难的问题,甚至不属于NP问题的这一类问题称为NP-Hard问题。

     

    P问题,NP问题,NPC问题以及NP-Hard问题的关系

    如下图所示,图的纵坐标是复杂度,越往上,复杂度越高。


     

     

    目前来说,P是否等价于NP,即能不能在多项式的时间内找到NP问题的解还没有定论。P是否等价于NP这个问题也是计算机科学界最经典,争论最多的问题之一。虽然目前主流认为P是NP的子集,但因为还没办法完全验证这一点,因此不能盖棺定论。据说清华大学的姚期智老师也在研究和探索P与NP的关系,在该问题的最前沿的研究也是各执一词,有兴趣的同学可以从通过下边链接查看姚期智老师的主页和历史上针对P是否等于NP的研究结论。

     

    姚期智老师的主页:http://iiis.tsinghua.edu.cn/yao/

    历史上针对P是否等于NP的研究结论:http://www.win.tue.nl/~gwoegi/P-versus-NP.htm

     

    了解P,NP, NPC, NP-Hard问题分类的意义

    当你思考怎么解决一个问题时发现你思考了很久,挠破了头皮也没想到高效办法的时候,你可以看看你思考的问题是不是属于NP问题。如果是属于NP问题或可以归约到NP问题,那你就应该重新认识这个问题的难度了,因为世界上最聪明的人都还没找到高效解决它的办法,所以你想不出来也就正常了。

     

    更多最新文章,请扫描下边二维码,关注公众号:学习者说

    公众号二维码

     

     

    展开全文
  • 浅谈P/NP问题

    万次阅读 2019-09-18 18:43:47
     NPC问题是在P问题NP问题上的一个重大进展,问题是,想要在NPC问题上找到一个多项式时间内的算法出奇地困难,倒人们甚至不相信存在这样的算法,就像孙悟空的“一窍通,百窍通”一样,反正我没见过谁能做到。...
  • NP问题

    2017-08-25 11:27:04
    I’m the Alpha and the Omega,the First and the Last,the Beginning and the End.你是一, 也是万! 是刹那, 也是永恒!...创世纪二零XX年, 历史揭开了新的篇章, 计算宇宙中的第一个人诞生了, 这是一个新的纪元
  • ===================引言====================== ...清华大学出版社,1999.》这本书的第1.5节系统的讲了NP,NPC,NP-hard,为了看明白还从一开就认真看,不过看了好久也是半知半解,想试着用通俗的语言来说
  • (2)NP问题是指可以在多项式的时间里验证一个解的问题NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。所有的P类问题都是NP问题...
  • 5 月 13 日,历史上的今天,NP 完备领域开山论文发表;Network General 公司成立;苹果推出了 System 7 操作系统。
  • NP难问题求解综述 彭茗菁 2008221104210521 [摘要]: 上世纪70年代开始,诞生了一种许多数学家及电子计算器学家所关心的大问题NP难问题, “P=NP?”这个问题,作为理论计算机科学的核心问题,其声名早已经...
  • 什么是P问题NP问题和NPC问题 这或许是众多OIer最大的误区之一。你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实...
  • 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并...
  • 算法中的NP问题

    千次阅读 2017-05-24 21:42:02
    在一个周六的晚上,你参加了一个盛大的晚会。由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。... 生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个
  • 来源:图灵人工智能转自 http://blog.sciencenet.cn/u/liuyu2205P vs NP世纪难题显示出在现有的计算机理论中存在着令人不安的困惑:一方面,书本中的NP...
  • 曾经虐了数学家几十年的NP问题现在终于能拿来利用了,数学家很开心,与此同时,无数个NP问题浮出水面,其中最经典的就是质因数分解问题,质因数分解的时间复杂度是一个指数,通常是O(e^n),指数是数学里的魔鬼,随着...
  • 计算理论初步:P vs NP 问题

    千次阅读 2016-04-10 11:34:40
    1.问题概述 P = NP? 这个问题,作为理论计算机科学的核心问题,其声名早已经超越了这个领域。它是Clay研究所的七个百万美元大奖问题之一,在2006国际数学家大会上,它是某个1小时讲座的主题。 要说起P和NP是什么...
  • 我们看到一个问题,经常会说:“这个没法做,是一个NP问题”,其实这句话是有问题的,我们并没有搞清楚NP问题和NPC问题,大部分情况下,我们想说的NP问题都是NPC问题NP问题并不是没法做,NPC才是。最近看到一篇...
  •  你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题...
  • [zz]澄清P问题NP问题、NPC问题的概念 这或许是众多OIer最大的误区之一。  你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说...
  • 可能与不可能的边界:P/NP问题趣史

    千次阅读 2017-07-18 00:25:02
    作者:Lance Fortnow ...人们给这些问题起了一个有些奇怪的名字:P/NP问题。 P/NP是克雷数学研究所公布的7个千禧年数学难题之一,该研究所为求解这道难题设立了百万美元的奖金。不过,P/NP问题的意义远不止
  • 解读P问题NP问题、NPC问题的概念

    千次阅读 2014-12-05 16:57:02
    P NP NPC NP-Hard
  • 接下来我们一起来看看GitHub代码搜索服务发展历史。 一代目的搜索界面 一开始,GitHub 宣布支持代码搜索,正如您对标有“社交代码托管”标语的网站所期望的那样。 一切都很好。 全局搜索的第一次迭代通过将...
  • 澄清P问题NP问题、NPC问题的概念 这或许是众多OIer最大的误区之一。  你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,882
精华内容 1,952
关键字:

np难问题发展历史

友情链接: xrnebki2.zip