【发布时间】:2011-04-27 13:20:54
【问题描述】:
在串行情况下,排序需要 O(n log n)。如果我们有 O(n) 处理器,我们希望线性加速。存在 O(log n) 并行算法,但它们具有非常高的常数。它们也不适用于没有接近 O(n) 处理器的商品硬件。对于 p 个处理器,合理的算法应该花费 O(n/p log n) 时间。
在串行情况下,平均而言,快速排序具有最佳的运行时复杂度。并行快速排序算法很容易实现(参见here 和here)。然而,它表现不佳,因为第一步是将整个集合分区到单个核心上。我找到了许多并行排序算法的信息,但到目前为止,我还没有看到任何明确的赢家。
我希望在 8 到 32 个内核上运行的 JVM 语言中对包含 100 万到 1 亿个元素的列表进行排序。
【问题讨论】:
-
我认为你的“应该采取”中的 n/p 太多了
-
@Sparr 我不这么认为。我正在区分拥有几个处理器和拥有与被排序的元素一样多的处理器。
-
@CraigP.Motlin 对,但您似乎错误地“分发”了 /p 。应该只有一个 /p。
-
@Sparr 啊,改变了,谢谢。
-
@CraigP.Motlin 我认为你留错了 :)
标签: algorithm sorting concurrency