美剧《基本演绎法》(也就是美版“福尔摩斯”)第 2 季第 2 集中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明“P=NP 问题”,她为独吞成果而下了毒手。然而凶手的动机,并不是千禧年大奖难题那100万美元的奖金——解决了 P=NP 问题,就能够破译世界上所有的密码系统,这里面的利益比100万美元多多了。

剧中只用了一句话来介绍 P=NP 的意义:“能用电脑快速验证一个解的问题,也能够用电脑快速地求出解”。这句过于简单的话可能让大家一头雾水,今天我们就来讲一讲 P vs. NP。

  • 几种问题及其关系
  • 规约一种技巧
  • 如何对问题证明
  • NP-Complete间的规约例子
    • 3SATIndependent Set
    • 3SAT Vertex Cover
    • 3SAT ILP
    • 3SAT Hamiltonian cycle problem
    • Subset sum problem Partition problem
    • Clique problemSubgraph isomorphism problem
    • Partition problem Knapsack problem
    • Vertex Cover Independent Set
    • Independent Set Clique problem
    • Hamiltonian cycle problem Hamiltonian path problem
    • Hamiltonian cycle problem Traveling salesman problem
  • 参考资料

几种问题及其关系

首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题。

  • P Problem:这个应该最易理解,就是一个问题可以在Polynominal的时间的得到解决,当然,是对于任意input size。
  • NP Problem:对于一类问题,我们可能没有一个已知的快速的方法得到问题的答案,但是如果给我们一个candidate answer,我们能够在polynominal的时间内验证这个candidate answer到底是不是我们已知问题的答案,这类问题叫做NP problem。所以很显然 P Problem是NP problem的一个子集。
  • NP-hard Problem:对于这一类问题,用一句话概括他们的特征就是“at least as hard as the hardest problems in NP Problem”, 就是NP-hard问题至少和NP问题一样难。
  • NP-Complete Problem:对于这一类问题,他们满足两个性质,一个就是在polynomial时间内可以验证一个candidate answer是不是真正的解,另一个性质就是我们可以把任何一个NP问题在polynomial的时间内把他的input转化,使之成为一个NP-complete问题(即规约)。NP-Complete Problem问题可以互相转换 (在多项式时间内),只要其中一个问题可以在多项式时间内解决,那么其他问题也都将可以在多项式时间内解决。

规约——一种技巧

归约(reduction): 规约是证明NP-hard问题的一种常用方法,通常用<=<script type="math/tex" id="MathJax-Element-1"><=</script>这个符号来表示。如P<=QP,这个就表示P is reducible to Q , or Q is the reduction from P or P is reduced to Q(P问题可以归约到Q问题,or可以把P归约到Q) 。这里的reduction的符号可以当成是 比较难易程度的小于等于号,意味着P至少比Q容易,或者Q至少比P难。
归约主要做的就是以下两个转化(注意两个转化都要在polynomial的时间内完成)【已知PP 是个NP-hard问题,证新问题QQ 亦是NP-hard问题】,
1. 把P的输入转化到Q的输入;
2. 把Q的输出转化到P的输出。
下图展示了上述规约过程。其中T1T_1 在多项式时间将 P的输入PinputP_{input} 转化成Q的输入QinputQ_{input} ; T2T_2在多项式时间将 Q的输出QoutputQ_{output} 转化成P的输出PoutputP_{output} 。也就是说NP-hard问题PP 可以依赖于对问题QQ 的解决而解决。那么QQ 至少比PP要难,即P<=QP。

如何对问题证明

下面来列出了一些常见的证明问题及其证明套路。

  • 证明NP问题。这个容易,即给你一个结果,你能在polynomial的时间内验证该结果的正确性。
  • 证明NP-hard问题。我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个已被证明了的NPC问题,并把这个NPC问题归约到该问题上去(即NPC<=NP-hard)。
  • 证明NP-Complete问题。分以下两步:
    1. 第一步证明这个问题属于NP;
    2. 第二步,证明这个问题是NP-hard的。

