用于合并排序的PRAM(并行)算法

时间:2012-05-18 14:30:07

标签: algorithm mergesort

我正在阅读算法第3版简介中的多线程合并排序。但是我对以下Merge-Sort算法所需的处理器数量感到困惑:

MERGE-SORT(A, p, r)
1 if p < r
2 q = (p+r)/2
3 spawn MERGE-SORT(A, p, q)
4 MERGE-SORT(A, q + 1, r)
5 sync
6 MERGE(A, p, q, r)

MERGE是标准合并算法。那么这个算法所需的处理器数量是多少?虽然我假设它应该是O(N),但这本书声称它是O(log n),为什么?注意我不是多线程MERGE过程。一个例子的解释将非常有帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

O(log n)值不是运行算法所需的“CPU”数,而是算法实现的实际“并行度”。因为MERGE本身不是并行化的,所以如果O(n)处理器即使你已经全部可用,也无法获得全部好处。

也就是说,合并排序的单线程,串行时间复杂度为O(n log n)。您可以将'n'视为合并的成本,将'log n'视为合并排序的递归调用中的因子,以使数组进入可以合并它的阶段。并行化递归时,但合并仍然是串行的,则保存O(log n)因子,但O(n)因子保持不变。因此,当您有足够的可用处理器时,并行性的顺序为O(log n),但是您无法获得O(n)。

换句话说,即使你有可用的O(n)CPU,它们中的大多数很快就会空闲,并且当大型MERGE开始发生时,越来越少的CPU工作。