java - 如何使用有偏权重将 x 变量之间的总值 1 相除

标签 java math

我的任务是解决一个我不太确定如何用数学方法解决的问题。

我正在尝试创建一个以 int 数组作为参数的方法。数组的长度会变化,但永远不会为零。数组中的值并不重要,因为该方法将使用下面确定的值覆盖它们。

该方法的目的是将数组中每个位置之间的总计除以 1.0。这很简单,但额外的复杂性是除法应该有偏差。左侧的值应高于右侧的值(请参阅下面的示例输出)。

一个例子是传递一个大小为 7 的 int 数组。我希望输出类似于:

[.3, .25, .15, .1, .09, .07, 0.04]

其中所有值的总和 = 1

我正在使用 Java,但即使是伪代码也会有帮助!

最佳答案

我会生成一个唯一随机数列表,然后通过将所有随机数除以它们的总和来对其进行标准化。

然后对列表进行排序和反转。

int n = 7;

// make a list of n unique random numbers 
double[] randomValues = new Random().doubles(0, 1).distinct().limit(n).toArray();

// normalize the list and reverse sort it
double sum = Arrays.stream(randomValues).sum();
List<Double> array = Arrays.stream(randomValues).boxed()
        .map(d -> d/sum)
        .sorted(Comparator.reverseOrder())
        .collect(Collectors.toList());

您的数组现在应该具有加起来为 1 的随机值,并按相反顺序排序

警告:

您可能希望通过从 1 中减去其他值来实际重新计算最新值,以最大限度地减少舍入误差。这取决于您需要的精度。 如果您需要精确值,则不能使用 double ,而应使用整数(就像我们处理货币一样)。

关于java - 如何使用有偏权重将 x 变量之间的总值 1 相除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58709139/

相关文章:

java - while 循环用于 boolean 用户输入

Java 数字/数学抽象

jquery - 在 div 中以隐藏的溢出居中特定的 li

c# - 按照 mm.ss 格式将 INT 转换为十进制

python - 基于ELO的团队匹配算法

java - 从 Java 执行但不是从命令行执行时出现 NoSuchFieldError

java - 从作业中调用 Controller 操作方法

java - 为什么 Java main() 方法接受 String args 数组?

java - 如何在同一方法中模拟第二个对象?

scala:使用函数定义