我谷歌这个话题所以我找到了一些东西:
Consider a pipeline of sorters S0 to Sm.
S0 has one input stream (the input sequence), and two output streams.
Si (i = 1 to m-1) has two input streams and two output streams. The
output streams of Si are the input streams of Si+1, for i = 0 to m-1.
Sm has two input streams and one output stream.
S0 reads the input stream, creates "sorted" sub-sequences of size one
and sends these intermittently to one of its two output streams.
Si repeatedly reads two sorted sub-sequences, one from each input
stream, merges them, and writes the double sized sorted sub-sequences
intermittently two one of its output streams.
Sm reads two sorted sub-sequences, one from each input stream, merges
these and produces the resulting output sequence.
Here is an example for a sequence of 8 numbers, where a bar | delimits
sorted sub sequences
2 | 1 | 6 | 8 3 1 | 8 4 8 6 5 4
7 2 3 1 5 6 4 8 ------------> --------> ------> 8 7 6 5 4 3 2 1
--------------> S0 S1 S2 S3 -------------->
------------> --------> ------>
7 | 3 | 5 | 4 7 2 | 6 5 7 3 2 1
我需要在管道模式中使用一些合并排序的伪代码。
答案 0 :(得分:1)
这看起来是使用“流”的Bottom-Up Mergesort(以及here和lecture notes here)的 variantion :
自下而上合并排序是合并排序的非递归变体,其中数组按一系列过程排序。在每次传递期间,数组被分成大小的块m(最初,m = 1)。每两个相邻的块被合并(如在正常的合并排序中),并且下一次传递使用两倍大的m值。
在Pipeline Mergesort中,每个分拣机代表一个通道,因为它组合了相邻的块。但是,与更传统的Bottom-Up Mergesort不同,相邻的块是从两个输入流中读取的匹配对(而不是在相同的流/阵列中相邻)。
在任何情况下,首先尝试 - 这是一个提出实际问题的地方,而不是发布任务:)