我刚看到一个Code Golf问题,关于生成一个有序的100个随机整数列表。然而,萌生在我的脑海中的想法是,你可以生成一个正数delta列表,然后只需将它们加到运行总数中:
deltas: 1 3 2 7 2
ints: 1 4 6 13 15
事实上,您可以使用浮点数,然后归一化以适合某个上限并四舍五入,但效果是相同的。虽然这不会使代码更短,但没有排序步骤肯定会更快。但我真正无法掌握的是:生成的整数分布是否与从均匀分布概率密度函数中生成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)
输出结果(公平的骰子掷出)为:
[24, 71, 133, 261, 308, 347, 499, 543, 722, 852]
更新:Alok的回答和Dan Dyer的评论指出,使用指数分布来生成增量将会得到一个整数的均匀分布。