e****9 发帖数: 316 | 1 假设有1M个字串,字串的平均长度1MB,需要对这些字串做排序。
因为字串会有变动,而且对排序速度有要求,所以基于写文件的merge sort不适用。
如果直接load到内存,至少需要1TB的内存。
之前想到的是算每个字串的hash值,然后直把hash load到内存中做树或者堆排序,这
样可以减少内存的消耗。但是一般的hash函数会改变原来的排序,所以这个地方会有问题
有没有什么比较好的排序方式? |
p*****2 发帖数: 21240 | 2
问题
distributed?
【在 e****9 的大作中提到】 : 假设有1M个字串,字串的平均长度1MB,需要对这些字串做排序。 : 因为字串会有变动,而且对排序速度有要求,所以基于写文件的merge sort不适用。 : 如果直接load到内存,至少需要1TB的内存。 : 之前想到的是算每个字串的hash值,然后直把hash load到内存中做树或者堆排序,这 : 样可以减少内存的消耗。但是一般的hash函数会改变原来的排序,所以这个地方会有问题 : 有没有什么比较好的排序方式?
|
f*****e 发帖数: 2992 | 3 考古“海量贴”,存成以头两个字母为名字的文件"ab.txt","bc.txt"然后用trie
对每个文件进行排序。
问题
【在 e****9 的大作中提到】 : 假设有1M个字串,字串的平均长度1MB,需要对这些字串做排序。 : 因为字串会有变动,而且对排序速度有要求,所以基于写文件的merge sort不适用。 : 如果直接load到内存,至少需要1TB的内存。 : 之前想到的是算每个字串的hash值,然后直把hash load到内存中做树或者堆排序,这 : 样可以减少内存的消耗。但是一般的hash函数会改变原来的排序,所以这个地方会有问题 : 有没有什么比较好的排序方式?
|
p*****2 发帖数: 21240 | 4
貌似LZ对速度有要求,而且字符串可能会变动的
【在 f*****e 的大作中提到】 : 考古“海量贴”,存成以头两个字母为名字的文件"ab.txt","bc.txt"然后用trie : 对每个文件进行排序。 : : 问题
|
e****9 发帖数: 316 | 5 因为字串多并且可能变化,所以外排序都不可以用。
现在考虑的就是有没有可能有什么hash函数,hash之后不改变原来的排序。
就是hash("abc") < hash("bac") < hash("cab") |