algorithm - 当您有一组理想的比率,但其中一些比率低于最小值时,如何找到最合适的?

标签 algorithm math language-agnostic set

假设您有一组理想比率,其总和 = 1。例如,

set = [0.2, 0.1, 0.4, 0.3]

但假设有一条规则规定,如果某个值不等于 0,则这些值都不应低于该值:

min = 0.25

直觉上我们可以说一个合适的是:

set = [0.25, 0, 0.425, 0.325]

但我真的不知道我在那里做了什么。

这种问题有名字吗?什么是通用解决方案?

最佳答案

让这个最小值为m,一个通用的解决方案可能是:

while there is a none zero value smaller then `m`:
   x <- lowest value
   for each y != x:
      y += y*x/ (1-x)
   x <- 0

很容易看出上面的循环在每次迭代中都保留了sum==1,因为:

除 x = 1-x 之外的所有元素的总和
因此,所有增加的总和是

 x/(1-x) * [sum of all elements excluding x] = x / (1-x) * (1-x) = x

因此,在每次迭代中,总和减少和增加相同的值,因此总和保持为 1。

关于algorithm - 当您有一组理想的比率,但其中一些比率低于最小值时,如何找到最合适的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18110833/

相关文章:

c# - 如何有效地旋转数组?

c++ - 我应该使用什么算法和工具来创建 CSS 特异性计算器?

c - 泊松到达分布函数并跟踪它

java - 递归 FFT 错误?

python - 是不是 "bad"在顶层定义闭包,只能在函数内部调用?如果是这样 : alternatives?

scala - promise 的反义词是什么?

language-agnostic - 为什么 E(dfa) 是一种可判定语言?

c# - 在 C# 中从具有依赖接口(interface)的抽象类继承的正确方法

c++ - 旋转矩阵的 Y 旋转

c# - 验证十进制值列表(或该列表的子列表)是否可以等于某个总和