To P or not to P——这是最伟大的计算机数学问题
时间复杂度
让M是一个确定性的图灵机( Turing machine),它对所有的输入上都会停机(halt,停机问题是逻辑学的焦点,也是第三次数学危机的解决方案)。M的运行时间或时间复杂度是函数f:N→N,其中f(n)是M对任何长度为n的输入所使用的最大步骤数。习惯上我们用n来表示输入的长度。
让f和g是函数f , g : N → R+。如果存在正整数c和n0,使每个整数n≥n0,f(n)≤cg(n),则称f(n)=O(g(n))。 当f(n)=O(g(n))时,我们说g(n)是f(n)的上限,或者更准确地说,g(n)是f(n)的渐近上限,以强调我们在抑制常数因素。
一个简单的C语言for循环
两个for循环的 大O是O(n^2)
P类和NP类
O(n), O(n^2), O(n^3) 都是多项式时间的例子。 属于P类的问题的例子包括乘法,或者寻找一个数组中最大的整数。
在计算复杂性理论中,NP(非确定性多项式时间)是一个用于对决策问题进行分类的复杂性类。NP是一组决策问题,对于这些问题,答案是“是”,它的证明可以在多项式时间内被确定性图灵机证明。
一个正在被算法解决的数独谜题
一个已解决的数独谜题
在O(n)中运行100个元素要1秒的算法,在O(n³)中运行要3个小时。这似乎是一个很大的跳跃,一个以O(2^N)运行的问题,100个元素需要300quintillion(百万的3次方)年。因此,寻找一个多项式解比一个指数解更有价值。
确定问题是否在NP中(可在多项式时间内验证或可由非确定性图灵机解决)。 确定该问题是否是NP-Hard。
NP-Hard:当事情从复杂变成更复杂。
非正式地讲,NP-Hard问题与任何NP问题一样难或更难。更确切地说,任何NP-完备性问题都可以在多项式时间内简化为NP-Hard问题。
哈密顿路径
检查每个顶点。 如果没有通往某个顶点的路径,则返回false。否则返回true。
S={1,3,5,6},N=4。答案是 "真",因为子集{1,3}的总和为4。
将子集中的数字相加。 如果它们等于N,则返回true。否则返回false。
最后:P=NP?
普遍的共识是左边的说法是正确的
公钥加密,或者说我们几乎所有的个人和可识别数据是如何被存储和保护的。 加密哈希,或者说很多信息是如何被加密的,以及像比特币这样的系统是如何被保护的。 计算基因组学,这个领域的一系列问题。
总结
P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。 NP类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。 NP-hard,指所有NP问题都能在多项式时间复杂度内归遇到的问题。 NP完备问题(简单的写法是 NP=P?):NP中的某些问题的复杂性与整个类的复杂性相关联。这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的。这些问题被称为NP-完备问题(NPC问题)。
赞 (0)