我正在寻找一种方法来整理内存不适合的大量数据(大约 40GB)。
我有大约 3000 万个可变长度的条目,存储在一个大文件中。我知道该文件中每个条目的开始和结束位置。我需要对内存中不适合的数据进行洗牌。
我想到的唯一解决方案是对包含以下数字的数组进行洗牌1
to N
, where N
是条目数,其中Fisher-Yates 算法 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle然后按照此顺序将条目复制到新文件中。不幸的是,这个解决方案涉及大量的查找操作,因此速度会非常慢。
有没有更好的解决方案来均匀分布地打乱大量数据?
首先得到shuffle
问题出在你的脸上。为此,请为您的条目发明一种哈希算法,该算法会产生类似随机的结果,然后对哈希进行正常的外部排序。
现在你已经改变了你的shuffle
into a sort
您的问题变成了寻找适合您的口袋和内存限制的有效外部排序算法。现在应该很简单google
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)