NP难问题求解综述-程序员宅基地

技术标签: 博士生涯  自律和心智  休大UH访学  

 

摘要:定义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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/WASEFADG/article/details/108860968

智能推荐

MongoDB 聚合-程序员宅基地

文章浏览阅读57次。2019独角兽企业重金招聘Python工程师标准>>> ..._mongodb 建立聚合

一键登录怎么在iOS端实现?这篇文章教会你!-程序员宅基地

文章浏览阅读2.5k次。在一键登录出现之前,市场上最常见的APP 注册登录方式主要有账号密码、短信验证及第三方登录。这几种方式看似常见且便捷,实则存在许多安全隐患,用户体验也相对较差。首先,短信验证码到达率低、用户操作繁琐且等待时间较长,如果遇到bug,APP就会面临被卸载的惨境。再者,短信木马、伪基站等问题都使得验证码变得越发不安全,极大降低用户的使用体验。而“一键登录”可以让用户使用本机号码一键登录/注册 APP,..._一键登录

Linux——软件安装-程序员宅基地

文章浏览阅读735次,点赞22次,收藏18次。软件包的分类、rpm包管理、源码包管理、脚本程序包管理、软件包管理

Java 加解密工具类(AES,DES,DES3)_javades加密工具类-程序员宅基地

文章浏览阅读408次,点赞10次,收藏8次。Java加解密工具类_javades加密工具类

VMWare Esxi 建立Host-Only网络的方法_esxi host-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏4次。我们在Windows系统下使用VMWare Workstation 的时候,经常会创建虚拟交换机给虚拟机使用,这种虚拟交换机配置的IP是与外部网络隔离的IP地址,可以方便的建立一个只有多个虚拟机和宿主机使用的内网。有了这个内网很多网络部署就会变得简单,比如Oracle RAC的搭建,LVS负载均衡,各种集群部署等。但是在VMWare Esxi中,却没有host-only这个概念和配置了,那么我..._esxi host

ncurses笔记(1)——ncurses库的介绍与安装-程序员宅基地

文章浏览阅读2.5w次,点赞8次,收藏28次。ncurses笔记(1)——ncurses库的介绍与安装介绍ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。 ncurses名字中的n意味着“new”,因为它是curses的自由软件版本。由于AT&T“臭名昭著”的版权政策,人们不得不在后来用ncurses去代替它。 ncurses是GNU计划的一部分,但它却是..._ncurses

随便推点

走进Zend Framework框架编程(六):视图(3)-程序员宅基地

文章浏览阅读93次。6.9视图助手(Helper)视图脚本里经常有一些繁杂的事情,比如格式化日期、产生表单元素等等。这些可以用助手帮我们来完成。助手类其实是一些以Zend_View_Helper_开头的类,类名的最后一段是助手的名字,助手的名字必须是首字母大写的,该类必须至少有一个以助手名字命名的方法。助手名通常是驼峰式命名,即它不会是大写字母开头的。类名是混合大小写字格式。方法名也是驼峰式命名。默认的助..._zendframework3 目录结构

C++实现STL用法总结|近十万字总结_c++ stl实现-程序员宅基地

文章浏览阅读2.2k次,点赞27次,收藏67次。这是我寒假学的STL,一共写了有六七万字吧,写的挺认真的说真的写博客比我学这个知识点还费时间,不仅是内容上的排布,还有逻辑上的画面上的排版,写这些一方面是巩固自己的知识,以便以后不会还能再看看,另一方面则是给更多的人分享吧。STL容器简介String知识点Vector知识点List 知识点Queue知识点Deque知识点Priority Queues(优先队列)知识点Map知识点..._c++ stl实现

android面试题目!跟Android初学者分享几点经验,通用流行框架大全_android 初期题目-程序员宅基地

文章浏览阅读876次,点赞12次,收藏19次。【Android 详细知识点思维脑图(技能树)】其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

搭建编译服务器-程序员宅基地

文章浏览阅读240次。右键计算机选择映射网络驱动器,输入共享文件夹信息。在文件夹输入框填入Ubuntu设备的IP地址和Ubuntu共享文件夹的路径。这里的path共享路径是系统目录所在的根目录,可用pwd查看。输入命令后,根据提示设置密码。问题原因是没在git根目录下进行,在这里不用理会。这里必须要在root中进行编写,不然没有权限。输入Samba服务器的访问用户名和密码(修改samba配置文件,配置共享信息。重启samba服务,一定要重启一下。在配置Samba服务器时已完成配置。2.4repo工具安装。

python水仙花数_ghpython_水仙花数-程序员宅基地

文章浏览阅读666次。今天咱们来看看老潘微博里的一个python小案例,求100到99999之间的所有水仙花数。所谓水仙花数,又被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数、阿姆斯特朗数。是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身(153=1^3+5^3+3^3)。严格来说,只有3位数的3次幂数才成为水仙花数,水仙花数只是自幂数的一种。一位自幂数:独身数;二位自幂数:无;三位自幂..._python例2:水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本

人大金仓数据库oracle_fdw扩展的使用-程序员宅基地

文章浏览阅读955次,点赞19次,收藏26次。oracle_fdw是KingbaseES的一个扩展插件,提供了一个外部数据包装器,可以使KingbaseES方便高效的访问oracle数据库。_oracle_fdw

推荐文章

热门文章

相关标签