Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm go中一种较好的并行素数筛_Algorithm_Go - Fatal编程技术网

Algorithm go中一种较好的并行素数筛

Algorithm go中一种较好的并行素数筛,algorithm,go,Algorithm,Go,在看了素数筛选代码之后,看到 并行结构的作品,我发现它非常优雅。 然而,它也非常低效,IIRC,相当于 O(n^2)测试m除以 除以每一个小于m的数。我想我可以取而代之 修改它以使用检查整除性的O(n^1.5)操作 除以每一个小于或等于sqrt(m)的数。 然而,这比我预期的要困难得多 我知道这更多的是一个算法问题,但也是一个问题 与并发性非常相关。如何实施这一计划 算法的O(n^1.5)版本 优雅但低效的素筛实现已经为函数式编程社区所熟知。梅丽莎·奥尼尔的这篇文章很好地概述了懒惰的“流”素筛,

在看了素数筛选代码之后,看到 并行结构的作品,我发现它非常优雅。 然而,它也非常低效,IIRC,相当于 O(n^2)测试m除以 除以每一个小于m的数。我想我可以取而代之 修改它以使用检查整除性的O(n^1.5)操作 除以每一个小于或等于sqrt(m)的数。 然而,这比我预期的要困难得多

我知道这更多的是一个算法问题,但也是一个问题 与并发性非常相关。如何实施这一计划
算法的O(n^1.5)版本

优雅但低效的素筛实现已经为函数式编程社区所熟知。梅丽莎·奥尼尔的这篇文章很好地概述了懒惰的“流”素筛,并提出了有效的替代方案。(它使用了Haskell,但无论如何都应该是一本好书)

一个值得关注的地方是,例如,问题。在这些答案中,有一个使用了。

Eratosthenes的筛子在迭代i中识别质数p_i,并在连续迭代中删除所有p_i的倍数。有鉴于此,这里唯一可以并行化的就是剪枝操作。这只能通过一个常数因子来加速,因此您不会以这种方式更改算法的big-O。

通常,给定算法的并发实现不是超线性的。充其量,他们只是根据并行工作者的数量按比例加速算法。一个值得注意的例外是类似于
的查找算法。