下图列出了几个已被发现NP-Complete问题(更全面的NP-Complete问题列表,见链接A compendium of NP optimization problems,以及List of NP-complete problems),及其规约关系。可以看出所有的NP问题都可以规约到SAT(即NP<=SAT),也就是说SAT至少与NP问题一样难,或者如果解决了3SAT问题,所有的NP问题就解决了。同样的,SAT<=3SAT3SAT<=Independent SetIndependent Set<=Vertex Cover OR Clique

规约关系具有传递性,所以有3SAT<=Vertex CoverNP<=NP-Complete。 事实上,由于NP-Complete⊂\subset NPNP<=NP-Complete,可以推导出 所有的NP-Complete 可以相互规约,也就是所有的NP-Complete都是等价的。

NP-Complete间的规约例子

1. 3SAT<=Independent Set

  • 在图G中若顶点集合S满足其中的任意两个顶点之间不存在边,则称S为独立集。The input of Independent Set is a graph GG and a number mm(独立集问题的两个参数:图GG以及独立集的大小mm), the problem is to find a set of mm pairwise non-adjacent vertices(问题是找到GG的一个大小为mm的独立集).

  • 转化过程:Given an instance 3SAT problem with mm clauses, create an instance (G,m)(G,m) of Independent Set as follows:

    • Graph G has a triangle(edge or vertex) for each clause, with vertices labeled by the clause’s literals
    • Add edge between any two vertices that represent opposite literals.
    • The goal gg is set to the number of clauses.
      The graph below corresponding to (x¯∨y∨z¯)∧(x∨y¯∨z)∧(x∨y∨z)∧(x¯∨y¯)(\bar{x}\lor y\lor \bar{z})\land(x\lor \bar{y}\lor z)\land(x\lor y\lor z)\land(\bar{x}\lor \bar{y}) (clearly m=3m=3)
    • 假设上图有一个最大独立集,则每个三角形中有且仅有一个顶点在该独立集中,设该顶点取值为1,其余顶点取值0,则其肯定是一个满足的3SAT的赋值。
  • 容易证明该规约过程用了多项式时间。

  • 把P的输入转化到Q的输入P的输入是包含mm个clause的3SAT表达式;Q的输入当然是转化得到的图形GG以及独立集的大小参数g=mg=m。
  • 把Q的输出转化到P的输出Q的输出是GG的一个大小为gg的独立集;P的输出是3SAT的一个赋值。假设GG中有一个大小为mm的独立集,则一定是1)三角形内部三个顶点只能取一个 2)不属于三角形的边所连接的顶点也只取一个。对于每个clause,如果选择了xx对应的顶点,则令x=1x=1,如果选择了x¯\bar{x}对应的顶点,则令x¯=1\bar{x}=1. 则该赋值是满足的。

2. 3SAT <= Vertex Cover

  • 图的顶点覆盖(有时是节点覆盖)是一组顶点的集合,使得图的每个边缘至少与集合中的一个顶点相连接。在这里Vertex Cover问题是给定图GG和点集的个数gg,要找到图GG的一个大小为gg的点覆盖。(我们常说的最小顶点覆盖的问题称为顶点覆盖问题,毫无疑问,它也是一个NP-Complete问题)。
  • 转化过程

    • 按照如下方法构造Graph,对应每一个变量xix_i,我们构造点二元点对 xix_i和x¯i\bar{x}_i; 对于每一个clause,我们构造三角形的三个顶点,这3个点直接彼此有边,假设这三个点叫A,B,CA,B,C,我们要建立A,B,CA,B,C这三个点和该clause的联系:假设我们的clause是 (x1∨x¯2∨x¯3)(x_1\lor\bar{x}_2\lor\bar{x}_3) 我们就把x1x_1和AA连起来,x¯2\bar{x}_2和BB连起来,x¯3\bar{x}_3和CC连起来。
    • 下面的graph对应于(x1∨x¯2∨x¯3)∧(x1∨x2∨x4)(x_1\lor\bar{x}_2\lor\bar{x}_3)\land (x_1\lor{x}_2\lor{x}_4)。
    • 若上图存在最小点覆盖,则将二元点对中在该最小点覆盖中的那一个赋值为1。则该赋值就是一个满足3-SAT的赋值。
  • 假设有mm个clause,nn个变量。则该规约过程建立了3m+2n3m+2n个点,n+3m+3mn+3m+3m个边。显然可以在多项式时间完成该转换。

  • 把P的输入转化到Q的输入P的输入是包含mm个clause的3SAT表达式;Q的输入当然是转化得到的图形GG以及覆盖集的大小参数g=2m+ng=2m+n。
  • 把Q的输出转化到P的输出Q的输出是GG的一个大小为g=2m+ng=2m+n的覆盖集;P的输出是3SAT的一个赋值。假设有图GG的一个大小为g=2m+ng=2m+n的顶点覆盖,则其中必定包含所有二元点对中的一个点和三角形的两个顶点。对于每个clause对应的三角形的三个边必定被至少一个点覆盖,所以有一个可满足的真值赋值;对于每个二元点对,如果xix_i在SS中,则xi=1x_i=1,如果x¯i\bar{x}_i在SS中,则xi=0x_i=0。

