【发布时间】:2014-05-16 04:57:51
【问题描述】:
我有一些来自硬件的数据。数据以 32 字节的块形式出现,并且可能有数百万个块。数据块按如下方式分成两半(一个字母一个块):
A C E G I K M O B D F H J L N P
或者如果有编号
0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
首先是具有偶数索引的所有块,然后是奇数块。是否有专门的算法来正确重新排序数据(按字母顺序)?
限制主要在空间上。我不想分配另一个缓冲区来重新排序:只是一个块。但我也想保持较低的移动次数:一个简单的快速排序将是 O(NlogN)。对于这种特殊的重新排序情况,在 O(N) 中是否有更快的解决方案?
【问题讨论】:
-
在 O(n) 复杂度中无法进行排序。
-
@shiplu.mokadd.im:一般情况下是这样,但是这个数据已经部分排序了
-
当你说“总是按照下面的方式”时,你的意思是顺序总是给定的——第一个块是第一块,第二块是第九块,第三块是第二块,等等?如果是这样,那么您肯定可以编写代码来明确地重新排列它们吗?
-
您确实需要解释您的数据是如何部分排序的。它只是分成两个排序的一半吗?还是两半总是分别包含奇数/偶数元素?
-
好的,我似乎有“数百万块”部分,这表明这里有一些比我在回答中假设的要多。澄清一下:如果有 18 个区块而不是 16 个,那么额外的两个区块会去哪里?在您的情况下是否可能有 18 个块,或者这会被禁止。在重新阅读后,我现在如何理解这一点,是您收到的模式是:
Odd numbered blockeven numbered blocks,而不是 16 个块的固定模式A C E G I K M O B D F H J L N P,可能会像我最初假设的那样重复。这是正确的吗?
标签: performance algorithm sorting optimization language-agnostic