`
bulote
  • 浏览: 1310397 次
文章分类
社区版块
存档分类
最新评论

一个简单问题的并行算法

 
阅读更多

设一个数列S[N], 其中S[0] = 0; S[k] = S[k - 1] + k ( 1 <= k < N).

对于这个问题的求解串行算法相当简单,O(N)时间复杂度,不再解释。


并行:

假设有 M 个线程, 其中 M << N;

S[K] = S[K - 1] + K

= S[K - 2] + K - 1 + K

= S[K - 3] + K - 2 + K - 1 + k

...

= S[K - M] + M * K - M * (M - 1)/ 2


假设 M = 2

则S[K] = S[K - 2] + 2 * K - 1, 所以

S[0] , S[2] , S[4] .... S[2 * T] 和 S[1] , S[3] , S[5] .... S[2 * T + 1]为两个独立的序列,因此可以使用两个线程进行并行计算。

同理,M 为其它值时也一样, 如此就实现的并行计算的算法。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics