用于跳过列表实现的随机数生成器

时间:2017-08-02 16:54:03

标签: swift random skip-lists

大多数跳过列表指南我看到使用LCG随机数生成器和以下公式来生成节点高度。

random.generate().trailingZeroBitCount + 1

但是LCG在低阶位中具有差的随机性。这是一个问题,如果是的话,什么是跳过列表的好随机数生成器?

1 个答案:

答案 0 :(得分:0)

如果您使用trailingZeroBitCount == 0,那么您将进行特定分发。在一个随机样本中,我们预计有一半的数字(奇数)有1。我们预计其中1/4会有let randos = (1..<100000).map { _ in return arc4random() } let zeroZeros = randos.filter{ i in i % 2 == 1 } zeroZeros.count let oneOrMoreZeros = randos.filter{ i in i % 2 == 0 }.map { $0 / 2 } let oneZero = oneOrMoreZeros.filter{ i in i % 2 == 1 } oneZero.count let twoOrMoreZeros = oneOrMoreZeros.filter{ i in i % 2 == 0 }.map { $0 / 2 } let twoZero = twoOrMoreZeros.filter{ i in i % 2 == 1 } twoZero.count 等等。

我把它放在一个操场上并得到了这个分布:

{{1}}

Playground run of the above code

我使用了arc4random,因为我不知道你在用什么。使用此代码检查随机数生成器是否获得此类分发。