第四章现实生活中的NP难度

合集下载

np难问题的例子

np难问题的例子

NP难问题的例子
NP难问题是指那些在多项式时间内无法被解决的问题,它们通常被认为是计算机科学中的最难问题之一。

以下是一些著名的NP难问题的例子:
1. 旅行商问题(Traveling Salesman Problem,TSP):该问题的目标是找到一条最短路径,使得一个商人能够访问所有城市,并返回起点城市。

这个问题在实践中是非常复杂的,因为它涉及到很多因素,如城市之间的距离、商人的时间限制、交通拥堵等等。

尽管TSP是一个NP难问题,但在理论上是否存在一个多项式时间算法还是未知的。

2. 着色问题(House染色问题):该问题涉及到将房子涂成不同的颜色,以避免相邻房子颜色相同。

该问题在计算机图形学中具有重要应用,但也是一个NP难问题。

3. 子集问题(Subset Sum Problem):该问题是判断给定一组数是否存在一个子集,使得这些数的和等于给定的目标值。

这个问题也是一个NP难问题,尽管它可以在多项式时间内被近似解决。

4. 数独问题(Sudoku):数独是一种数字填充游戏,需要将一个9x9的网格填充为1到9的数字,使得每一行、每一列以及每一个子网格中的数字都不重复。

数独是一个NP 难问题,尽管它可以在多项式时间内被近似解决。

这些例子表明,尽管NP难问题在实践中具有重要的应用,但我们仍需要更多的研究来解决这些问题。

NP的原理及定义和解释

NP的原理及定义和解释

NP的原理及定义和解释NP是非确定性多项式(Non-deterministic Polynomial)的简称,是计算机科学中的一个复杂性类。

NP问题是指可以在多项式时间内验证解的正确性的问题。

NP问题的解可以通过非确定性多项式算法在多项式时间内验证,但没有有效的多项式算法可以在多项式时间内求解。

因此,NP问题的求解是非常困难的,往往需要使用暴力或近似算法等方法。

定义:NP问题的定义可以分为两个方面:1. 证书存在性:对于一个给定的问题,如果存在一个证书(certificate),可以在多项式时间内验证其正确性,则该问题属于NP 问题。

2.多项式时间验证:对于给定的问题和一个潜在的解,可以在多项式时间内验证这个解是否是正确的。

NP问题的解法可以由以下两种形式描述:1.非确定性算法:对于一个给定的问题,非确定性算法可以通过猜测和尝试的方式,在多项式时间内找到问题的解。

这个算法可以通过多次猜测和尝试来验证潜在的解是否是正确的,但并没有给出一个确定性的步骤来找到解。

2.多项式时间验证算法:对于一个给定的问题和一个潜在的解,可以通过一个多项式时间的验证算法,验证这个解是否是正确的。

原理:NP问题的原理基于两个关键概念:证书存在性和多项式时间验证。

证书存在性是指对于一个给定的问题,存在一个证书(或称为证明)可以在多项式时间内验证其正确性。

证书可以是一组状态、数字、字符串等,通过这个证书可以验证一个给定的解是否正确。

这个证书可以被看作是一个“快速验证器”,它能够在多项式时间内验证问题的解的正确性。

多项式时间验证是指对于给定的问题和一个潜在的解,可以在多项式时间内验证这个解是否是正确的。

多项式时间验证算法可以通过一系列的计算和判断,来验证一个给定的解是否满足问题的条件。

这个验证算法的运行时间是一个多项式,在实际应用中可以被认为是“快速”的。

基于以上两个概念,可以得到一个重要的结论:如果一个问题是NP 问题,那么可以把它的解转换成一个证书,并使用多项式时间验证算法,来验证这个证书的正确性。

p,np,npc问题的通俗化解释和详细区分

p,np,npc问题的通俗化解释和详细区分

你会经常看到网上出现“这怎么做,这不是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)的复杂度。

NP难问题的概念

NP难问题的概念

P问题、NP问题、NPC问题、NP难问题的概念2010-04-15 21:35 | (分类:默认分类)转自/view/3e968900a6c30c2259019e8f.html你会经常看到网上出现“这怎么做,这不是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)。

P与NP问题

P与NP问题

P/NP问题P/NP问题是在理论信息学中计算复杂度理论领域里至今没有解决的问题,它被“克雷数学研究所”(Clay Mathematics Institute, 简称CMI)在千禧年大奖难题中收录。

P/NP问题中包含了复杂度类P与NP的关系。

1971年史提芬·古克(Stephen A. Cook) 和Leonid Levin 相对独立的提出了下面的问题,即是否两个复杂度类P和NP是恒等的(P=NP?)。

P和NP复杂度类P包含所有那些可以由一个确定型图灵机在多项式表达的时间内解决的问题;类NP由所有其肯定解可以在给定正确信息的多项式时间内验证的决定问题组成,或者等效的说,那些解可以在非确定图灵机上在多项式时间内找出的问题的集合。

很可能,计算理论最大的未解决问题就是关于这两类的关系的:P和NP相等吗?在2002年对于100研究者的调查,61人相信答案是否定的,9个相信答案是肯定的,22个不确定,而8个相信该问题可能和现在所接受的公理独立,所以不可能证明或证否。

[1] 对于正确的解答,有一个,000,000美元的奖励。

NP-完全问题(或者叫NPC)的集合在这个讨论中有重大作用,它们可以大致的被描述为那些在NP中最不像在P中的。

(确切定义细节请参看NP-完全)理论计算机科学家现在相信P, NP,和NPC类之间的关系如图中所示,其中P和NPC类不交。

假设P ≠ NP的复杂度类的图解.如P = NP则三个类相同.本质上,P = NP问题问道:如果是/不是问题的正面答案可以很快验证,其答案是否也可以很快计算?这里有一个给你找点这个问题的感觉的例子。

给定一个大数Y,我们可以问Y是否是复合数。

例如,我们可能问53308290611是否有非平凡的因子。

回答是肯定的,虽然手工找出一个因子很麻烦。

从另一个方面讲,如果有人声称答案是"对,因为224737可以整除53308290611",则我们可以很快用一个除法来验证。

谈谈P和NP问题

谈谈P和NP问题

谈谈P和N P问题尹 蔷Ξ(大连职工大学基础理论部,辽宁大连116024)摘 要:对“21世纪的数学问题”之一的“P=NP?”问题作了论述。

关键词:计算复杂性;多项式时间;P问题;NP问题;NPC问题中图分类号:N39 文献标识码:A 文章编号:1008Ο388X(2005)04Ο0020Ο02 如果一个问题能用多项式时间复杂性的算法求解,那么就叫做P(英文多项式polynomial的第一个字母)问题。

P问题的例子如下:例1 求n个数的平均数。

解此问题要作n-1次加法和1次除法,是属于“线性”复杂性(或k=1的多项式复杂性)的问题。

例2 求n个数两两相乘的乘积。

解此问题要作C n2=n(n-1)/2次乘法,是属于“平方”复杂性,即k=2的多项式复杂性的问题。

例3 给定正整数k,问图中是否有不超过k条边的集合,使每个点至少接在一条边上。

还有一类问题,我们还无法断定是否为P问题。

例如著名的“旅行推销员(即货郎担)问题”:一位旅行推销员要到许多不同的城市(如有100个),到每一个城市的顺序没有关系,但要走遍每一个城市,而且要使所需路程的总和为最少(以保证旅费支出最少),如何选择路线。

也可以问成:对于一个给定的数B,是否存在一个通过所有这些城市的旅行路线,其总路程不大于B。

这个问题是意大利威尼斯的数学家孟戈(K.Menger)1930年提出来的。

