在计算复杂性理论中,多项式时间归约是指假设已有解决一个问题的子程序,利用它在多项式时间内(不考虑子程序运行所用时间)解决另一个问题的归约方法。

简介在计算复杂性理论中,多项式时间归约是指假设已有解决一个问题的子程序,利用它在多项式时间内(不考虑子程序运行所用时间)解决另一个问题的归约方法。多项式时间归约有几种不同类型,取决于具体如何使用子程序。

定义多项式时间归约:如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y。1

- 问题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的点覆盖,那么就可以判定该顶点是最小点覆盖中的顶点,不断重复这个操作,就可以找到最小点覆盖。

本词条内容贡献者为:

张尉 - 副教授 - 西南大学