分数规划用于解决下面的问题:
$$ c\left(x\right)=\frac{a\left(x\right)}{b\left(x\right)},x\in X $$
$$ c_m=c\left(x_0\right)=\max\left\{c\left(x\right)|x\in X\right\} $$
其中b(x)是正值函数,要求我们求cm。由于|X|可能非常大,我们往往无法进行暴力求解,需要转换问题。
容易发现:
$$ c\left(x\right)=\frac{a\left(x\right)}{b\left(x\right)}\Rightarrow a\left(x\right)-c\left(x\right)b\left(x\right)=0 $$
我们定义如下辅助函数:
$$ h_c\left(x\right)=a\left(x\right)-c\cdot b\left(x\right) $$ $$ h\left(c\right)=\max\left\{h_c\left(x\right)|x\in X\right\} $$
很显然:
$$ u>v\Rightarrow\forall x\in X\left(h_u\left(x\right)-h_v\left(x\right)=\left(v-u\right)b\left(x\right)<0\Rightarrow h_u\left(x\right)<h_v\left(x\right)\right) $$
因此函数h严格递减,且函数h为双射,故h的逆函数g存在,同时g也是双射,且g也严格递减。推导得到:
$$ \left\{\begin{array}{l} \frac{a\left(x\right)}{b\left(x\right)}\le c_m\Rightarrow a\left(x\right)-c_m\cdot b\left(x\right)\le 0\\ a\left(x_0\right)-c_m\cdot b\left(x_0\right)=0 \end{array}\right.\Rightarrow h\left(c_m\right)=0 $$
因此我们得知
$$ c_m=g\left(0\right) $$
假设存在方法f,其可以以O(T)的时间复杂度计算h(c),那么我们只需要依靠h的递减性质对c做二分,就可以以时间复杂度O(T*log2(C))计算得到cm。
0-1分数规划是分数规划的一种特例问题,其中X={0,1}^n,即X中的所有元素都是一个n维向量,其每个维度的投影均为0或1。而a(x)=∑ai*xi,b(x)=∑bi*xi。0-1分数规划的一种经典题目就是最优比率生成树:对于无向图G(V,E),为E中每条边赋予一个收益和损失,要求找出G的一个生成树,使得生成树中的所有边收益总和/损失总和的比率最大。可以利用前面对分数规划的推导结果直接求解,我们知道可以对最优比率做二分,接下来只需要了解如何快速求解辅助函数h=max{ax-cbx}即可。我们只需要为每条E中对应的边i赋予权重c*bi-ai即可,之后利用最小生成树算法(Prim或Kruskal)计算得到图中的最小生成树,此时最小生成树的权重加总正好为h(c)的相反值。
参考文献:
[1]胡伯涛.最小割模型在信息学竞赛中的应用[D]