读书人

[面试题][急等]大文件重复行有关问题

发布时间: 2012-09-19 13:43:54 作者: rapoo

[面试题][急等]大文件重复行问题
有一个文件长度大如16G的文件,每行都是16个大写字母组成的乱序字符串,总共有多少行不知道,文件内容太大不能全部读入内存,只能一次读入一部分,要判断文件中哪些行是一样的,输出重复的行是哪些。
这个问题有些东西是我们能看得清楚的:
1、必须用O(N)的时间长度去顺序读取文件。
2、不能用O(N)的空间的内存,不论是文件数据、哈希表、哈夫曼编码,还是平衡二叉树。
3、不能修改文件、创建文件。
4、存在一种简单的方法,双重循环,O(N2),但是人家希望找到更好的方法。


[解决办法]
16个大写字母组成的乱序字符串 = 2^(4*26) 用bit存状态, 2^(4*26)/8 = 2^26 byte, 即64M。
用自然顺序,每读取一个,如果对应位置没有改变,则改变对应位置的bit状态,否则重复,输出之。


[解决办法]
2、不能用O(N)的空间的内存,
不论是文件数据、哈希表、哈夫曼编码,还是平衡二叉树。

问一下:这个意思说树就不能用了。对了大内存的数据结构 大于o(n)可以吗

4、存在一种简单的方法,双重循环,O(N2),但是人家希望找到更好的方法。
问一下:能解释下,何种双重循环?
[解决办法]

探讨

16个大写字母组成的乱序字符串 = 2^(4*26) 用bit存状态, 2^(4*26)/8 = 2^26 byte, 即64M。
用自然顺序,每读取一个,如果对应位置没有改变,则改变对应位置的bit状态,否则重复,输出之。

[解决办法]
排序分治啊
分到能装进内存为止。
[解决办法]
按开头字母分到16个文件中
[解决办法]
26^16这么大。安心hash了。

读书人网 >软件架构设计

热点推荐