【问题标题】:Why does my sieve not see the performance gains it should?为什么我的筛子没有看到应有的性能提升?
【发布时间】:2020-03-02 14:39:52
【问题描述】:

我已经创建了一个 repl。如果你可以直接点击运行并查看素数查找器的筛子和非筛子实现之间的区别...

repl.it

我已经对这个简单的筛子进行了我所知道的所有优化,并期望获得更高的性能提升。

我可以对筛子进行进一步优化以使其运行得更快吗?

代码如下:

/*
  PRIME 2
*/
function prime2(n){
  const primes = [2];
  not_prime: for(let i = 3; i < n; i += 2){
    for(let j = 2; j * j <= i; j++){
      if(i % j === 0){
        continue not_prime;
      }
    }
    primes.push(i);
  }
  return primes;
}

/*
  PRIME 3 - SIEVE
*/
function prime3 (n) {
  const primes = [];
  const sieve = (new Array(n)).fill(true);
  for (let i = 2; i * i <= n; i += 1) {
    if (sieve[i]) {
      for (let j = i * i; j <= n; j = j + (i * 2)) {
        sieve[j] = false;
      }
    }
  }
  makePrimes(sieve, primes, n);
  return primes;
};
function makePrimes(sieve, primes, n){
  for (let i = 2; i < n; i++) {
    if(sieve[i]) {
      primes.push(i);
    }
  }
}

【问题讨论】:

标签: javascript optimization primes


【解决方案1】:

Repl.it 不是一个测试性能的好平台,因为您不知道您的代码是如何在后端运行的。

他们可能会与其他用户共享您的处理器时间,从而导致完成功能的时间更长。

尝试使用本地机器,应该会得到更好的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 2013-08-12
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多