按占比分配完整金条(含x比例小金条)的最优算法设计问询
金条分配最优算法设计问题
现有N根大金条,外加1根重量为大金条x比例的小金条(比如N=10、x=0.5时,总黄金等价于10.5根大金条)。需要把这些完整金条分配给T名小偷,其中小偷i(记为T_i)应获得占比为s_i的份额(比如T=3时,小偷1占40%、小偷2占50%、小偷3占10%)。
要求设计算法,使得分配后各小偷的实际黄金重量占比与目标占比尽可能接近,且金条不可切割。
曾尝试的方案及问题
尝试过给每个小偷分配NearestInteger((总黄金量)*s_i)根金条(总黄金量=N+x),用示例数据测试结果如下:
| 小偷 | 占比s_i | 10.5×占比 | 取整后数量 |
|---|---|---|---|
| 1 | 40% | 4.2 | 4 |
| 2 | 50% | 5.25 | 5 |
| 3 | 10% | 1.05 | 1 |
该方案存在以下问题:
- 分配总量与实际总黄金量不符(示例中分配总和为10,而非10.5),可能出现分配不足或超额;
- 无法分配小金条;
- 无法证明此方案能使实际占比与目标占比最接近。
若将剩余黄金分配给最后一名小偷,会导致该小偷始终承担剩余部分的偏差。
最优定义补充
"最优"指最小化目标占比(s₁,s₂,…,sₙ)与实际占比(r₁,r₂,…,rₙ)之间的欧氏距离;若存在多个最优分配,无需指定具体分配对象。
内容的提问来源于stack exchange,提问作者Greedo
相关产品推荐
相关产品推荐

