大多数跳过列表指南我看到使用LCG随机数生成器和以下公式来生成节点高度。
random.generate().trailingZeroBitCount + 1
但是LCG在低阶位中具有差的随机性。这是一个问题,如果是的话,什么是跳过列表的好随机数生成器?
答案 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}}
我使用了arc4random,因为我不知道你在用什么。使用此代码检查随机数生成器是否获得此类分发。