字为单位的超字符串搜索指定的字符串(Word-wise super string search fo

2019-10-17 22:23发布

对于任何输入字符串,我们需要找到任何顺序单词匹配超级字符串。 即,在输入字符串中的所有词语具有在输出串中的任何顺序发生。 例如,给定数据集:“字符串搜索”的“java字符串搜索”“手册C字符串搜索等于”的“Java搜索代码”“C Java代码搜索” ...

输入: “Java的搜索” 输出:1) “Java字符串搜索” 2) “Java的搜索代码” 3) “C Java代码搜索”

输入: “搜索C” 输出:1) “手册C字符串搜索等于” 2) “C Java代码搜索”

这可以通过文字匹配的单词一个很琐碎的方式来完成。 这里主要是我要寻找一个有效的算法中。

输入:数十亿记录在给定数据集(主要是1〜10个字长度的字符串)。 我需要找到数以百万计的字符串超级字符串。 注意:单词扩展字典的。

Answer 1:

预处理你的输入(如果可能),指数出现在数据集中的话。 产生从每个字的一组可能的输出串的映射。 例如,与数据集

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}

如果存储集合只作为排序的列表,交叉点可通过并行地横跨列表扫描线性时间(在输入集的总长度线性)来完成。



Answer 2:

你基本上需要找到两套的话,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

排序列表上的搜索会更快,哈希查找会更加。 这些在上面的链接详细说明。



文章来源: Word-wise super string search for given string