PHP-有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?

PHP-有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?

清晨说ぺ晚安 发布于 2016-11-22 字数 93 浏览 1289 回复 4

有一组逗号分割的数字字符串(假如1G大小以文本形式存储),在内存不足的情况下,如何排序?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

偏爱自由 2017-07-26 4 楼

把数据分成多组,然后每组分别进行排序,然后把每组排序后的首位和末位取出然后再进行排序,作为每组字符串拼接的依据。

虐人心 2017-04-25 3 楼

采用多路归并排序,将原数据分解成多个能够一次性装人内存的部分,然后分别把每一部分调入内存完成排序,然后,对已经排序的数据进行归并排序。多路归并的外排序

瑾兮 2017-02-23 2 楼

外排序的方法会消耗大量的IO,效率不会很高所以采用。建议采用用分布式处理,将总的数据根据值的范围,划分成多个不同的子文件,然后逐个处理。处理完毕之后再对这些单词的及其出现频率进行一个归并。实际上就可以利用一个外排序的归并过程。

想挽留 2016-12-29 1 楼

这是典型的"外排序",你可以看一下“外排序”的资料

(1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存;
(2)对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。
其中,第一个阶段即为内部排序的操作,而第二个阶段涉及到了外部排序中的归并。在前面提到,内存归并排序在开始时是把数组中的每个元素均看作是长度为1的有序表,在归并过程中,有序表的长度从1开始,依次为2、4、8、……,直至有序表的长度len大于等于待排序的记录数n为止。而在对外存文件的归并排序中,初始有序表的长度通常是从一个确定的长度开始而不是从1开始,这是为了能够有效地减少归并的趟数和访问外存的次数,以提高外部排序的效率。所以,在第一阶段要按照初始有序表确定的长度在原文件上依次建立好每个有序表,在第二个阶段再调用对文件的归并排序算法完成排序。