3. 3SAT <= ILP

  • ILP就是Integer Linear Programming,即所有变量都要求是整数。
  • 转化过程
    • 对于 每个clause,我们都对应于ILP中的一个constraint,比如 3SAT中有4个变量,x1x_1,x2x_2,x3x_3 和x4x_4, 则ILP中也有同样的这4个变量,并且我们要求他们都是只能取0 或 1。对于一个clause,如(x1∨x¯2∨x¯3)(x_1\lor\bar{x}_2\lor\bar{x}_3),我们对应的constraint是 “x1+(1−x2)+(1−x3)=1x_1+ (1-x_2)+(1-x_3)=1。很显然了,ILP中的变量选0对应于3SAT中的变量选00,ILP中的变量选1对应于3SAT中的变量选11.
    • 3SAT问题(x1∨x¯2∨x¯3)∧(x1∨x2∨x4)(x_1\lor\bar{x}_2\lor\bar{x}_3)\land (x_1\lor{x}_2\lor{x}_4)对应的ILP如下:
      {x1+(1−x2)+(1−x3)=1x1+x2+x4=1

      \begin{cases}x_1+ (1-x_2)+(1-x_3)=1\\x_1+x_2+x_4=1\end{cases}

  • 至于input/output的转换,就如转换过程的描述,异常简单。在此不再叙述。

4. 3SAT <= Hamiltonian cycle problem

  • 转化过程

    • 对每个变量xi(1≤i≤n)x_i (1\le i\le n),创建3m+33m+3个顶点,命名为vi,1,vi,2,⋯,vi,3m+3v_{i,1},v_{i,2},\cdots,v_{i,3m+3},并且对相邻序号的两个顶点添加互相之间的有向边。如果 xi=1x_i=1,则形成从左向右的一个路径;如果 x¯i=1\bar{x}_i=1,则形成从右向左的一个路径。
    • 对每个1≤i≤n−11\le i \le n-1,添加四条有向边(vi,1,vi+1,1),(vi,3m+3,vi+1,3m+3),(vi,1,vi+1,3m+3),(vi,3m+3,vi+1,1)(v_{i,1},v_{i+1,1}), (v_{i,3m+3},v_{i+1,3m+3}),(v_{i,1}, v_{i+1,3m+3}), (v_{i,3m+3},v_{i+1,1})。
    • 添加两个节点s,ts,t,添加有向边(s,v1,1),(s,v1,3m+3),(vn,1,t),(vn,3m+3,t)(s,v_{1,1}),(s,v_{1,3m+3}),(v_{n,1},t),(v_{n,3m+3,t})。然后再添加有向边(t,s)(t,s)。这时得到的图中有 hamiltonian cycle,其中一个如下图的虚线所示。
    • 对于每一个clause cj=z1z2z3c_j=z_1z_2z_3,创建对应的顶点cjc_j。如果z=xiz=x_i,则添加有向边(vi,3j,cj)和(cj,vi,3j+1)(v_{i,3j},c_j)和(c_j,v_{i,3j+1}); 如果z=x¯iz=\bar{x}_i,则添加有向边(cj,vi,3j)和(vi,3j+1,cj)(c_j,v_{i,3j})和(v_{i,3j+1},c_j)。这里1≤j≤m,1≤i≤n1\le j\le m, 1\le i\le n。如对子句c=x1∨x¯2∨x4c=x_1\lor\bar{x}_2\lor x_4 生成如下图中红色所示。如果选择子句中x1=1x_1=1,则x1x_1对应的路径为从左向右;如果选择x¯2=1\bar{x}_2=1,则x2x_2对应的路径为从右到左;如果选择x4=1x_4=1,则x4x_4对应的 路径为从左到右。这样我们就得到了最终的图GG。
    • 若图GG有Hamiltonian cycle,则对每一个变量xix_i对应的路径都是单向的,若为从左到右,则xi=1x_i=1;若为从右到左,则xi=0x_i=0。则该赋值肯定是3SAT可满足的。
  • 该转化过程要创建(3m+3)n+m+2(3m+3)n+m+2个点和(3m+2)×2×n+4(n−1)+5+2m(3m+2)\times 2\times n +4(n-1)+5+2m个边,是多项式时间的。
  • 把P的输入转化到Q的输入P的输入是包含mm个clause,nn个变量的的3SAT表达式;Q的输入当然是转化得到的包含(3m+3)n+m+2(3m+3)n+m+2个点和(3m+2)×2×n+4(n−1)+5+2m(3m+2)\times 2\times n +4(n-1)+5+2m个边的图形GG。
  • 把Q的输出转化到P的输出Q的输出是GG的一个Hamiltonian cycle;P的输出是3SAT的一个赋值。

5. Subset sum problem <= Partition problem

  • 问题描述:

    • Subset sum problem:given a set (or multiset) of integers T=(t1,t2,⋯,tn)T=(t_1,t_2,\cdots,t_n), is there a non-empty subset whose sum is kk。
    • Partition problem: partition problem (or number partitioning) is the task of deciding whether a given multiset WW of positive integers can be partitioned into two subsets W1W_1 and W2W_2 such that the sum of the numbers in W1W_1 equals the sum of the numbers in W2W_2.
  • 转化过程:

    • 给定一个子集和的实例为T=(t1,t2,⋯,tn)T=(t_1,t_2,\cdots,t_n),数kk。设∑t∈Tt=A\sum_{t\in T}t=A,则在TT的基础上添加两个数{2A−k,A+k}\{2A-k,A+k\},组成一个划分问题的实例WW,即

      W={T,2A−k,A+k}.

      W=\{T,2A-k,A+k\}. 则∑w∈Ww=4A\sum_{w\in W}w=4A。

    • 假设找到了WW的一个划分W1W_1和W2W_2,则有
      ∑w∈W1w=∑w∈W2w=2A。

      \sum_{w\in W_1}w=\sum_{w\in W_2}w=2A。而且,新添加的两个元素肯定不会同时在W1W_1或W2W_2里,否则二者所在的子集的元素和必定大于二者之和3A>2A3A>2A。2A−k2A-k所在的子集的其它元素就是一个满足子集和问题的子集。

  • 把P的输入转化到Q的输入P的输入是集合TT以及数kk;Q的输入是W={T,2A−k,A+k}.W=\{T,2A-k,A+k\}.

  • 把Q的输出转化到P的输出Q的输出是WW的二划分W1W_1和W2W_2,有∑w∈W1w=∑w∈W2w\sum_{w\in W_1}w=\sum_{w\in W_2}w;P的输出是2A−k2A-k所在的子集的其它元素集合。

6. Clique problem<=Subgraph isomorphism problem

  • 问题描述

    • Clique problem:给定一个图G=(V,E)G=(V,E)和整数kk,找到GG的大小为kk的团。
    • Subgraph isomorphism problem:给定两个图G1=(V1,E1),G2=(V2,E2)G_1=(V_1,E_1), G_2=(V_2,E_2),能否找到G1G_1的一个子图HH,使得HH与G2G_2同构。
  • 转换过程:
    • 令G1=GG_1=G,构造G2G_2为包含kk个顶点的完全图(即团)。
    • 如果子图同构问题的答案是肯定的,那么枚举GG中的任意kk个顶点并判定其是否是团,复杂度是多项式的CknC_n^k。
  • 把P的输入转化到Q的输入P的输入是图G=(V,E)G=(V,E)和整数kk;Q的输入是G1G_1和G2G_2。
  • 把Q的输出转化到P的输出Q的输出是Yes/No;P的输出是GG的一个团。

7. Partition problem <= Knapsack problem

  • 问题描述:

    • Partition problem: partition problem (or number partitioning) is the task of deciding whether a given multiset WW of positive integers can be partitioned into two subsets W1W_1 and W2W_2 such that the sum of the numbers in W1W_1 equals the sum of the numbers in W2W_2, i.e.

      ∑t∈W1t=∑t∈W2t=∑t∈Wt2.

      \sum_{t\in W_1}t=\sum_{t\in W_2}t=\frac{\sum_{t\in W}t}{2}.

    • Knapsack problem:Given a set of items, each with a weight and a value, determine the number of each item to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible. 给定一个物品集合U={u1,u2,⋯,un}U=\{u_1,u_2,\cdots,u_n\},且每个物品有大小s(u)s(u)和价值w(u)w(u),正整数BB和正数KK,是否存在子集U′⊂UU'\subset U使得
      ∑u∈U′s(u)≤B,∑u∈U′w(u)≥K.

      \sum_{u\in U'}s(u)\le B, \quad \sum_{u\in U'}w(u)\ge K.

    • 转化过程:

      • For each t∈Wt\in W,构造一个item uu 且s(u)=w(u)=ts(u)=w(u)=t, 然后对 B,KB,K添加如下条件

        B=K=∑u∈Uu2,

        B=K=\frac{\sum_{u\in U}u}{2},那么有

        ∑u∈U′s(u)=∑u∈U′w(u)=∑u∈Uu2。

        \sum_{u\in U'}s(u)=\sum_{u\in U'}w(u)=\frac{\sum_{u\in U}u}{2}。

    • 8. Vertex Cover <=Independent Set

      • 问题描述:

        • Vertex Cover:给定一个图G=(V,E)G=(V,E)和整数kk,找到GG的大小为kk的点覆盖。
        • Independent Set:给定一个图G=(V,E)G=(V,E)和整数kk, 找到GG的大小为kk的独立集。
      • 转化过程:
        • 把参数为G=(V,E)G=(V,E)和整数kk的点覆盖问题转化为参数为G=(V,E)G=(V,E)和整数|V|−k|V|-k的独立集问题。
        • 若GG中有|V|−k|V|-k大小的独立集S′S',则GG中的任意一条边的两端点不可能都在S′S'里。也就是说,GG的任意一条边至少与该独立集S′S'之外的其余kk个顶点的某一个关联,即该独立集S′S'之外的其余kk个顶点是GG的一个大小为kk的点覆盖。
      • 把P的输入转化到Q的输入P的输入是图G=(V,E)G=(V,E)和整数kk;Q的输入是图G=(V,E)G=(V,E)和整数|V|−k|V|-k;
      • 把Q的输出转化到P的输出Q的输出是GG的|V|−k|V|-k大小的独立集S′S',P的输出是V−S′V-S'.

      9. Independent Set <= Clique problem

      • 问题描述:

        • Independent Set:给定一个图G=(V,E)G=(V,E)和整数kk, 找到GG的大小为kk的独立集。
        • Clique problem:给定一个图G=(V,E)G=(V,E)和整数kk,找到GG的大小为kk的团。
      • 转化过程:
        • 把GG的大小为kk的独立集问题转化为补图G¯\bar{G}的大小为kk的团问题。
        • 如果找到补图G¯\bar{G}的大小为kk的团,则该团内的任意两个顶点在原图GG中没有连接边,即该团的kk个顶点是原图GG的大小为kk的独立集。
      • 把P的输入转化到Q的输入P的输入是图G=(V,E)G=(V,E)和整数kk;Q的输入是补图G¯\bar{G}和整数kk;
      • 把Q的输出转化到P的输出Q的输出是补图G¯\bar{G}的kk大小的独立集S′S',P的输出是V−S′V-S'.

      10. Hamiltonian cycle problem <= Hamiltonian path problem

      • 问题描述:

        • Hamiltonian cycle problem:a graph cycle (i.e., closed loop) through a graph that visits each node exactly once
        • Hamiltonian path problem: a graph path between two vertices of a graph that visits each vertex exactly once.
      • 转化过程:

        • 在原图GG基础上再添加s,w,ts,w,t三个顶点,任选GG中一点uu,连接(s,u),(w,t)(s,u),(w,t)以及连接uu的所有相邻节点与ww,生成新图G′G'。如上图所示。
        • 假设新图G′G'有一个Hamiltonian path <s,u,v1,v2,⋯,v,w,t><script type="math/tex" id="MathJax-Element-270"></script>,由于u,vu,v为相邻节点,故<u,v1,v2,⋯,v><script type="math/tex" id="MathJax-Element-272"></script>为GG的Hamiltonian cycle。

      11. Hamiltonian cycle problem <= Traveling salesman problem

      • 问题描述:

        • Hamiltonian cycle problem:a graph cycle (i.e., closed loop) through a graph G=(V,E)G=(V,E) that visits each node exactly once。
        • Traveling salesman problem: 即给定一个带权图G′=(V′,E′)G'=(V',E')和数kk,找到一个费用为kk的回路。
      • 转化过程:如何得到G′=(V′,E′)G'=(V',E')和数kk
        • V’=V,k=0..
        • E’为完全图的边。还要定义边的权重:
          w(u,v)={0,if(u,v)∈E1,if(u,v)∉E

          w(u,v)=\begin{cases}0, \mathrm{if} \quad (u,v)\in E\\1, \mathrm{if} \quad (u,v)\notin E\end{cases}

        • 如果G′=(V′,E′)G'=(V',E')有个费用为k=0k=0的回路,则说明这些边都是在GG中存在的,因此是GG的一个Hamiltonian cycle problem。

      参考资料

      • 关于P,NP,NPC等问题

        • http://blog.csdn.net/wwy851/article/details/6082007
        • http://blog.csdn.net/wwy851/article/details/6082025
      • 澄清P问题、NP问题、NPC问题的概念
        http://www.matrix67.com/blog/archives/105
      • 完備 (複雜度)
        http://zh.wikipedia.org/wiki/%E5%AE%8C%E5%82%99_(%E8%A4%87%E9%9B%9C%E5%BA%A6)
      • P/NP/NPC/NP-hard
        http://ccckmit.github.io/ct/htm/book.html
      • Cook-Levin理論
        http://zh.wikipedia.org/wiki/Cook-Levin%E7%90%86%E8%AB%96
        提到了两篇论文
      • A Sample Proof of NP-Completeness
        http://cgm.cs.mcgill.ca/~athens/cs507/Projects/2001/CW/npproof.html
      • 算法导论自学笔记
        http://blog.csdn.net/xiazdong/article/category/1270511
      • Reductions & NP-completeness
        https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/npcomplete.pdf
      • Reductions Between NPCs
        http://mlnotes.com/2013/04/29/npc.html
      • Lecture Notes on Complexity and NP-completeness 1. Reduc
        http://www.cs.berkeley.edu/~vazirani/s99cs170/notes/npc.pdf
      • Reductions Between NPCs
        http://mlnotes.com/2013/04/29/npc.html
      • Everyday encounters with NP-complete problems
        http://cstheory.stackexchange.com/questions/446/everyday-encounters-with-np-complete-problems
      • NP-hardness of an optimization problem
        http://cstheory.stackexchange.com/questions/14787/np-hardness-of-an-optimization-problem?rq=1
      • Is the following optimization problem NP-hard?
        http://cstheory.stackexchange.com/questions/10615/is-the-following-optimization-problem-np-hard
      • Is the following optimization problem (a variant to a previous problem) NP-hard?
        http://cstheory.stackexchange.com/questions/10727/is-the-following-optimization-problem-a-variant-to-a-previous-problem-np-hard?rq=1
      • What are NP-complete problems and why are they so important?
        http://math.stackexchange.com/questions/726/what-are-np-complete-problems-and-why-are-they-so-important

P问题、NP问题、NPC问题的概念及实例证明相关推荐

  1. [zz]澄清P问题、NP问题、NPC问题的概念

     [zz]澄清P问题.NP问题.NPC问题的概念 这或许是众多OIer最大的误区之一.     你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有搜了,这已经 ...

  2. 解读P问题、NP问题、NPC问题的概念

    刚刚读到<数学之美>,突然看到贝叶斯网络的学习属于NPC问题,于是乎在大脑里面回想起NP.NPC等的区别,遂查阅wiki.别人博客纪录如下. ------题记 以下内容转自MSN-Spac ...

  3. P、NP、NPC问题最通俗的讲解

    转:Matrix67原创 什么是P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一.     你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有 ...

  4. P、NP、NPC(NP完全问题)、NP-hard问题概述

    P.NP.NPC(NP完全问题).NP-hard问题概述 一.概念总结 1.P问题: 能在多项式时间内解决的问题 2.NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时 ...

  5. P、NP、NPC问题

    转自:http://blog.csdn.net/wwy851/article/details/6082007 最近看了很多关于P.NP和NPC问题的文章,但是都不是很系统全面,很多叙述的也不太清楚,有 ...

  6. 【算法】P问题 NP问题 NPC问题 NPH问题的定义与理解

    一.前言 二.多项式 三.时间复杂度 四.P问题 五.NP问题 六.NPH问题,NPC问题 七.已经被证明的NPC问题 八.一些具体问题的总结 九.总结 一.前言 在讨论算法的时候,常常会说到这个问题 ...

  7. (数学)P、NP、NPC、NP hard问题

    概念定义: http://m.elecfans.com/article/757041.html https://www.cnblogs.com/AndyJee/p/5048556.html P问题:能 ...

  8. P、NP、NPC 问题解释

    P.NP.NPC 问题解释 行文目的 什么是多项式算法 什么是P问题 什么是NP问题 NP问题与P问题的关系 NPC问题 什么是约化(Reducibility) 什么是NPC问题 NP-hard问题 ...

  9. P、NP以及NPC问题

    P.NP.NPC 概念 > P问题:能够在多项式时间内解决的决策问题. -举例: 图搜索问题.最短路径问题.最小生成树问题······ > NP问题:不能在多项式时间内解决或不确定能不能在 ...

最新文章

  1. 如何解决uiaotomator定位工具报错
  2. Java基础学习总结(17)——线程
  3. armbian nginx 部署博客_从零开始搭建服务器之更加优雅地部署项目
  4. powerbuilder中实现多线程同步查询_Power Query中的“追加查询”可以实现合并多个工作表和工作簿...
  5. sql中的遇到的有问题的
  6. 统计iOS项目的总代码行数的方法
  7. XJava程序设计专家门诊
  8. 云图说|玩转华为HiLens之端云协同AI开发
  9. [设计纹理素材]可爱手绘淡雅清新图案花样背景素材
  10. 用layui实现下拉框select多选,取值
  11. 以太网详解(一)-MAC/PHY/MII/RMII/GMII/RGMII基本介绍
  12. 无PS只需几步操作轻松改变图片尺寸大小,而且一点都不失真!
  13. 计算机音乐多幸运,多幸运(伴奏) 韩安旭 多幸运(伴奏)歌曲,多幸运(伴奏)mp3在线试听 - 5nd音乐网...
  14. 嵌入式要学习哪些内容?
  15. vue---隐藏登录页面导航栏,登录成功跳转页面出现导航栏
  16. catia曲面扫掠命令详解_4.3.3.15-扫掠曲面之二次曲线_两条引导线扫略
  17. 百度云盘转存阿里云盘工具下载
  18. 智慧教室—基于人脸表情识别的考试防作弊系统
  19. 算法练习 Week1
  20. 软件测试技术(五)软件测试流程

热门文章

  1. 【大学物理·恒定电流的磁场】磁场对载流导线的作用
  2. My feelings
  3. 超好看的个人网页,你还不fork一下?
  4. R语言ggsurv生存曲线一页多图的实现
  5. Linguistic Data Consortium (LDC) 介绍
  6. 新生赛第一题:dls的黑粉
  7. Java面向对象与代码编写
  8. ORACLE ERP 系统架构与应用实践
  9. POJ 2356 Find a multiple 神题 传说中的经典.
  10. Odoo产品分析 (三) -- 人力资源板块(3) -- 休假管理(1)