快速查找字典中符合模式的单词排列

时间:2018-04-16 16:45:31

标签: regex algorithm dictionary

我有一个大约10万字的字典,我希望能够找到 那些符合某些模式的词的排列。模式可以是 描述为整数列表,并且单词列表与之匹配 如果有一种方法可以将整数映射到字母,那么如果你有 用字母替换模式中的每个整数,你得到那个单词列表, 级联。

举个例子,我们假设我们的字典包含:

A
ANA
APPLE
BANANA
...

我们正在寻找的模式是([1]):

1 2 1 3 1 4 1 5 1

然后一个解决方案是[ANA,BANANA],其映射:

1:A   2:N   3:B   4:N   5:N

现在,我可以想到几种方法来实现它。对于 例如,我们可以选择具有正确长度的每个单词排列,以及 过滤那些没有映射冲突的过滤器。或者解决问题 递归地,到目前为止,每个模式和映射,尝试所有单词 长度小于或等于模式,不与之冲突 映射到目前为止,递归调用此算法的模式 保留,更新的映射。

但是这些解决方案对字典和模式I的大小来说非常慢 和我一起工作。如果模式P的长度为|P|,则字典D 长度为|D|,平均字长为n,我们正在考虑 算法大约为O(|D|^{|P|/n})。 (我希望管理模式 大小为50-100,想象n约为5。)

有更好的算法吗?

[1]请注意,这有点像正则表达式中的反向引用 - 例如 模式1 2 1对应于正则表达式(.)(.)\1 - 但我们 不能只使用正则表达式,因为“搜索”的文本不是固定的,而是字典中任何的单词排列。

0 个答案:

没有答案