是否有任何算法使用小于数据长度的缓冲区从串行输入中对数据进行排序?
例如,我有100个字节的串行数据,只能读取一次,40个字节的缓冲区。我需要打印出已排序的字节。
我在Javascript中需要它,但是任何一般的想法都值得赞赏。
答案 0 :(得分:3)
这种分类不可能一次性完成。
使用您的示例:假设您已经填充了40字节缓冲区,因此您需要开始打印字节以便为下一个缓冲区腾出空间。要打印出已排序的数据,必须先打印最小的字节。但是,如果尚未读取最小字节,则无法将其打印出来!
与您的问题最相关的拟合可能是external sorting算法,这些算法需要多次传递才能对无法放入内存的数据进行排序。也就是说,如果你有可以存储处理过程输出的外围设备,你可以在O(log(N / M))遍中对大于你的内存的数据进行排序,其中N是问题的大小,M是记忆的大小。
用于外部分类的经典存储外围设备是磁带机;但是,相同的算法适用于磁盘驱动器(无论何种类型)。此外,随着缓存层次结构的深入增长,外部排序的原则即使对于内存中的排序也变得更加相关 - 尝试查看cache-oblivious算法。