这一周的内容是近似算法(Approximation Algorithm)。
对于许多的问题的算法,我们通常目标在于设计一个可以在多项式时间内运行的算法。然而,上一节的NP问题告诉我们这样的算法不一定存在。近似算法其实是针对NP难问题的一种退让,对于许多P不等于NP的最优化问题,无法在多项式时间内找到最优解。因此,如果可以只求一个我们可以接受的解,而不是非要最优解,那么可能存在一个多项式时间的算法。
因此,这里的“近似”其实就是针对最优化问题而言的。其主要应用也是用来解决最优化的问题,并且要求其时间花销为多项式级别的时间。
首先,提出一个NP的优化问题,即NPO问题。
不同的NOP问题的相似程度可能有非常大的差别。
一个NP优化问题P可以用一个四元组(I, Sol, m, goal)来表示,也就是:
I : I是P的实体的集合,可以在多项式时间内被识别;
Sol: 给定一个x∈ I, Sol(x)表示x的可能的解的集合;对于任意的y∈ Sol(x), |y|是|x|的多项式;给定任何|x|的多项式x和y,如果有y∈ Sol(x),那么这个问题可以在多项式时间内决定。
m: 给定一个实例x∈ I,y∈ Sol(x), y是x的一个可行解,m(x,y)表示y的值,并且,可以在多项式时间内被解决的函数
Goal ∈ {max, min}。表示这是一个最大化问题还是最小化问题。
下面定义一个NPO类:
类NPO是所有NP优化问题的集合。NPO问题的目标是,对于一个实体x,找到一个最优解,也就是一个可行解y使