刚看了一个关于生成100个随机整数的排序列表的代码高尔夫问题.然而,突然出现的是,您可以生成一个正增量列表,并将它们添加到运行总计中,这样:
deltas: 1 3 2 7 2
ints: 1 4 6 13 15
Run Code Online (Sandbox Code Playgroud)
实际上,你会使用浮点数,然后标准化以适应某些上限,并且圆形,但效果是相同的.
虽然它不会产生更短的代码,但如果没有排序步骤肯定会更快.但我没有真正处理的事情是这样的:整数分布是否与从均匀分布的概率密度函数生成100个随机整数相同?
编辑:示例脚本:
import random,sys
running = 0
max = 1000
deltas = [random.random() for i in range(0,11)]
floats = []
for d in deltas:
running += d
floats.append(running)
upper = floats.pop()
ints = [int(round(f/upper*max)) for f in floats]
print(ints)
Run Code Online (Sandbox Code Playgroud)
谁的输出(公平骰子滚动)是:
[24, 71, 133, 261, 308, 347, 499, 543, 722, 852]
Run Code Online (Sandbox Code Playgroud)
更新: Alok的回答和Dan Dyer的评论指出,使用指数分布进行增量可以得到均匀的整数分布.