【发布时间】:2010-05-15 12:43:00
【问题描述】:
假设我有 5000 万个特征,每个特征都来自磁盘。
在我的程序开始时,我会处理每个功能,并根据某些条件对某些功能进行一些修改。
在我的程序的这一点上,我正在从磁盘读取一个特征,对其进行处理,然后将其写回,因为我没有足够的内存来一次打开所有 5000 万个特征。
现在假设我要对这 5000 万个特征进行排序,是否有任何优化算法可以做到这一点,因为我不能同时加载每个人?
像部分排序算法之类的?
【问题讨论】:
假设我有 5000 万个特征,每个特征都来自磁盘。
在我的程序开始时,我会处理每个功能,并根据某些条件对某些功能进行一些修改。
在我的程序的这一点上,我正在从磁盘读取一个特征,对其进行处理,然后将其写回,因为我没有足够的内存来一次打开所有 5000 万个特征。
现在假设我要对这 5000 万个特征进行排序,是否有任何优化算法可以做到这一点,因为我不能同时加载每个人?
像部分排序算法之类的?
【问题讨论】:
一般来说,您要查找的算法类称为external sorting。这种排序算法最广为人知的例子可能是Merge sort。
此算法(外部版本)的思想是将数据拆分为可以在内存中就地排序(例如 10 万个)并独立排序每个块(使用一些标准算法,例如 Quick sort )。然后你获取块并合并它们(因此你将两个 100k 块合并为一个 200k 块),这可以通过将两个块中的元素读取到缓冲区中来完成(因为块已经排序)。最后,您将两个较小的块合并为一个块,该块将按正确的顺序包含所有元素。
【讨论】:
abou而不是about和functinal而不是functional。
如果您使用的是 Unix,请使用 sort ;)
这可能看起来很愚蠢,但命令行工具已被编程来处理这种情况,您不必重新编程。
【讨论】: