您的位置:首页 > 其它

P P-C NP NP-C 以及图灵机问题

2009-11-06 19:04 260 查看
学研究生算法可能很大部分都在讲p,np问题,有他们的地方也少不了图灵机问题。所以偶首先给出上面几个问题的定义。
p:所谓p问题,就是那些能在多项式时间里解决的问题。更标准的定义是确定图灵机能在多项式时间里解决的问题。
p-c:也就是p完全问题(p-coplete),它的定义主要是在complete上,也就是那些在p类中as hard as others的问题。
np问题(non-deterministic polynomial-time problem):np问题是能在不确定图灵机上多项式时间里面解决的问题集合。
np-c:也就是在np里面的一些as hard as others的问题。
确定图灵机:其实我自己理解的确定图灵机就是执行一个状态后只能有一个待选状态被执行。
不确定图灵机:就是执行一个状态后,接下来的状态存在不确定性,图灵机根据算法设计选择不同的状态执行。
多项式时间:也就是算法执行所需要的时间(大概估计),比如:n,log n,nlog n,n的k次方。这些都叫做多项式时间。n!以及n的n次方以上的就不是了,输入规模的大小严重印象算法执行时间,一般都相当长。有前者时间复杂度的问题也是易处理的,后者的就不易处理,就需要借助一些不确定算法求解(probabilitic algorithm 等)。定义应该差不多了吧!

接下来就是判定一个问题属于哪一个复杂类了,注意这里你必须清楚这些所谓的p, np问题都是对算法的时间复杂度的划分。根据不同的时间复杂度我们可以把那个问题归属于某一

类,但是这里有牵涉到他们的包含与被包含问题,的确很复杂,我也不就一一解释了,我也还需要继续学习。就给出一些大概的概念和列子就行了。
我们就举例判断一个字符串是不是回文串来进一步解释:我们的一般算法是直接读取字符串(数组定义)前后的元素一个一个挨着比较就是,这个时间复杂度肯定是在多项式时间里面可以解决的,所以它是属于p的。我们也可以用图灵机来模拟实现这个算法,一根输入带,直接在输入带上按照这个算法操作。状态之间是一一对应的关系,不会出现一对多,所以也是可以在确定性图灵机上多项式时间类解决。同时我们也可以用不确定图灵机解决这个问题,不确定图灵机工作的主要特点是存在不确定性,那么我们就猜测字符串的中间位置,然后从中间位置截断成两个字符串,一半复制到另一条工作带上,直接比较输入带和工作带上的字符串(操作对享受工作待上是前半字符串,输入带上是后半字符串)如果我们切断的地方正好是中间位置,那么我们成功的概率就更高。但是存在对中间字符猜测的不确定性。整个比较过程也能在多项式时间里解决。所以回文既能在确定也能在不确定图灵机上的多项式时间里面解决,这里证明了p问题是属于np问题的。我们来看个np问题,那就是著名的哈密尔顿回路问题。本科的时候我想大家都学习过这个算法,其实我都忘记了当时老师是怎么讲的了。这里我就说说它是怎么被证明是np问题的。问题本身是要找个一个各个结点花销最少的回路。这个问题我们是能用确定的方法决绝,那就是把所有的结点组合找出来,一个组合一个组合的计算开销,最后得出最小开销的那条路径。最坏的情况下有n的n-1次方条可供计算的路径。这个开销是比较大的,算法时间复杂度和输入规模(节点数目)是exponentially增长的。虽然这个方法我们能解决这个问题,但是太不可实际操作。迄今为止也没有证明这个问题不能在多项式时间里面解决。所以她还是个np问题。
其实哈密尔顿回路也是个np-c问题,只是那个证明牵涉到归约问题,归约原理简单,谁都会说,但是操作起来难度我觉得是忒大的。同理但货郎问题也是该类问题。

p是属于np的,但是np是否等于p还是一个有待研究的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: