所谓“p=np?”问题,“?”才是关键。
因为不知道等不等于,需要证明的就是等不等于。
简单点的说,计算机解不同的题目,就是将之拆分成加加减减这样最基础的运算。
所以一道题究竟有多难……嗯,主要是对计算机多难,就取决于可以拆分成多少步,或者说花多少时间——计算机基础运算的时间基本一样,所以忽略空间方面的因素,二者大致等价。
这叫时间复杂度,用大o也叫渐进符号表示。
o(1)就是常数级复杂度——最常规的计算,数据规模增加多少,运算花费时间也随之增加多少。
o(logn)就要复杂一点了。
然后还有o(n),o(nlogn),o(nc),o(),o(n!),o(nn)……
一级一级,难度逐层上升,解题所用时间花式暴涨。
其中o(nc)之下,是多项式时间内能解决的,就叫做p类问题。
在此之上的,虽然会随着n的增长,出现指数级甚至更过分的暴涨,却有一个共同点,就是正向解很难,给你一个答案去验证,一般就不难了。
比如大数的质因数分解。
想知道一个大数是不是素数很难,需要从2开始,一直除到根下n。
但告诉你它能被某个数整除,你去验证,则就几步的事。
这类可以在多项式时间里验证的问题,就叫做np问题。
显然所有p类问题,都是np问题,因为是简单可验证的。
但np类问题,是否都是p类问题?是否存在某些特殊的算法,能将这些问题的难度降低到多项式时间可以解决,就仿佛给答案去验证的程度上去呢?
这就是“p=np?”了。
在研究的过程中,又诞生出了npp-hard问题。
所谓npp问题可以约化成为的一类问题。
只要解决这样一个问题,就可以附带的解决一大票问题。只要证明了npc问题有快速算法,就基本证明了p=np。
【np-hard就不说了,这是一类包括nppc的问题,定义是超出np的,所以和这道题没什么关系。】
因为不知道等不等于,需要证明的就是等不等于。
简单点的说,计算机解不同的题目,就是将之拆分成加加减减这样最基础的运算。
所以一道题究竟有多难……嗯,主要是对计算机多难,就取决于可以拆分成多少步,或者说花多少时间——计算机基础运算的时间基本一样,所以忽略空间方面的因素,二者大致等价。
这叫时间复杂度,用大o也叫渐进符号表示。
o(1)就是常数级复杂度——最常规的计算,数据规模增加多少,运算花费时间也随之增加多少。
o(logn)就要复杂一点了。
然后还有o(n),o(nlogn),o(nc),o(),o(n!),o(nn)……
一级一级,难度逐层上升,解题所用时间花式暴涨。
其中o(nc)之下,是多项式时间内能解决的,就叫做p类问题。
在此之上的,虽然会随着n的增长,出现指数级甚至更过分的暴涨,却有一个共同点,就是正向解很难,给你一个答案去验证,一般就不难了。
比如大数的质因数分解。
想知道一个大数是不是素数很难,需要从2开始,一直除到根下n。
但告诉你它能被某个数整除,你去验证,则就几步的事。
这类可以在多项式时间里验证的问题,就叫做np问题。
显然所有p类问题,都是np问题,因为是简单可验证的。
但np类问题,是否都是p类问题?是否存在某些特殊的算法,能将这些问题的难度降低到多项式时间可以解决,就仿佛给答案去验证的程度上去呢?
这就是“p=np?”了。
在研究的过程中,又诞生出了npp-hard问题。
所谓npp问题可以约化成为的一类问题。
只要解决这样一个问题,就可以附带的解决一大票问题。只要证明了npc问题有快速算法,就基本证明了p=np。
【np-hard就不说了,这是一类包括nppc的问题,定义是超出np的,所以和这道题没什么关系。】