你将如何实现一个从区间 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/