Jaw*_*wap 6 c algorithm parallel-processing multithreading fibonacci
我正在学习并行化,在一个练习中,我给出了一些我应该提高性能的算法.其中一个是Fibonacci序列生成器:
array[0] = 0;
array[1] = 1;
for (q = 2; q < MAX; q++) {
array[q] = array[q?1] + array[q?2];
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这是不能优化的(通过并行化),因为每个数字都取决于前两个数字(因此间接地取决于所有前面的数字).怎么可以并行化呢?
zw3*_*324 12
Fibonacci序列仅由前两个元素决定; 事实上,你可以以某种方式并行化它,虽然丑陋:
F(n + 2) = F(n + 1) + F(n)
F(n + 3) = F(n + 1) + F(n + 2) = F(n + 1) * 2 + F(n)
F(n + 4) = F(n + 2) + F(n + 3) = F(n + 1) * 3 + F(n) * 2
F(n + 5) = F(n + 3) + F(n + 4) = F(n + 1) * 5 + F(n) * 3
F(n + 6) = F(n + 4) + F(n + 5) = F(n + 1) * 8 + F(n) * 5
Run Code Online (Sandbox Code Playgroud)
希望到现在为止,您可以看到:
F(n + k) = F(n + 1) * F(K) + F(n) * F(k - 1)
Run Code Online (Sandbox Code Playgroud)
因此,在计算了前k个数之后,您可以使用此关系来计算序列中的下一个k项,同时并行化.
你也可以使用Fibonacci数的直接公式来并行计算它们,但这有点太不酷了(对于它可能服务的学习目的来说也可能太简单了).