PHP-有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?
有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
把数据分成多组,然后每组分别进行排序,然后把每组排序后的首位和末位取出然后再进行排序,作为每组字符串拼接的依据。
采用多路归并排序,将原数据分解成多个能够一次性装人内存的部分,然后分别把每一部分调入内存完成排序,然后,对已经排序的数据进行归并排序。多路归并的外排序
外排序的方法会消耗大量的IO,效率不会很高所以采用。建议采用用分布式处理,将总的数据根据值的范围,划分成多个不同的子文件,然后逐个处理。处理完毕之后再对这些单词的及其出现频率进行一个归并。实际上就可以利用一个外排序的归并过程。
这是典型的"外排序",你可以看一下“外排序”的资料
(1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存;
(2)对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。
其中,第一个阶段即为内部排序的操作,而第二个阶段涉及到了外部排序中的归并。在前面提到,内存归并排序在开始时是把数组中的每个元素均看作是长度为1的有序表,在归并过程中,有序表的长度从1开始,依次为2、4、8、……,直至有序表的长度len大于等于待排序的记录数n为止。而在对外存文件的归并排序中,初始有序表的长度通常是从一个确定的长度开始而不是从1开始,这是为了能够有效地减少归并的趟数和访问外存的次数,以提高外部排序的效率。所以,在第一阶段要按照初始有序表确定的长度在原文件上依次建立好每个有序表,在第二个阶段再调用对文件的归并排序算法完成排序。