小编Get*_*d32的帖子

特定结构中的最大元素

我有长度为 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)

python arrays algorithm sum max

4
推荐指数
1
解决办法
193
查看次数

C++并行随机化

使用蒙特卡洛方法计算 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)

c++ openmp random-seed

3
推荐指数
1
解决办法
91
查看次数

标签 统计

algorithm ×1

arrays ×1

c++ ×1

max ×1

openmp ×1

python ×1

random-seed ×1

sum ×1