文章目录
近似算法(approximation algorithms)
组合优化问题不是最小化问题就是最大化问题,它由以下三部分组成:
1、一个实例(instances)集合D;
2、对于每个实例I属于D,存在I的一个候选解的有限集S(I);
3、D中的一个实例I的每个解a属于S(I),存在一个值f(a),称为a的解值。
用OPT(I)表示最优值f(a*),且它小于等于f(a)。
最优化问题的一个近似算法A是一个多项式时间的算法,使得给出一个实例I属于D,它输出的某个解a属于S(I),将用A(I)表示f(a)。
差界(difference bounds)
对于问题的所有实例I,由近似算法A可以得到也是最想得到的解A是使得|A(I)-OPT(I)|<=K,K是某个常数。
只有很少的NP难的最优化问题,他们的差界是已知的。
困难结果:背包问题
对于背包问题,我们将证明不存在带差界的背包问题的近似算法。
假设存在一个带差界的求解背包问题的近似算法A:
相对性能界(relative performance bounds)
对于最小化问题,定义近似比(approximation ratio):
对于最大化问题,有:
装箱问题(the bin packing problem)
给定尺寸为s1、s2、…、sn的物品u1、u2、…、un的集合,其中sj介于0和1之间,我们需要将这些物品包装到单位容量的最小数量的箱子中。
下面介绍最先适配方法(First Fit)。
所有的箱子初始值为空,考虑把这些物品按照u1、u2、…、un的顺序装箱,为了装物品ui,我们找到最小的序号j使得箱j最多装了1-si的东西,并把物品ui加到箱j中。
设FF(I)标记在I中用FF启发式方法装物品所用箱子数目,设OPT(I)是最优箱子数目:
由于不可能存在两个半空的箱子: