np问题

什么是P问题、NP问题和NPC问题

南楼画角 提交于 2019-12-23 04:53:31
转载: http://www.matrix67.com/blog/archives/105 这或许是众多OIer最大的误区之一。 你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。接下来你可以看到,把NP问题当成是 NPC问题是一个多大的错误。 还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍

P,NP,NP_hard,NP_complete问题定义

有些话、适合烂在心里 提交于 2019-12-21 00:29:25
背景:在看李航的《统计学习方法时》提到了NP完全问题,于是摆之。 问题解答:以下是让我豁然开朗的解答的摘抄: 最简单的解释: P:算起来很快的问题 NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案对不对 NP-hard:比所有的NP问题都难的问题 NP-complete:满足两点: 1. 是NP hard的问题 2. 是NP问题 稍微正式的解答: P就是能在多项式时间内解决的问题 NP就是能在多项式时间验证答案正确与否的问题。 所以P是否等于NP实质上就是在问,如果对于一个问题我能在多项式时间内验证其答案的正确性,那么我是否能在多项式时间内解决它? NP_hard是"at least as hard as the hardest problems in NP Problem”, 就是NP-hard问题至少和NP问题一样难。 NP_complete是我能解决这个NP_hard就相当于具备了用相同级别的计算资源解决这个复杂度类里所有NP问题的能力。 比较有趣的结论是:如果我们能把NP-complete集合中的任意一个问题在多项式的时间内解决了,那么所有的NP问题都可以在多项式的时间内解决。 所以四者关系如图: 参考链接:https://www.zhihu.com/question/27039635      http://www.cnblogs.com/Gavin

证明与计算(1): Decision Problem, Formal Language L, P and NP

一曲冷凌霜 提交于 2019-12-21 00:29:08
0x01 从判定问题到形式语言 这篇讲知识证明的wiki([1]): https://en.wikipedia.org/wiki/Proof_of_knowledge 里面有一句话: Let x be a language element of language L in NP 这篇讲NPC的文章([2]) http://www.cs.princeton.edu/courses/archive/spr11/cos423/Lectures/NP-completeness.pdf 里面提到Decision Problem([4),Decision Problem就是判定yes/no的问题,一个Decision Problem Q 可以等价于一个Formal language L : L = {x ∈ {0,1}* : Q(x) = 1} 资料[4]里举例了Graphs, Deterministic Finite Automaton, DFA 问题, Context Free Grammar, CFG 问题,Turing Machine问题,素数分解, Boolean satisfiability problem 等等都可以通过编码成字符串,进而转成形式语言。 例如,下面是一个上下文无关语言的产生式: S->XSY|e X->aX|a Y->bY|e 可以编码成: a list of

P、NP、NP-Complete、NP-Hard问题

人盡茶涼 提交于 2019-12-21 00:28:36
P、 NP、NP-Complete、NP-Hard这些 概念都是用来描述一个问题的难度的。即一个问题能否在以上时间内求解,或者验证一个解是否符合一个问题。 在下面的讨论中,我们假设问题的输入规模是n,那么问题的解决时间,或者验证时间都应该是n的一个函数,记为f(n). 1、 规约(Reduction) :将一个问题,等价转换成另一个问题的子问题的方式。 2、P问题:P即Polynomial time,多项式时间。f(n)=a0+a1*n1+a2*n2+a3*n3+…. 。 意思是说给定一个问题,能在多项式时间内 找到 符合该问题的解。此时,问题的时间复杂度是O(nj)。 3、NP问题(Non-deterministic problem):即非确定性多项式时间问题。 NP 就是指能在多项式时间内 验证 一个解是否满足的一类问题。 什么是非确定性问题呢? 有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出。比如,找大质数的问题。有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。再比如,大的合数分解质因数的问题,有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?也没有这样的公式。 这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算

P/NP/NP-Complete/NP-Hard

久未见 提交于 2019-12-21 00:28:07
1,计算复杂性   这是描述一种算法需要多少“时间”的度量。(也有空间复杂性,但因为它们能相互转换,所以通常我们就说时间复杂性。对于大小为 n 的输入,我们用含 n 的简化式子来表达。(所谓简化式子,就是忽略系数、常数,仅保留最“大”的那部分)   比如找出 n 个数中最大的一个,很简单,就是把第一个数和第二个比,其中大的那个再和第三个比,依次类推,总共要比 n-1 次,我们记作 O(n) (对于 n 可以是很大很大的情况下,-1可以忽略不计了)。   再比如从小到大排好的 n 个数,从中找出等于 x 的那个。一种方法是按着顺序从头到尾一个个找,最好情况是第一个就是 x,最坏情况是比较了 n 次直最后一个,因此最坏情况下的计算复杂度也是 O(n)。还有一种方法:先取中间那个数和 x 比较,如偏大则在前一半数中找,如偏小则在后一半数中找,每次都是取中间的那个数进行比较,则最坏情况是 lg(n)/lg2。忽略系数lg2,算法复杂度是O(lgn)。      2,计算复杂性的排序:   根据含 n 的表达式随 n 增大的增长速度,可以将它们排序:1 < lg(n) < n < nlg(n) < n^2 < ... < n^k (k是常数)< ... < 2^n。最后这个 2 的 n 次方就是级数增长了,读过棋盘上放麦粒故事的人都知道这个增长速度有多快。而之前的那些都是 n

P、NP、NP-Complete、NP-hard问题

眉间皱痕 提交于 2019-12-21 00:27:32
Table of Contents 1 遇到难题怎么办? 2 什么是P、NP、NP-Complete和NP-hard 3 P = NP ???? 4 参考 1 遇到难题怎么办? 遇到一个问题,通常我们思考的是如何解它。 于是就有了贪心、分治、动态规划等等算法;但也有一些问题,挠破了头也想不到高效的算法。 怎么办? 假如我们已经知道有那么几个问题,这个世界上所有的聪明人都没能找到高效的算法。 而且我们能把目前的问题通过等价转化的方式,变成这些已知问题的子问题。 这样就能证明我们不笨。 这个将一个问题,等价转换成另一个问题的子问题的方式,叫做 归约 (Reduction). 将问题A归约成问题B的子集 2 什么是P、NP、NP-Complete和NP-hard 这些概念都是用来描述一个问题的难度的。即一个问题能否在以上时间内求解,或者验证一个解是否符合一个问题。 在下面的讨论中,我们假设问题的输入规模是n,那么问题的解决时间,或者验证时间都应该是n的一个函数,记为$f(n)$. P, 即Polynomial time,多项式时间。f(n)=a0+a1*n1+a2*n2+a3*n3+…. 。 意思是说给定一个问题,能在多项式时间内 找到 符合该问题的解。此时,问题的时间复杂度是O(nj). 那不是多项式时间内能求解的问题,就是NP问题吗? 不是的 首先,要理解验证解的概念。给定一个问题

IMDB数据集allow_pickle=False问题

风格不统一 提交于 2019-12-14 07:44:27
在读取IMDB数据集时,报下面的这个错误: 它返回了一个值错误:对于load_data()函数,当allow_pickle = False时,无法加载对象数组。向代码中添加下面两行代码,则可以解决上面的错误 np_load_old = np.load np.load = lambda *a, **k: np_load_old(*a, allow_pickle=True, **k) 来源: CSDN 作者: zxl* 链接: https://blog.csdn.net/zhaoxueli123/article/details/103460958

NP完全问题的证明

时光总嘲笑我的痴心妄想 提交于 2019-12-06 04:43:47
目录 NP完全问题的证明 一、限制法 最小覆盖问题(VC) 子图同构问题 0-1背包(Knapsack) 三元集合的恰当覆盖(X3C) 集中集 有界度的生成树 多处理机调度 二、局部替换法 3SAT问题 两点间的哈密顿通路问题 区间排序 分量设计法 最小拖延排序 NP完全问题的证明 一、限制法 最小覆盖问题(VC) 问题实例 集合 \(S\) 的子集的集合 \(C\) ,正整数 \(k\) 。问 \(C\) 是否有 \(S\) 的大小不超过 \(k\) 的覆盖,即是否包含子集 \(C' \subseteq C\) 使得 \(|C'|=k\) 且 \(\bigcup C'=S\) 。 证明方法:限制 \(\forall c \in C\) , \(|c|=3\) , \(|S|=sk\) ,则为X3C问题。 子图同构问题 问题实例 图 \(G=(V_1,E_1)\) ,H=(V_2,E_2)。 问 \(G\) 中是否有同构于 \(H\) 的子图,即是否有子集 \(V \subseteq V_1\) , \(E \subseteq E_1\) ,使得 \(|V|=|V_2|\) , \(|E|=|E_2|\) ,且存在双射函数 \(f:V_2 \to V\) ,使得 \((u,v) \in E \Longleftrightarrow (f(u),f(v)) \in E_2\) 。

用EM算法求解高斯混合模型

喜夏-厌秋 提交于 2019-12-06 01:45:48
本文从高斯混合模型出发,引出EM算法,最后回归到利用EM算法求解高斯混合模型。理论部分力求详尽不留证明疑点,所以略显冗长。实验部分给出了生成高斯混合分布样本和利用EM算法求解高斯混合模型的matlab代码。 理论部分 高斯混合模型(GMM) 顾名思义,高斯混合模型就是由多个高斯分布混合构成的模型。 K K K 高斯混合分布的概率密度为: p ( x ) = ∑ k = 1 K ϕ k N ( x ∣ μ k , Σ k ) . p(\mathbf{x})=\sum_{k=1}^K \phi_k\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k). p ( x ) = k = 1 ∑ K ​ ϕ k ​ N ( x ∣ μ k ​ , Σ k ​ ) . 这里, ∑ k = 1 K ϕ k = 1 \sum_{k=1}^{K}\phi_k=1 ∑ k = 1 K ​ ϕ k ​ = 1 为混合系数, N ( x ∣ μ , Σ ) = 1 ( 2 π ) D / 2 1 ∣ Σ ∣ 1 / 2 exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } \mathcal{N}(\mathbf{x}|\boldsymbol{\mu},\boldsymbol{\Sigma})=

(转载) MOS管区分NP沟道

浪子不回头ぞ 提交于 2019-12-06 01:02:44
三极管 是流控型器件,MOS管是压控型器件,两者存在相似之处。三极管机可能经常用,但MOS管你用的可能较少。对于MOS管先抛出几个问题: 如何区分P-MOS和N-MOS; 如何区分MOS的G、D、S管脚; MOS管的寄生二极管方向如何; MOS管如何导通; 带着这几个问题,再看下面的内容,你会理解的更快、更多。 原文链接:http://www.elecfans.com/d/711803.html 来源: https://www.cnblogs.com/XingXiaoMeng/p/11954967.html