一个简单问题的并行算法

设一个数列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 为其它值时也一样, 如此就实现的并行计算的算法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值