java – 在非常大的字符串列表中查找唯一最长字的大规模处理?

我在输入列表中找到了最长的非重复字符串.代码是here.我的问题是假设输入列表太大而不适合内存.

>如果输入不能适合内存,如何解决这个问题(即假设输入是一篇永无止境的新闻纸词串)?
>可以/如果是,那么,如何使用Hadoop / Map减少概念(任何网址赞赏)

解决方法:

如果输入太大而无法放入内存,则有两种选择:

1)委托数据库或其他一些基于磁盘的结构.这在时间和资源方面将是昂贵的,但您将得到准确的答案

2)使用概率方法,例如Bloom filter,这是一种概率HashSet.这适用于Map Reduce,如下所示:

地图输入< word>元组到< word,bloom_filter>元组,其中单词是尚未重复的最长单词,bloom_filter是迄今发现的所有单词的概率表示

然后你可以减少两个< word,bloom_filter>在组合两个bloom_filters之前,通过比较两个单词长度,并检查每个单词的长度,并检查每个单词的长度.请注意,这可能导致没有最长的单词 – 这是非常有效的,这可以在输入的情况下看到(狗,狗,植物,植物).

上一篇:Java等同于distcc


下一篇:java – 分布式数据聚合,查询,过滤:Hadoop / Mapreduce的任何替代框架? (MR太慢了)