寻找更优雅的方法来解决这个简单的逻辑任务

罗兰国王

这是我尝试在练习中解决的一个更大问题的一部分。它看起来像这样:

  • x出现的可能性是y 的10 倍

  • z出现的频率比y少 2 倍

我通过计算这样的单个单位解决了这个问题:

const x = 100;
const y = 10;
const z = 5;
const unit = 100 / (x + y + z);

单位等于 0.87 所以当我做 (0.87) + (0.87 * 10) + (0.87 * 5) 我得到 100%(几乎)

然后我生成一个介于 0 和 1 之间的随机数。

const randomNumber = Math.random();
function getValue() {
    if (randomNumber <= 0.87) {
        console.log('x');
    } else if (randomNumber > 0.87 && randomNumber < 95.7) {
        console.log('y');
    } else console.log('z');
}

getValue();

如果 value<0.87 然后我注销 x,如果 value < 0.87+(0.087*10) 我 log y 等等

谁能推荐比这更合乎逻辑和优雅的方式?

学习数学

除了randomNumber > 0.87多余的事实外,你的方式对我来说看起来很干净

如果要存储的值xyz在一个数组,你也许可以写例如一些更清晰的代码:

let prob = [100, 10, 5];
let sum = prob.reduce((a, b) => a + b, 0);
let normalizedProb = prob.map(p => p / sum);
let cummulativeProb = normalizedProb.map((cummulative => p => cummulative += p)(0));
for (let i = 0; i <= 50; i++) {
  let r = Math.random();
  console.log(cummulativeProb.filter(p => r >= p).length);
}

此外,您可能想阅读这篇文章以更快地实现(尽管在 python 中)。但是,代码肯定会更复杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

寻找一种更优雅的方式来解决此任务

寻找更优雅的任务处理解决方案

寻找一种更优雅的方法来通过表达式将MethodInfo转换为Func

有没有更优雅的方法来使用 array.map 在 NodeJS 中解决这个问题?

寻找一种简单的方法来在R中执行Stata的bysort任务

寻找一种更优雅的方法来获取圆柱坐标中的二维numpy方位角数组

C#更优雅的方法来检查异常是否在指定异常列表中?

有没有更优雅的方法来折叠 dplyr 中的两行?

更优雅的方法来避免对集合进行分组的这种单行简化的实现?

有没有更优雅的方法来检查表单默认值?

一种更优雅的方法来实现基本的Groovy

有没有更优雅的方法来查询多个OR和AND上的多对多表?

有没有更优雅的方法来检查freemarker中的变量?

有什么更优雅的方法来解析此字符串?

在 Kotlin 中是否有更优雅的方法来检查 String 是否是有效的 Int?

我可以使用一种更优雅/更优化的方法来制作此连接算法吗?

如何使这个简单的C#代码更高效/更优雅

这个问题有更优雅的解决方案吗?

需要最好的方法来解决这个Mysql PHP日期

Vue.js-有没有更优雅的方法来有条件地应用类?

有没有更优雅的方法来输入映射作为 Clojure 中 stdin 中的对列表?

有没有更优雅的方法来编写带有重叠(嵌套)替代方案的语句?

有没有更有效/更优雅的方法来从开关案例中的功能更改数据?

有没有简单优雅的方法来定义单例?

有没有简单/优雅的方法来将整数范围推入STD向量?

有没有更简单的方法来通过对象解构来分配这个变量?

是否可以从字典值形成键列表?如果没有,有没有更简单的方法来解决这个问题?

寻找一种简单的方法来计算数组之间的成对相关性

寻找更简单的方法来对熊猫进行分组和选择行