1.P类问题和NP类问题

在讲NP-Hard问题问题之前,先讲P类问题和NP类问题
P类问题:可以找到一个多项式时间复杂度的算法去解决的问题;
NP类问题:可以在多项式时间复杂度的算法去验证结果正确性的问题;比如随便拿一个结果,可在多项式时间内验证该结果是否正确,但是想要求解该结果的时间复杂度就不知道了。P类问题一定是NP类问题,但是NP类问题不一定能找到多项式时间复杂度的算法来解决(要是找到了就是P问题了)。所以人们关心的是:是否所有的NP问题都是P问题,即是否有 P=NP(信息学的巅峰问题)
目前为止这个问题还“啃不动”。但是,一个总的趋势是人们普遍认为,P=NP不成立,也就是说,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题,也即所谓的 NPC问题。

2.NP-完全问题(NPC问题)

一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。

如果从某一个NP问题开始不断向上约化,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?

NPC问题:存在这样一个NP问题,所有的NP问题都可以约化成它。这种问题不只一个,它有很多个,它是一类问题。这一类问题就是NPC 问题。

NPC问题的定义:同时满足下面两个条件的问题就是NPC问题:首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。

NPC问题的证明:先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足)

补充约化的概念
问题A可以约化为问题B:可以采用解决问题B的方法解决问题A;或者说,问题A可以转化为问题B。(如:一元二次方程的解法可以用来解一元一次方程,只要令二次项系数a=0即可)
问题A可以约化为问题B 的直观意义:B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。
约化具有传递性:如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。
约化的标准概念:如果能找到这样一个变化法则(要求该变化法则为至多多项式时间复杂度),对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。

3.NP-hard问题

NP-hard问题满足NPC问题定义的第二条而不满足第一条。NP-hard问题的范围比NP问题要广。

NP-hard问题同样难以找到多项式时间复杂度的算法,但它也不一定是NP问题(只是所有的NP问题都可以约化到它)。

NP-hard问题:指问题S,满足任何NP问题都可以在多项式级时间复杂度内被归约为S(归约:即被归约的NP问题与S的答案相同,当解决了S时,就同时解决了所有的NP问题)。可以理解为,这是一个比所有NP问题都难的问题。

其实,NP-hard问题是世界七大数学难题之首

2000年,美国克莱数学研究所公布了世界七大数学难题,又称千禧年大奖难题。其中P与NP问题被列为这七大世界难题之首,从而大大激发了对这一问题的研究热情。

普林斯顿大学计算机系楼将二进制代码表述的“P=NP?”问题刻进顶楼西面的砖头上。如果证明了P=NP,砖头可以很方便的换成表示“P=NP!”。
康奈尔大学的Hubert Chen博士提供了这个玩笑式的P不等于NP的证明:
反证法。设P = NP。令y为一个P = NP的证明。证明y可以用一个合格的计算机科学家在多项式时间内验证,我们认定这样的科学家的存在性为真。但是,因为P = NP,该证明y可以在多项式时间内由这样的科学家发现。但是这样的发现还没有发生(虽然这样的科学家试图发现这样的一个证明),我们得到了矛盾。(上面内容来自wiki百科)

典型的NP-hard问题:TSP

售货员旅行问题 (traveling salesman problem),是最具有代表性的NP问题之一。假设一个推销员需要从香港出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。现在假设公司只给报销 C 块钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C?
推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排! 这将是个天文数字。
这个天文数字到底有多大?目前的方法接近一个一个的排着试,还没有找到更好可以寻得最短路径的方法。对七个城而言,共有 6!=720 个排法,还比较简单;,但若有 20 个城,则排法就有 19! 种。因故在排列组合里 n! 写起来轻松。但 1.21∗10171.21∗1017 是一个大得不得了的数字。若每秒钟排一次,要排 3.84∗1093.84∗109 年(一年约为 3.15∗1073.15∗107 秒),即使使用计算器,每秒排一百万次(不容易做到)也得重做三千年才能找到答案。「生也有涯,知也无涯」,想不到区区二十个城,要三十个世纪才能找到答案。

4.组合最优化问题

组合最优化问题(combinatorial optimizationproblem)是一类在离散状态下求极值的问题。把某种离散对象按某个确定的约束条件进行安排,当已知合乎这种约束条件的特定安排存在时,寻求这种特定安排在某个优化准则下的极大解或极小解的间题。

组合最优化的理论基础含线性规划、非线性规划、整数规划、动态规划、拟阵论和网络分析等。组合最优化技术提供了一个快速寻求极大解或极小解的方法。

多数问题属于所谓的NP完全问题,即对该问题基本上不存在一种算法,使得当所有的具体问题的变量和约束条件的数目两者之和甚大时,可以在容许时间(即所谓的多项式时间)之内给出所要的解。

由于这类问题在生产实际中经常出现,不能予以忽视,于是出现了两类解决问题的途径:一类是所谓的直观算法,另一类是近似算法。随着组合最优化研究的进展,一些数学分支,如组合数学、拟阵和广义拟阵以及图论等,也相应地得到新的发展。

NP-Hard问题及组合最优化问题相关推荐

  1. 【转】图论与组合优化2002年的发展

      http://www.sciencenet.cn/bbs/showpost.aspx?id=54797 图论与组合蓝皮书 图论与组合优化2002年的发展 (中国运筹学会图论与组合优化专业学术委员会 ...

  2. (转)最优化问题简介

    题目:最优化问题简介 一年多学习以来,无论是前面学习压缩感知,还是这半年学习机器学习,一直离不开最优化,比如压缩感知的基追踪类重构算法,核心问题就是一个优化问题,而机器学习中的很多算法也需要最优化的知 ...

  3. 饭桶:ご 最优化问题及算法

    文章目录 5.1 最优化问题及其分类 1.1 函数最优化问题 1.2 组合最优化问题 5.1 最优化问题及其分类 最优化 从众多的可行方案中选最佳,以达到最佳目标 20世纪中,最优化计算方法成为运筹学 ...

  4. 《算法分析与设计》复习笔记

    目录 一.算法的基本概念 1.1 算法的定义 1.2 算法的"好坏"如何衡量? 1.3 描述算法的时间复杂度 ⭐ 1.4 如何评价算法 二. 分治法 2.1 分治法的求解步骤 2. ...

  5. 【收藏夹2020-2021】

    Excel 统计前一列 重复次数:=COUNTIF(A:A,A7) 选中有公式的单元格,键盘按住shift,选中需要填充公式的最后一个单元格,选中需要填充公式的整列后,按ctrl+D,即可填充整列公式 ...

  6. Algorithm summary

    2018.5.24日更新: 去掉原文中的目录,修正了目前我发现的错别字(其实也没几个,但是本着严谨的态度我还是决定修改过来),增添了部分代码注释(发现自己写的代码现在竟然看不懂,只能强行加注释了-) ...

  7. 【电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含Matlab源码 1454期】

    ⛄一.模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing,SA)的思想最早由Metropolis等人于1953年提出:Kirkpatrick于1983年第一次使用模拟退火 ...

  8. 运筹优化(一)--运筹学概述

            运筹学:主要运用数学方法研究各种系统的优化途径及方案,为决策者提供科学决策的依据.最优化方法的主要研究对象是各种有组织系统的管理问题及其生产经营活动.最优化方法的目的在于针对所研究的系 ...

  9. [算法学习]模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记---附MATLAB注释代码

    目录 1.模拟退火算法(Simulated Annealing,SA) 1.1 本质: 1.2 算法思想 1.3 SA流程图 1.4 模拟退火过程 1.5 SA解决TSP问题 1.6 SA改进方向 1 ...

最新文章

  1. java正则 括号_java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...
  2. 计算机联锁站按钮继电器电路,计算机联锁系统与站内各种电路结合说明.DOC
  3. 关于PIP 总结和记忆巩固
  4. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
  5. ajax传输json数据格式乱码_解决Ajax加载JSon数据中文乱码问题
  6. java制作图形界面数据库_java图形界面以及链接数据库
  7. Nifty File Lists for Mac(文件列表创建工具)
  8. 3 CO配置-企业结构-分配-把公司代码分配给成本控制范围
  9. 小杜机器人线下店_打通线上线下渠道 九号机器人新零售模式成型
  10. yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)
  11. mysql 支持全文搜索_MySQL全文本搜索:启用全文本搜索支持
  12. 在函数中如何获取 线程对象、线程唯一ID
  13. wsdl2java validate_使用cxf wsdl2java进行客户端证书身份验证
  14. 专业计算机英语词汇翻译,计算机专业英语词汇与翻译复习题(已完成)
  15. ppt 如何加背景音乐
  16. linux基础教程之在Linux上安装Go语言开发包
  17. MIMO技术与链路容量
  18. 在vue项目中使用gsap,实现极佳的2d动画效果
  19. 鲜为人知的“水”凶猛
  20. bugku ctf 你必须让他停下

热门文章

  1. Linux路由与策略路由配置
  2. Android实训日志:基于外部存储卡的音乐播放器V02
  3. 计算机运行黑屏显示器正常,电脑主机运行正常 显示器黑屏
  4. html页面多个按钮点击事件监听事件,HTML Button.onclick 事件汇总
  5. 图片渲染延迟_前向渲染与延迟渲染
  6. hive 时间转字符串_07697.0.3如何在Kerberos环境下用Ranger完成对Hive的行过滤及列脱敏...
  7. 华为手机如何关闭通知栏推送消息_如果华为手机升级EMUI10后,电池耗电很快!要记得调整这3个设置...
  8. Android自定义View实践 空气质量检测 pm2.5
  9. php后台登录页修改成ajax,使用php后台给自己做一个页面路由,配合ajax实现局部刷新。(示例代码)...
  10. 情怀java手机网游_经典端游移植手游 “情怀”赋予老IP全新活力