algorithm - 从区间返回数字的随机函数

标签 algorithm math random statistics probability

你将如何实现一个从区间 1..1000 返回随机数的函数 如果有一个数字 N 决定达到更高或更低数字的机会?

它应该表现如下: 例如

  • 如果 N = 0 并且我们将生成多次随机数,我们将获得一定的平衡(间隔 1..1000 中的每个数字都有相同的机会)。
  • 如果 N = 2321(我称之为正因子),则很难实现小数(通常会生成大于 900 的数字,有时接近 500 的数字,很少小于 100 的数字)。最高的积极因素是高数字的最高概率
  • 如果 N = -2321(负因子)这将与正因子相反

很明显,生成的数字将创建给定的 N 条特征曲线。你能告诉我如何实现这个目标以及我可以创建什么曲线吗?我在这里有什么可能性?你会如何限制积极因素和消极因素等。

谢谢你的帮助

最佳答案

如果你生成一个统一的随机数,然后将它提高到 > 1 的幂,它会变小,但保持在 [0, 1] 范围内。如果将它提高到大于 0 但小于 1 的幂,它会变大,但保持在 [0, 1] 范围内。

因此您可以在生成随机数时使用指数来选择一个幂。

def biased_random(scale, bias):
  return random.random() ** bias * scale

sum(biased_random(1000, 2.5) for x in range(100)) / 100
  291.59652962214676  # average less than 500

max(biased_random(1000, 2.5) for x in range(100))
  963.81166161355998  # but still occasionally generates large numbers

sum(biased_random(1000, .3) for x in range(100)) / 100
  813.90199860117821   # average > 500

min(biased_random(1000, .3) for x in range(100))
  265.25040459294883   # but still occasionally generates small numbers

关于algorithm - 从区间返回数字的随机函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384855/

相关文章:

mysql - 如何使用 MYSQL 按随机天数更新日期?

算法问题: best matching subsets

algorithm - 使用最小调用次数打印多项式

c - 矩阵运算,从 char 到 float 的错误转换

algorithm - 计算包含 k 个部分的整数部分,每个部分都低于某个阈值 m

c++ - 高效 Xorshift 向前跳过

c - 前一天和后一天,C代码

algorithm - 该算法的空间复杂度是多少(n 或 log(n))?

javascript - 添加 Javascript 变量

c - 石头剪刀布的随机数