多项式时间归约:如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y。
- 问题X可以通过多项式时间的基本运算步骤转换为问题Y;
- 问题X多项式次调用求解问题Y的算法,且问题Y可以在多项式时间内被求解。
可以记为:X ≤p Y
需要注意的是,问题X转换为问题Y之后,问题Y的运行时间是建立在问题Y的输入上。
对于这个定义,可以简单理解为:求解问题Y算法需要多项式时间,问题X转换为问题Y需要多项式个基本运算加上多项式次调用求解问题Y的算法。因此总共需要的时间是:多项式 + 多项式 * 多项式。
根据以上定义,可以得到三个定理:
- 假设X ≤p Y,如果Y能够在多项式时间内求解,那么X也能在多项式时间内求解。
- 假设X ≤p Y,如果X不能在多项式时间内求解,那么Y也不能在多项式时间内求解。
- 如果X ≤p Y且Y ≤p X,那么X和Y是等价的。
归约的几种技巧:
1. 简单的恒等归约:比如最大独立集和最小点覆盖。
2. 从特殊情况到一般情况:比如点覆盖 ≤p 集合覆盖。
3. 利用gadgets:比如3-SAT ≤p 独立集。
自归约:将求解问题归约成判断问题,如果判断问题能够解决,那么就可以利用判断问题来解决求解问题。
比如最小点覆盖问题,假如我们能判断一个图中是否存在点数为k的最小点覆盖。于是可以遍历图中的每个顶点,如果删去这个顶点以及和这个顶点相连接的边,图中只存在点数为k-1的点覆盖,那么就可以判定该顶点是最小点覆盖中的顶点,不断重复这个操作,就可以找到最小点覆盖。