一个立即就能想到的做法是列出所有可能的路线,算出每条路线的总路程,然后从中选出最小路程的路线即可。

这种做法应该是可行的,即这一问题是能行可计算的,即有算法的。

是否有效可计算呢?考虑它的算法复杂性,设要访问的城市有n个,就会有n!条可能的路线。

而n!是一个增长极快的函数,不难发现,当n>6时有n!>3n,所以n!是指数复杂性的算法,城市数一多,就无法解决了。

为解决这一问题,设计好的算法,人们做了极大的努力,发表了大约300篇论文,但没有找到一般有效算法。

P问题、NP难问题详解

P问题、NP难问题详解

NPC问题(补充) 问题(补充) 问题
NPC问题存在吗 问题存在吗? 问题存在吗
•?
NPC问题(补充) 问题(补充) 问题
• 逻辑电路问题 给定一个逻辑电路,问是否存在一种输入 逻辑电路问题: 给定一个逻辑电路, 使输出为True。 使输出为 。 • 这是第一个 这是第一个NPC问题。其它的 问题。 问题 其它的NPC问题都是由这个问题约 问题都是由这个问题约 化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。 类问题的“ 化而来的。因此,逻辑电路问题是 类问题的 鼻祖” • 我们知道,一个逻辑电路由若干个输入,一个输出,若干 我们知道,一个逻辑电路由若干个输入,一个输出, 逻辑门”和密密麻麻的线组成,如下图: “逻辑门”和密密麻麻的线组成,如下图: •
浅谈P问题、NP问题、 NPC问题及NP难问题
王培磊
Contents
1 2 3 4
P问题 问题
NP问题、 问题、 问题
NPC问题 问题
NP难问题 难问题
时间复杂度
• 时间复杂度并不是表示一个程序解决问题需要花多少时间, 而是当问题规模扩大后,程序需要的时间长度增长得有多 快。 • 不管数据有多大,程序处理花的时间始终是那么多的,我 们就说这个程序很好,具有O(1)的时间复杂度,也称常数 级复杂度;数据规模变得有多大,花的时间也跟着变得有 多长,这个程序的时间复杂度就是O(n)。
NPC问题(补充) 问题(补充) 问题
• 有输出无论如何都不可能为 有输出无论如何都不可能为True的逻辑电路吗? 的逻辑电路吗? 的逻辑电路吗
NPC问题(补充) 问题(补充) 问题
其大概意思是说任意一个NP问题的 其大概意思是说任意一个 问题的 输入和输出都可以转换成逻辑电路 的输入和输出( 的输入和输出(想想计算机内部也 的运算), 不过是一些 0和1的运算),因此对 和 的运算),因此对 于一个NP问题来说 问题来说, 于一个 问题来说,问题转化为了 求出满足结果为True的一个 求出满足结果为 的一个 输 即一个可行解)。 入(即一个可行解)。 • 逻辑电路问题属于NPC问题——它显然属于NP问题,并且 可以证明所有的NP问题都可以约化到它 。

np难问题的证明方法

np难问题的证明方法

np难问题的证明方法
NP难问题是指那些无法在多项式时间内验证其解是否正确的问题,也称为NP问题。

要证明一个问题是NP难问题,需要证明该问题具有NP问题的性质,即无法在多项式时间内验证其解是否正确。

证明一个问题是NP难问题的一般步骤如下:
1. 确定问题的定义和性质:首先需要明确问题的定义和性质,包括问题的输入和输出、问题的约束条件和问题的解的验证方式等。

2. 证明问题无法在多项式时间内求解:需要证明该问题无法在多项式时间内求解,即不存在一种算法可以在多项式时间内求解该问题。

这可以通过证明该问题的计算复杂性为指数级或更高来实现。

3. 证明问题具有NP问题的性质:需要证明该问题具有NP问题的性质,即无法在多项式时间内验证其解是否正确。

这可以通过证明该问题的验证复杂性也为指数级或更高来实现。

4. 证明其他NP问题可以规约到该问题:需要证明其他NP问题可以规约到该问题,即可以将其他NP问题的解转化为该问题的解。

这可以通过证明其他NP问题可以在多项式时间内规约到该问题来实现。

需要注意的是,NP难问题的证明方法通常是基于数学和计算机科学的理论,需要具备一定的专业知识和技能。

同时,NP难问题的证明也需要考虑各种
复杂性和计算复杂性的限制条件,因此在实际操作中可能会有很大的难度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华中科技大学计算机科学与技术学院 jrc@
§1 求解Packing问题的拟物方法
实体看作第0个物体。第0物体与第j个(j=1,2,…,N)物体的距离 L0j我们作如下定义:当0、j二物体相交或包含时, L0j 为某 个负数,其绝对值等于0、j二物体沿空腔的几何重心与j物 体的几何重心的连线方向以平移方式互相接近至相切时所 经过的长度;当0、j二物体相离时, L0j 为某个非负数, 其数值等于0、j二物体沿空腔的几何重心与j物体的几何重 心的连线方向以平移方式互相远离至相切时所经过的长度。 注意:0物体是个空腔。
U = ∑ ∑ uij
i =1 j =1
M m
( 2)
华中科技大学计算机科学与技术学院 jrc@
§3 求解SAT问题的拟物拟人方法
参考文献: 黄文奇,金人超. 求解SAT问题的拟物拟人算 法——Solar. 中国科学(E辑), 1997, 27(2): 179-186.
华中科技大学计算机科学与技术学院 jrc@
华中科技大学计算机科学与技术学院
ห้องสมุดไป่ตู้
华中科技大学计算机科学与技术学院
华中科技大学计算机科学与技术学院
第四章 现实生活中的NP难度问题及其现实处理方法
面对寻求绝对形式化完美方法的失败,科学 家不得不“返朴归真”,从自然界、人类 社会寻求灵感和智慧。 “师法自然”,“外师造化,内得心源” 拟物方法:到物理世界中寻找出于原始数学 问题等价的自然现象,观察其中物质运动 的演化规律,从中受到启发,得出对数学 问题的求解算法。 物理状态的演化天然地是使能量函数最小化, 最后往往陷入局部极小陷阱,难以求得问 题的全局最优解。
华中科技大学计算机科学与技术学院 jrc@
第四章 现实生活中的NP难度问题及其现实处理方法
拟人方法:人类在最近几千年的社会生活中 形成了丰富的社会经验,利用这些经验往 往可以启发出好的跳出局部极小陷阱的策 略,将这些策略形式化为算法,称为拟人 途径。 遗传进化算法、人工神经网络、模拟淬火算 法、蚁群算法等是近年来发展出来的“师 法自然”的算法,它们与拟物拟人算法的 不同在于针对性较差。照搬照套地使用这 些算法时往往不能取得好的结果。 拟物拟人算法的优点在于针对问题对症下药。
第四章 现实生活中的NP难度 问题及其现实处理方法
——处理NP难度问题的拟物拟人途径
华中科技大学计算机科学与技术学院 jrc@
NP难问题的近似算法
1. 近似算法的计算时间评价
(1)概率分析 (probability analysis) 用最坏情况分析,会因一个最坏实例影响总体评 价. 在实例数据服从一定概率分布情形下,研究算法 复杂性和解的效果. (2)大规模计算分析 通过大量实例计算,评价算法效果. • 注意数据的随机性和代表性. • Benchmark
华中科技大学计算机科学与技术学院 jrc@
§1 求解Packing问题的拟物方法
引进二物体间的距离的概念.i、j二物体间的距离记 作Lij,其中。当i、j二物体相交或包含时,我们定 义Lij为某个负数,其绝对值等于i、j二物体沿其连 心线方向以平移方式互相远离至外切时所经过的 长度;当i、j二物体相离时我们定义Lij为某个非负 数,其数值等于i、j二物体沿其连心线方向以平移 方式互相接近至外切时所经过的长度。
U = ∑ ∑ U ij ,
N −1 N i =0 j =i +1 华中科技大学计算机科学与技术学院 jrc@
( 4)
§1 求解Packing问题的拟物方法
i)U恒非负; ii) U>0时表明当前状态不满足N个物体在容器 中放下的要求; iii)U=0则表明当前状态满足了N个物体在容器 中放下的要求。 将U作为状态空间中的指标函数,按求实系数 超越方程组的解的下降算法,略加修正, 得到原Packing问题的求解算法。
华中科技大学计算机科学与技术学院 jrc@
§1 求解Packing问题的拟物方法
用下式定义二物体间的弹性势能: 当Lij ≥ 0, 0, U ij = 2 (3) Lij , 当Lij < 0. 此式的弹性力学解释如下: 当Lij<0时, |Lij|表征了i、j二物体挤压变形的尺度,而 弹性变形的势能则是正比于变形尺度的平方; 当Lij≥0时,i、j二物体没有发生挤压,因而弹性变 形势能为0。 由下式定义如个物体与空腔所构成的系统的弹性势 能U:
华中科技大学计算机科学与技术学院 jrc@
NP难问题的近似算法
2. 最优解的可近似程度
若一个求解最优化问题的一个近似算法A求得的实例 I的近似最优解目标函数值为c,实例I相应的最优 解值为c*,则A是一个ε-近似算法(0< ε <1))当且 仅当对任意实例I:
| c * −c | ≤ε max(c*, c)
§1 求解Packing问题的拟物方法
将这N个物体想象为光滑的弹性实体。将容器想象 为充满整个三维空间的光滑弹性物,不过其中因 挖去部分实体而形成一个空腔,这里讨论此空腔 横截面为圆形的情况。 想象这N个弹性体挤缩在这个弹性空腔中。如果我 们原始的刚性置入问题客观上有解,那末,这个 存在挤压的弹性物体与空腔所构成的体系就会在 弹性力的作用之下发生一系列的运动,最终有可 能使得各个物体与空腔都恢复自己的大小与形状 因而使得置入问题的定解条件得到满足。
华中科技大学计算机科学与技术学院 jrc@
§1 求解Packing问题的拟物方法
圆形Packing问题: 实例:给定一个半径为R的圆盘, N个半径分别为 r1,r2,…,rN的刚性圆饼。 问题:是否能将所有圆饼不重叠地放入圆盘中?
华中科技大学计算机科学与技术学院 jrc@
华中科技大学计算机科学与技术学院 jrc@
§2 求解Covering问题的拟物方法
Covering问题: 实例:给定平面上的有穷个点(不动),K个半径为R 圆盘; 问题:如何布置圆盘的位置,将这些点都覆盖住?
华中科技大学计算机科学与技术学院 jrc@
§2 求解Covering问题的拟物方法
拟物的思路及由其引出的算法 将这有穷个点想象为嵌在光滑平面上的具 有单位质量的质点。将各个圆盘想象为绝 对光滑,具有单位质量且质量均匀分布在 圆周上。 若随机地将这些圆盘放在此光滑平面上, 则由于质点与圆盘间的万有引力的缘故, 每一个质点都会吸引圆盘来覆盖自己,从 而使Covering问题得到解决。
华中科技大学计算机科学与技术学院 jrc@
§2 求解Covering问题的拟物方法
根据万有引力定理,忽略某些纯力学的细节后进行积分就可 得出由一质点与一圆盘构成的简单体系的引力势函数:
1 1 − , 当r ≥ R; u= R r 当r < R。 0, (1)
其中R为圆盘的半径,r为质点到盘心的距离。 现考虑由M质点与m个圆盘构成的体系,其势能函数的表达 式为:
相关文档
最新文档