【发布时间】:2014-08-07 02:29:15
【问题描述】:
我在一个数组的中心有一些项目,我想将它们移动到这个数组的前面。例如:
array[8] = {10, 38, 38, 0, 8, 39, 10, 22}
我有一个索引数组
index[6] = {0, 3, 4, 6, 7, 1}
我想将这 6 个项目移到数组的前面
result[8] = {10, 0, 8, 10, 22, 38, 38, 39}
其实顺序无关紧要,只要确保索引在索引数组中的项目总是在索引不在索引数组中的项目之前。
谁能给我一个快速的算法?实际上这是 KNN 问题中的一步,数据数组可能非常大。该算法应尽可能快地运行,所需的额外空间应尽可能小。最好能给我CUDA实现。
更新:与数据数组相比,索引数组的大小非常小。就我而言,它只有大约 200 个。
更新:请注意数据数组的大小可能非常非常非常大!它达到 1M,10M 甚至更高(数据数组加载到 GPU 内存中,这是非常有限的)。任何算法都需要一个与数据数组大小相同的临时数组是不可接受的。
【问题讨论】: