【发布时间】:2014-10-19 21:27:38
【问题描述】:
我有 n 个 T 类型的项目数组,以及一个为每个项目分配一个类别的分类函数 f(t)数字,从 O 到 k-1。 (k 是类别的数量)。 目标是将数组分成 k 个段,每个类别一个,然后重新排列项目,使它们都在正确的段中。
使用两个不同的输入和输出数组,我可以在 O(n) 中完成,但我需要就地完成(即使用交换作为基本操作),如果可能的话,使用可并行化的算法。
一个想法是一个接一个地做一个片段(首先将所有 0 交换到开头 [O, i0] 的片段上,然后全为 1(从 i0) 到之后的新段,等等)。这将是 O(n * k)(n 越来越小),但不可并行化。
另一种方法是使用 O(n log n) 中的排序算法,该算法可能是可并行化的,但这可能不是最优的,因为大多数项目比较相等.
我的问题是什么是解决这个问题的好方法,以及这个问题在文献中如何称呼?
【问题讨论】:
-
这里是部分副本(不讨论并行化):stackoverflow.com/questions/15682100/…。并行化的一种方法是分成几部分;安排好每一件作品;然后就地并行合并(最后一个不是 O(n)。)希望能给你一些搜索键。
标签: arrays algorithm sorting parallel-processing