对于任何输入字符串,我们需要找到任何顺序单词匹配超级字符串。 即,在输入字符串中的所有词语具有在输出串中的任何顺序发生。 例如,给定数据集:“字符串搜索”的“java字符串搜索”“手册C字符串搜索等于”的“Java搜索代码”“C Java代码搜索” ...
输入: “Java的搜索” 输出:1) “Java字符串搜索” 2) “Java的搜索代码” 3) “C Java代码搜索”
输入: “搜索C” 输出:1) “手册C字符串搜索等于” 2) “C Java代码搜索”
这可以通过文字匹配的单词一个很琐碎的方式来完成。 这里主要是我要寻找一个有效的算法中。
输入:数十亿记录在给定数据集(主要是1〜10个字长度的字符串)。 我需要找到数以百万计的字符串超级字符串。 注意:单词扩展字典的。
预处理你的输入(如果可能),指数出现在数据集中的话。 产生从每个字的一组可能的输出串的映射。 例如,与数据集
0 string search
1 java string search
2 manual c string search equals
3 java search code
4 c java code search
我们得到
c {2,4}
code {3,4}
equals {2}
java {1,3,4}
...
然后,搜索用于给定的输入比赛是作为交叉对应于输入字的集作为简单:
input: "java c"
output: {1,3,4} intersect {2,4} = {4}
如果存储集合只作为排序的列表,交叉点可通过并行地横跨列表扫描线性时间(在输入集的总长度线性)来完成。
你基本上需要找到两套的话,input_words和data_words交集。 如果路口等于input_words,你有一个匹配。
这里有交集高效的算法: 高效名单交集算法
这使我的思想和在O(n * m个)完成的算法[N =尺寸输入,M =大小数据]是。
蟒蛇:
match = True
for word in input.split():
if word in data_words.split(): # linear search comparing word to each word
continue
else:
match = False
break
排序列表上的搜索会更快,哈希查找会更加。 这些在上面的链接详细说明。