NPC
这里的想说的NPC不是Non-Player-Controled,非玩家控制角色,而是Non-determinisitc Polynomial complete problem,它属于一类很特殊的问题,迄今为止,没有人能够找出求解NPC问题的多项式时间的算法,同时也没有人能够证明对于这类问题不存在多项式时间算法;
最短(Bellman -Ford)与最长简单路径,欧拉游程(Fleury)和哈密顿回路,2-CNF可满足性和3-CNF可满足性,这些问题看起来差别很小,但是成对的问题中前者存在多项式时间的算法,而后者属于NPC问题,不存在多项式时间的算法;其实算法中关于这个问题的研究感觉也仅仅存在理论意义,应该平时很少会接触到这些东西,异或是真的在实际应用中一个算法的模拟对应的是一个NPC的问题,你证明了这个算法不存在多项式时间解决的算法,此时你只能够改变解决方案或者利用近似的算法进行解决,唯一能够想象的应用场景就是这样,不过这种场景也是少之又少吧,所以还是作为一个学术的问题或者算法中一个经典的问题作为了解,不过话说如果真的有人能够找到其中一个NPC问题的多项式时间算法或者证明了这种算法的不存在性,其对计算机科学的贡献就非常的巨大了,这一类问题均是想通的,解决其中一个所有的都可以解决了,这正是这一类问题的奇妙所在,后面证明NPC问题的方法也体现了这一点,如过仅仅想了解一些概念接下来的稍微介绍一下概念,后面是一些NPC问题的证明可以忽略~
P类问题:多项式时间内可解的问题;
NP类问题:多项式时间内“可验证”的问题;这里的可验证针对某一个问题给出其中一个解决方案,能够在问题输入规模的多项式时间内验证此个解决方案是正确的;
从上面的概念可以看出,P中的任何问题也都属于NP;但是关于P和NP的范围,仍是一个不可解的问题,P属于NP的子集,但是是否为真子集?
NPC类问题,首先这个问题必须属于NP类,但是这个问题的解决难度大于或者等于所有NP中问题的“难度”;难度的定义可以简单理解为一个转换的过程,如果一个问题的所有解决方案可以通过多项式时间转换至另一个问题的解决方案,并且可以通过目的问题的解决问题判定是否属于原问题的解决方案,则成目的问题的难度大于原问题的难度,因为这个过程是单方向的,原问题的所有解决方案可以映射至目标问题集中,但是目标问题集中的部分问题无对应的映射,图示则如下:

理解了这个难度问题就可以理解NPC问题了,NPC问题的“难度”是相当的,并且难度大于所有的NP类问题,所以如果解决了一个NPC问题,也就是说设计了一个NPC问题的多项式时间算法,则所有的NP类问题可以转换为NPC问题,则说明所有NP类和NPC类问题都存在一个多项式时间的算法,是不是很诱人,这还是一个非常大的问题的;
一些常见的NPC问题举例,并且证明结构:

从上至下的问题分别是:
布尔组合电路的可满足性:此问题是一切NPC类问题的鼻祖,证明方法在算法导论中也只是领略了一点,还是一知半解,因为涉及到硬件知识了,就是靠这个问题才知道NPC这个集合非空,然后接下来各种NPC问题被证明;
布尔公式可满足性:布尔变量+布尔连接词+括号组成的公式;
3-CNF可满足性:3-CNF也是布尔公式,形式比较特殊,由子句组成,子句之间用“与”连接,子句由三个变量(or变量的非)的“或”组成;
团问题:无向图中的团是一个顶点子集,其中每一对顶点之间由E中的一条边相连;
顶点覆盖问题:覆盖无向图中所有边E的顶点组成的集合;
哈密顿回路:有向图的简单回路,包含V中每个顶点;
旅行商问题:
子集和问题:
如果只是想要了解看到这里就可以了,下面简单的描述NPC类各种问题的证明方法:
1、证明L属于NP类问题;
2、选取一个已知的NP完全语言L‘
3、描述一种算法来计算一个函数f,它把L’中的每个解决方案x映射到L中的一个解决方案f(x)
4、对于所有的x,函数f满足x属于L‘当且仅当f(x)属于L
5、证明计算函数算法具有多项式运行时间
上面的证明简单的说就是找到一个NP问题,然后该问题的难度如果大于或等于一个已经的NPC问题,则该问题是NPC问题!
刚开始的证明基础是布尔组合电路的可满足性,这个问题设计电路知识,简单的来说,所有的问题编程运行的时候都要在电脑上运行,电脑可以看作一个布尔电路,所以所有NP可以转换为该问题,然后该问题的一个解决方案,就是输入的赋值能够在多项式时间内检验其正确性,所以第一个NPC问题就诞生了,以后问题的证明就可以利用这个已知的NPC问题和上面的证明方法了~
接下来证明方法重要的就是多项式时间的转换的方法!首先,证明属于NP类问题只要找到一个解决方案能够在多项式时间内验证,则属于NP;然后利用多项式时间转换的方法和一个已知的NPC即可证明。
不知道所提的量子计算机是不是和布尔电路的可满足性问题的NPC相关,我只是假设可能量子计算机的概念就是他本身突破了这个布尔电路满足性的NPC问题,所以他能够增加很多速度,这里只是作为一个无知的人随便猜想一下~了解这方向的人可以告诉我一下;
公式可满足性:利用布尔组合电路的可满足性,转换方法:

这个转换比较显而易见,如上图所示;针对每个门电路,利用一个等价的公式,然后所有利用与连接起来,最后连接布尔电路的输出,这样的转换就正确率。如果布尔电路满足,则通过这个多项式的转换至右边的公式时同样能够满足,所以这种转换是正确的;
3-CNF可满足性:

首先将一个布尔公式转换成一个二叉树,如上面所示,这是转换的第一个步骤;

然后针对二叉树利用和第一个一样的原理进行改写,改写成如上图所示的公式;


针对改写后的每项内容,其最多包含3个基本元素,这样利用真值表可以将上面的三个基本元素转换成下面的形式;DNF的形式(析取范式);取反之后可以得到合取范式的形式;


有的项目包含1个元素或者2个元素的则利用上面两条规则转换至3个元素,最后转换为3-CNF的形式,整个转换过程花费多项式时间;所以证明成立~
团问题:

利用3-CNF证明,首先是NP类问题,接着3-CNF进行转换,每个子句的三个元素作为节点,然后连接,两种情况不存在连接:
1、一个元素和它的非形式不进行连接;
2、子句内的元素不进行连接;
这样就转换为团问题的图了,团问题就也为NPC问题了。
顶点覆盖问题:


这里利用团问题进行证明,首先属于NP问题,然后图的团问题转换原图的顶点覆盖问题~
假设G包含一个团V'是V的子集,且V'=k,我们断言,V-V'是G补图中的一个顶点覆盖,设u,v是E补图中的任意边,则u,v不属于E,这说明u或v至少有一个不属于V',因为V’中的每一对顶点都有一条E中的边相连接。等价的,u或者v至少有一个属于V-V',这意味着边u,v被V-V'所覆盖。由于u,v是从E的补图中任意选取的边,所以E的补图中的所有边都被V-V'中的一个顶点所覆盖。
反之,假设G的补图具有一个顶点覆盖V'属于V,其中V‘=V-k,那么,对于所有u,v属于V,如果u,v属于E的补图,那么u属于V’或者v属于V’或者都属于V’ ,与此相对,对所有u,v属于V,如果u不属于V'且v不属于V',则有u,v属于E,换句话说,V-V'是一个团,其规模为V-V'=k,证明结束。
哈密顿回路问题,
旅行商问题,这个问题的证明比较简单,首先该问题本属于一个最优化问题,但是最优化问题都可以通过转换至判定问题。
比如TSP={<G,c,k>:G=(V,E)是一个完全图,c是V*V→Z上的一个函数,k属于Z且G包含一个费用至多为k的旅行商的旅行回路}
这个问题在给出一个实例之后必定能够在多项式的时间对其验证,那么它就属于NP问题。然后通过哈密顿回路证明其为NPC问题。
设G图为一个哈密顿环,构造TSP问题如下,建立完全图G‘,其中定义费用函数
c(i,j)=0 如果i,j属于哈密顿回路中的边
1 如果i,j不属于哈密顿回路中的边
现在说明图G中具有一个哈密顿回路,当且仅当图G'中有一个费用至多为0的回路。假定图G中有一个哈密顿回路h,h中的每条边都属于E,因此在G‘中的费用为0,因此,h在G’中是费用为0的回路。反之,假定图G‘中有一个费用为h’至多为0的回路。由于E‘中边的费用只能是0和1,所以回路h’的费用就是,且回路上每条边的费用必为0。因此,h‘仅包含E中的边。这样,我们就得出结论,h’是图G中的一个哈密顿回路。
子集和问题;
利用3-CNF进行归约证明
根据一个给定的3-CNF构造如下的一个数字期望和和子集合如下:

