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类的划分会和经典模型有所不同。但是我们仍然希望量子计算能够突破图灵模式,给计算机科学带来一个崭新的世界。

科普,什么是“NP难”的问题。专业的解释俺看不懂。这个文章里面举了几个例子,俺一下就明白了。相关推荐

  1. 计算机专业术语及其解释,计算机专业术语解释

    NTFS (NT 档案系统 NT File System) NOS (网路作业系统 Network Operation System) MIDI (乐器数位介面 Musical Instrument ...

  2. P问题,NP问题,NP难问题

    转自:https://blog.csdn.net/csshuke/article/details/74909562 有一则程序员界的笑话,就是有一哥们去google面试的时候被问到一个问题是:在什么情 ...

  3. P,NP,NPC(NP完备),NP-hard(NP难),时间复杂度

    P是在多项式时间可以"解决"的一类问题. NP(Non-deterministic Polynomial)是给我们一个解,在多项式时间可以"验证"解是否正确. ...

  4. 应用心理学跨考计算机难不难,跨专业心理学考研难不难 主要学什么

    当我们有考研想法并开始准备考研的时候,我们面临的第一个问题便是到底要考什么专业?有部分学生会继续选择本专业考研:还有部分学生会跨专业考研.跨考的一个热门专业就是心理学,心理学专业向来不缺跨考生,并且跨 ...

  5. 排序 np_P问题、NP问题、NP完全问题和NP难问题理解

    P 问题 P类问题(P:polynominal,多项式):存在多项式时间算法的问题.以排序为例,在排序这个大问题里,是可以找到一种时间复杂度为多项式o(n^2),o(nlogn)的算法(如冒泡排序法, ...

  6. P、NP、NP完全问题、NP难问题

    可以在多项式时间内求解的问题称为易解的,而不能在多项式时间内求解的问题称为难解的. P类问题:多项式类型,是一类能够用(确定性的)算法在多项式的时间内求解的判定问题. 只有判定问题才属于P 不可判定问 ...

  7. 计算机和数学专业哪个难,学计算机专业难吗 数学很差能学吗

    数学不好的人可以学计算机专业吗,计算机是不是很难学啊?这是很多学生最想问的问题.其实,数学和计算机关系不大,计算机虽难,但认真学一样能学会. 数学差可以学计算机吗 数学基础差的人可以学计算机专业,计算 ...

  8. 史上最难的大学专业 计算机 土木建筑 医学,大学最易挂科的专业,智商不够别报考,不然很难毕业!...

    原标题:大学最易挂科的专业,智商不够别报考,不然很难毕业! 今天向学霸进军给高考生和家长们说一说"大学里最容易挂科专业排行榜",要更加努力哟! 医学专业 每逢期末考试 医学专业应该 ...

  9. 为什么L0正则化是一个NP难解问题?

    1. 矩阵的L0范数 矩阵的L0范数就是非0元素的个数,通常用它来表示稀疏,L0范数越小0元素越多,也就越稀疏.例如 A=[-1, 2, -3; 4, -6, 6]的L0范数就是:6. 2. 为什么L ...

最新文章

  1. php设置html全局路径_全局:语言包配置
  2. 二、WPF datagrid 特定行变色
  3. LeakCanary——消除Android中的内存泄露
  4. LeetCode-14 最长公共前缀
  5. linux进程管理 pdf,高效与精细的结合--Linux的进程管理.pdf
  6. 测试学生成绩的软件,《软件测试-学生成绩管理系统》.doc
  7. Centos7 Docker镜像操作_入门试炼02
  8. 怎样通过FineReader 的“文本”窗口检查文本
  9. shiro密码正确也会匹配错误_智能商贸-Shiro
  10. 守护进程之PHP实现
  11. 一个故事告诉你,数据分析如何给企业带来价值
  12. 打开和禁用IPV6的方法
  13. Altium Designer 17 安装破解版详细教程
  14. 如何解决计算机前置音频设备无声音输出的方法之一
  15. OSI网络七层协议详解
  16. [原创]网站文章页面添加分享按钮,百度按钮代码复制使用时不显示问题解决!
  17. 论文阅读笔记:Masked Autoencoders Are Scalable Vision Learners
  18. 【Get深一度】香农定理(Shannon Theory)
  19. Git操作流程(非常详细)
  20. 解决uniapp在微信小程序显示图片/数据,h5不显示图片/数据。

热门文章

  1. git修改提交作者和邮箱
  2. JDK 各版本汇总表
  3. 生信格式 | GAF GO注释文件详解
  4. 年度盘点|AI科技评论做过的三界总结公开课(上)
  5. NYOJ-325Zb的生日
  6. 卓有成效的管理者要管好自己、公司人脉、团队
  7. 1101. 献给阿尔吉侬的花束 (bfs
  8. 【问题来了】Spring项目启动出现 No bean named ‘xxx‘ available 的问题
  9. C++中string的常用函数总结
  10. C++Builder 6.0 IDEA扩展工具,开发助手