我有长度为 n 的数组,从中构建这样的序列 b:
b[0] = 0
b[1] = b[0] + a[0]
b[2] = b[1] + a[0]
b[3] = b[2] + a[1]
b[4] = b[3] + a[0]
b[5] = b[4] + a[1]
b[6] = b[5] + a[2]
b[7] = b[6] + a[0]
b[8] = b[7] + a[1]
b[9] = b[8] + a[2]
b[10] = b[9] + a[3]
#etc.
Run Code Online (Sandbox Code Playgroud)
a 可以包含非正值。我需要找到 b 的最大元素。我只想出了 O(n^2) 的解决方案。有没有更快的方法?
def find_max(a):
b = [0]
i = 0
count = 0
while i < len(a):
j …Run Code Online (Sandbox Code Playgroud) 使用蒙特卡洛方法计算 pi。有没有办法使任意数量的线程的随机化都相同?本质上,我正在寻找的是为集合 n 和种子的每个固定组合获得相同的答案,无论我使用的线程数量如何。
double montecarlo(int n, int seed)
{
int pts = 0;
#pragma omp parallel
{
std::mt19937_64 rng(seed);
std::uniform_real_distribution<double> dist(0.0, 1.0);
#pragma omp for reduction(+:pts)
for (int i = 0; i < n; ++i)
{
double x = dist(rng), y = dist(rng);
pts += (x * x + y * y <= 1);
}
}
double pi = 4.0 * pts / n;
return pi;
}
Run Code Online (Sandbox Code Playgroud)