【发布时间】:2010-12-24 08:59:26
【问题描述】:
刚刚看到一个关于generating a sorted list of 100 random integers 的高尔夫代码问题。然而,突然出现在我脑海中的想法是,您可以生成一个正增量列表,然后继续将它们添加到运行总数中,因此:
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's answer 和 Dan Dyer's comment 指出,使用 exponential distribution 表示增量会得到整数的均匀分布。
【问题讨论】:
-
这不会是统一的。请参阅我的答案或 Rupert Nash 的答案。