作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何以难以预测的顺序遍历固定范围的整数(比如 100000-999999)?
即我想要一些更优雅的东西,而不仅仅是 A) 选择一个随机数,然后 B) 检查它是否已经被使用,如果是,则返回步骤 A,原因如下(除非你能说服我否则):
最佳答案
线性同余随机数生成器(在 Knuth 的第 2 卷中详细介绍)将以一种不容易预测的方式逐步遍历给定范围内的每个值而不重复。基本语句是
v = k * v + l mod m
其中 m 是集合的大小,k 和 l 与 m 互质(我相信这足以保证它按预期工作),v 是使用的值。以或多或少随机的方式选择初始值,然后从那里开始。
一个优点是它的编写速度相当快,前提是您可以避免溢出(通过限制 k 和 m,或使用任意精度的算术例程)。
关于algorithm - 您如何以不可预测的顺序遍历整数范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955984/
我是一名优秀的程序员,十分优秀!