用于在大量单词列表中查找一组单词的算法

时间:2017-05-11 11:24:01

标签: algorithm search groovy time-complexity text-search

我正在寻找能够找到与900万条记录列表中的另一组词匹配的一组词的最快算法。

问题:我有一个包含近100,000套单词的列表,我需要在另一个包含900万个单词的列表中搜索每个单词集的匹配项。

我目前的解决方案是这样的,我读取所有记录(来自文本文件)并保存在内存中(以阵列的形式,让我们称之为“搜索列表”)。在构建这个数组时,我按字母顺序对单词组进行排序,一旦添加了所有单词集,我就对整个列表进行排序。我对其他大名单做同样的事情,让我们称之为“数据列表'”。

现在我遍历搜索列表中的每个元素并尝试查找匹配项。一旦找到匹配,我记得它匹配的位置以及我从同一位置进行的下一次搜索。这使我无法一次又一次地为搜索列表中的每个元素迭代整个数据列表。

我认为它超级快,但不幸的是,它不是。完成搜索列表的完整迭代几乎需要15到20分钟。这是不可接受的。

以下是我的代码片段

 int lastPointer = 0
 for(int i=0; i<search list.size(); i++){       
    def this_matched_out = []
    inmem_json_arr[i][0]
    for(int j=lastPointer; j<data list.size(); j++){
        if(data list[j].containsAll(search list[i])){
            this_matched_out.add(data list[j])
            lastPointer = j
        }
    }
    if(this_matched_out.size()>0) - println "found a match for search "+list[i]
    else println "No match found for "+list[i] 
}

有人可以建议我使用更好的算法吗?或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

使用哈希表。无论你的单词集多大,查找都需要O(1)时间。