算法设计与分析笔记之自身规约

判定问题和优化问题

  • 判定问题:是否存在一个...(如小于k的点覆盖)
  • 优化问题:找出最大/最小的...(最小点覆盖)

因为NPC问题的答案是简单的“是”或“否”(存在或不存在),不适合直接应用于最优化问题,但适合用于判定问题。
尽管证明一个问题是NP完全问题会让我们的目光局限在判定问题。但我们可以利用最优化和判定问题之间存在的关系,对优化的值强加一个界,就可以将一个给定的最优化问题转化为一个相关的判定问题了。这就是自身规约。
自身规约就是将求解(最优化)问题规约到一个判断问题上。

自身规约练习

Ⅰ. 如果存在一个多项式时间算法判断一个图是否存在一个长度为k的路径,则存在一个多项式时间算法要么找到图中一个长度为k的路径要么证明此图不存在长度为k的路径
pf.
假设存在判断一个图G是否存在一个长度为k的路径的多项式时间算法A。
首先用它判断图G是否存在一个长度为k的路径,若不存在,则结束;若存在,则在图中删除一条边e,再用A判断图G=(V, E-e)中是否存在长度为k的一条路径。
若存在,则将该边从图中彻底删除;若不存在,则保留这条边(或者把该边加入这个路径的边集合中)。
重复上述操作,直到图中剩下的就是长度为k的一条路径。

Ⅱ.如果能在多项式时间内判断一个图是否存在一个长度至少为k的路径,那么就可以在多项式时间内找到这个图的一条最长路径
pf.
假设判断出图G=(V, E),存在一个长度至少为k的路径。然后依次加一,直到找出最长路径kmax。
则选取任一边e,在图G=(V, E-e)中判断是否还存在一条长度至少为kmax的路径。
若存在,则在图中删除该边;若不存在,则保留该边(最长路径经过的边e)。
对所有边进行上述操作,最终图中剩下的就是这条最长路径。

解题步骤

  1. 设该判断算法为A,假设判断出图中存在...(大小为k的...)
  2. 删除一条边(或点,看具体是边集还是点集的问题),对删除边(点)后的图运行判断算法A
  3. 若图中还存在...(大小为k的...),则从图中彻底删除该边(点);若不存在,保留该边(点)
  4. 对所有的边(点)调用算法A执行上述操作,最终剩下的就是...(大小为k的...)

你可能感兴趣的:(算法设计与分析笔记之自身规约)