gpt4 book ai didi

random - 是否有一个随机数生成器可以在 O(1) 中跳过/丢弃 N 次绘制?

转载 作者:太空狗 更新时间:2023-10-29 23:10:51 25 4
gpt4 key购买 nike

是否有任何(非加密的)伪随机数生成器可以跳过/丢弃 O(1) 或 O(log N) 但小于 O(N) 的 N 次绘制。


特别是对于并行应用程序,拥有上述类型的生成器将是有利的。要生成随机数数组的图像。可以为此任务编写一个并行程序,并为每个线程独立地生成随机数生成器。但是,数组中的数字将与顺序情况下的数字不同(除了前半部分可能除外)。

如果存在上述类型的随机数生成器,则第一个线程可以使用用于顺序实现的种子来播种。第二个线程也可以用这个种子播种,然后丢弃/跳过第一个线程生成的 N/2 个样本。输出数组将与串行情况相同(易于测试),但仍会在更短的时间内生成。下面是一些伪代码。

#define _POSIX_C_SOURCE 1
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

void rand_r_skip(unsigned int *p_seed, int N)
{
/* Stupid O(N) Implementation */
for (int i = 0; i < N; i++)
{
rand_r(p_seed);
}
}

int main()
{
int N = 1000000;
unsigned int seed = 1234;
int *arr = (int *)malloc(sizeof(int) * N);

#pragma omp parallel firstprivate(N, seed, arr) num_threads(2)
{
if (omp_get_thread_num() == 1)
{
// skip the samples, obviously doesn't exist
rand_r_skip(&seed, N / 2);
}
#pragma omp for schedule(static)
for (int i = 0; i < N; i++)
{
arr[i] = rand_r(&seed);
}
}
return 0;
}

非常感谢大家的帮助。我确实知道可能有证据表明这样的生成器不能存在并且同时是“伪随机”的。我非常感谢有关在哪里可以找到更多信息的任何提示。

最佳答案

当然。 Linear Conguential Generator及其后代可以在 O(log(N)) 时间内跳过 N 数字的生成。它基于 F.Brown 的论文,link .

Here是这个想法的实现,C++11。

关于random - 是否有一个随机数生成器可以在 O(1) 中跳过/丢弃 N 次绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com