Algorithm 用于合并排序的PRAM(并行)算法 我正在阅读算法第三版介绍中的多线程合并排序。但是,我对以下合并排序算法所需的处理器数量感到困惑: 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) 合并排序(A、p、r) 1如果p

Algorithm 用于合并排序的PRAM(并行)算法 我正在阅读算法第三版介绍中的多线程合并排序。但是,我对以下合并排序算法所需的处理器数量感到困惑: 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) 合并排序(A、p、r) 1如果p,algorithm,mergesort,Algorithm,Mergesort,合并是标准的合并算法。现在这个算法需要多少处理器??虽然我假设它应该是O(N),但这本书声称它是O(logn),为什么?注意,我不是在多线程处理合并过程。用一个例子来解释会很有帮助。提前感谢。O(logn)值不是运行算法所需的CPU数量,而是算法实现的实际“并行性”。因为合并本身不是并行化的,所以即使O(n)个处理器都可用,也无法获得全部好处 也就是说,合并排序的单线程串行时间复杂度为O(n logn)。您可以将“n”视为合并的成本,“logn”视为在递归调用merge sort时计算的因素,以

合并是标准的合并算法。现在这个算法需要多少处理器??虽然我假设它应该是O(N),但这本书声称它是O(logn),为什么?注意,我不是在多线程处理合并过程。用一个例子来解释会很有帮助。提前感谢。

O(logn)值不是运行算法所需的CPU数量,而是算法实现的实际“并行性”。因为合并本身不是并行化的,所以即使O(n)个处理器都可用,也无法获得全部好处

也就是说,合并排序的单线程串行时间复杂度为O(n logn)。您可以将“n”视为合并的成本,“logn”视为在递归调用merge sort时计算的因素,以使数组达到可以合并它的阶段。当您并行化递归,但merge仍然是串行的时,您保存了O(logn)因子,但O(n)因子保持不变。因此,当您有足够的处理器可用时,并行性的顺序是O(logn),但无法达到O(n)


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

我知道O(logn)是并行的。但是在书中描述了这个算法之后,它说这个算法将实现线性加速,从定义上来说,如果这个算法实现了线性加速,那么处理器的数量是O(logn),因为Tp=O(n),所以它是工作优化。尽管后来这本书引入了一个Tp=O((logn)^3)的算法,其中并行度为O(n/(logn)^2)。但我的问题不是平行性!O(lg3n)算法也是一种并行合并算法。但是你自己回答了这个问题。因为您只能通过并行性消除O(logn)因素,所以让O(logn)并行执行=CPU就足够了,以获得最大的好处(没有并行合并)。因此,对于递归深度,我们只使用O(logn)个处理器在Tp=O(n)时间内解决它。因此p*Tp=O(n logn)。谢谢:)我还有一个问题。本书中的模型与婴儿车模型有什么区别??