其中t的位数是n+k位,其中n是子元素的个数及x下标的个数,k是子句的个数,这里n=3,k=2,所以构造上表。
s1,s1',s2,s2'属于松弛标量,就是在相应的Ci处分别设置1,2,后面证明起松弛的作用,保证后k位满足4;
vi,vi‘是唯一的~,相应位置xi处均标1,主要差别是Ci处标记,如果子句包含xi,则vi处标记1,包含非xi,则vi’处标记1~,这里比较乱,看下表比较清晰了。
接下来就是根据表进行证明3-CNF的满足性等价于这个集合去子集合满足目标t。
如果xi为1,则取vi集合,否则取vi‘集合,这样就满足了t的前n位,同时3-CNF满足,表示子句至少有一个为真,则取的满足前n位的集合子句中至少有一个为1,则其中一个子句必定至少为1,至多为3,然后加上后面的松弛变量si,si’就可以构造出满足t的子集合;
反之,同样的原理,子集必定包含vi或者vi‘其中一个,满足vi,则xi=1,否则xi=0,这样赋值必定能够满足3-CNF,
所以证明结束,子集和问题是一个NPC问题;
NPC的更多相关文章
- 转载 什么是P问题、NP问题和NPC问题
原文地址http://www.matrix67.com/blog/archives/105 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜 ...
- 浅谈P NP NPC
P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...
- (数学)P、NP、NPC、NP hard问题
概念定义: P问题:能在多项式时间内解决的问题: NP问题:(Nondeterministic Polynomial time Problem)不能在多项式时间内解决或不确定能不能在多项式时间内解决, ...
- P,NP,NPC,NPC-HARD
P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducib ...
- HackerRank "TBS Problem" ~ NPC
It is marked as a NPC problem. However from the #1 code submission (https://www.hackerrank.com/Charl ...
- P、NP、NPC、NP-Hard问题
转自:http://www.matrix67.com/blog/archives/105 总结 P:能用多项式时间求解的问题NP:能用多项式时间验证的问题(但不知道能不能用多项式时间求解).存在不属于 ...
- P问题、NP问题、NPC问题、NP难问题的概念
P问题.NP问题.NPC问题.NP难问题的概念 离入职尚有几天时间,闲来无事,将大家常见却又很容易搞糊涂的几个概念进行整理,希望对大家有所帮助.你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这 ...
- P问题、NP问题和NPC问题
P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题了”之类的话.你要知道,大多数人此时 ...
- NPC AI驱动最基本过程
NPC AI驱动最基本过程 NPCmgr中比较重要的是加载NPC和一个NPCAI的一个指针 他利用map那个线程的定时到底做了啥呢 void NPCmgr::npcAITimer() { time_t ...
- 服务器NPC的ID如何分配的
服务器ID分配包括NPC,Monster,Pet的ID分配都是调用allocateUID然后自动保存的ID加一,pet说是通过玩家的ID移位获得的,调试一下发现还是调用allocateUID,如果通过 ...
随机推荐
- biz处理dao事务处理层
前言 正文 1.创建一个事物管理对象,该对象将连接对象绑定到当前线程 2.dao层的代码演示样例 3.biz层处理数据库的事务 总结
- 九道大型软件公司.net面试题!一定得看(附答案)
1:a=10,b=15,在不用第三方变量的前提下,把a,b的值互换 2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列,并返回数组 3:请简述面向 ...
- keyset与entryset
1.基本概述 Set<Map.Entry<K,V>> entrySet() 返回此映射中包括的映射关系的 set 视图. Set<K> ...
- DirectX SDK版本与Visual Studio版本
对于刚刚接触 DirectShow 的人来说,安装配置是一个令人头疼的问题,经常出现的情况是最基本的 baseclass 就无法编译.一开始我也为此费了很大的功夫,比如说修改代码.修改编译选项使其编译 ...
- ActiveX控件的安全初始化和脚本操作 和 数字签名SIGN
摘要:数字签名SIGN保证控件在下载时候的安全性.如果你的代码已经经过数字签名,即使用户IE的安全设置很高也能下载,安装并登记.但是在页面上初始化,或者用脚本运行这个控件,为了保证安全性,还需要进行M ...
- Windows DIB文件操作具体解释-5.DIB和调色板
Windows调色板是256色显卡时期的产物,如今显卡最少也是16bit的了.所以调色板基本上是用不到了的. 可是以下几种情况还是须要去使用和了解调色板: 1.在新显卡上保证256色兼容模式的正常执行 ...
- Swift - 带结果列表的搜索条(UISearchDisplayController)的用法
(注:自iOS8起,苹果便废弃UISearchDisplayController的使用,改为使用UISearchController来实现类似功能,可参考我的另一篇文章“Swift - 使用UISea ...
- Web API设计
Web API设计经验与总结 在移动互联网的时代, Web服务已经成为了异构系统之间的互联与集成的主要手段,各种 Web服务几乎都采用REST风格的Web Api来构建. 通过Http协议的形式来. ...
- MariaDb数据库管理系统学习(二)使用HeidiSQL数据库图形化界面管理工具
HeidiSQL 是一款用于简单化的 MySQL server和数据库管理的图形化界面.该软件同意你浏览你的数据库,管理表,浏览和编辑记录,管理用户权限等等.此外,你能够从文本文件导入数据,执行 SQ ...
- 解决xShell4某些情况下按删除键会输出^H的问题
当我们用Xshell登录进入linux后,在普通模式下,对输入进行删除等操作没有问题. 而在执行中,按delete,backspace键时会产生^H等乱码问题. 这是由于编码不匹配的问题. 解决方法: ...