分数规划学习笔记

分数规划是一种用来求分式极值的算法。

题意可以形式化的看作,给定 \(a_i\)\(b_i\),要求找到一组 \(w_i \in \left \{ 0,1 \right \}\),使得 \(\frac{\sum_{i=1}^{n}a_i*w_i}{\sum_{i=1}^{n}b_i*w_i}\) 最大或最小

解决办法主要有两个,二分以及 Dinkelbach 算法,个人感觉二分法可以解决绝大部分分数规划问题了,所以没有系统学习后一种,如果有时间在补上。

二分法

现在来说二分法,假设当前我们已经二分出了一个答案 \(mid\),现在要判断 \(mid\) 是否可行。

\[\begin{align} &\frac{\sum_{}^{}a_i*w_i}{\sum_{}^{}b_i*w_i}>mid\\ \Longrightarrow &\sum_{}^{}a_i*w_i-mid*\sum_{}^{}b_i*w_i>0\\ \Longrightarrow &\sum_{}^{}w_i*(a_i-mid*b_i) \end{align} \]

那么我们的任务就是判断左式最大值是否大于 0。

所以围绕分数规划出的题目,根本的区别就是这个最大值求法,下面结合例题理解。

例题

这么一写突然发现也没什么好理解的,总之你在发现这是一道分数规划,二分并转移权值后,这题就和分数规划没关系了。

posted @ 2025-07-18 19:17  黑昼白夜  阅读(13)  评论(0)    收藏  举报