P问题是说可以在polynomial时间内解决的一些问题,(P代表polynomial也就是多项式时间,可以表示成n^2+4n^5之类的式子。)然后获得yes or no的答案(基于decision problem)
np问题,即none polynomial problem,则是不能在polynomial时间内获得yes or no的答案的问题了,但是可以在p时间内验证我获得的答案是否正确(符合要求)。比如,女朋友过生日了给她送什么好,不知道,可能要计算很久,但是你送了就知道她开不开心了。
np-complete则是在np问题中的一部分,可以说是一种交集的概念,在这个集合之外的问题都可以通过reduction转化为np-complete里面的问题,这里有一个概念,如果np-complete里面的问题能够在P时间内解决,那么np问题也可以在p时间内解决了,p=np,当然,这只是如果。
那么reduction是怎么实现的呢?
在进行reduction之前,我们不知道问题A或者问题B是否有解决方案,只是提供一个从解决A的方案到解决B的方案的一个转化过程。通常来说我们进行reduction也是因为知道B是一个NP问题,如果B的解决方案可以转化为A的解决方案,那么A显然也是一个NP问题,就不用再想如何解决A了。
定义:reduction是指,给出A与B两个问题,若A可以被B的subroutine在polynomial的条件下解决,则称A是可以在多项式时间内被reduce为B(polynomially reducible)。关键点在于这个转化的过程是多项式时间的。
表示为A ≤P B(P是左下角标。这里写不了orz),(A->B)
然后有lemma:若可以被reduction,A属于P,那么B也属于P,反之亦然。且这个转化关系可传递。
然后这个链接讲的蛮好的 具体的步骤我自己概括不来啦,意会,意会!
http://www.cs.umd.edu/~meesh/351/mount/lectures/lect28-npcomplete-reductions.pdf