random - 如何确定 mt19937 算法的大 O 复杂度
问题描述
创建一个长度为 n 的数组来存储生成器的状态
int[0..n-1] MT
int index := n+1
const int lower_mask = (1 << r) - 1 // That is, the binary number of r 1's
const int upper_mask = lowest w bits of (not lower_mask)
从种子初始化生成器
function seed_mt(int seed) {
index := n
MT[0] := seed
for i from 1 to (n - 1) { // loop over each element
MT[i] := lowest w bits of (f * (MT[i-1] xor (MT[i-1] >> (w-2))) + i)
}
}
根据 MT[index] 每 n 个数字调用twist() 提取一个调和值
function extract_number() {
if index >= n {
if index > n {
error "Generator was never seeded"
// Alternatively, seed with constant value; 5489 is used in reference C code[50]
}
twist()
}
int y := MT[index]
y := y xor ((y >> u) and d)
y := y xor ((y << s) and b)
y := y xor ((y << t) and c)
y := y xor (y >> l)
index := index + 1
return lowest w bits of (y)
}
从系列 x_i 生成下 n 个值
function twist() {
for i from 0 to (n-1) {
int x := (MT[i] and upper_mask)
+ (MT[(i+1) mod n] and lower_mask)
int xA := x >> 1
if (x mod 2) != 0 { // lowest bit of x is 1
xA := xA xor a
}
MT[i] := MT[(i + m) mod n] xor xA
}
index := 0
}
解决方案
推荐阅读
- java - C++ JNI UnsatisfiedLinkError
- google-cloud-platform - 使用 Deployment Manager 进行 BQ 计划查询:“P4 服务帐户需要 iam.serviceAccounts.getAccessToken 权限”
- eclipse - 如何捕获从 HID 条码扫描仪发送到文本字段的 *所有 * 字符?
- jquery - 通过 li 的日期对 li 元素进行排序并使用它的全部内容 jquery 移动
- ruby-on-rails - 如何在rails 5中做通配符子域
- java - J2ME 不会连接到远程套接字
- gradle - 如何使用 gradle 运行 aj 单元测试套件
- python - Math.log() 处理数组
- node.js - 承诺
看到错误并且我的输入数据没有写入 Mongo DB。我不知道这里的承诺是什么 - php - 单击提交按钮时页面刷新而不上传文件