通过通配符和不匹配有效地搜索前缀

时间:2017-11-02 17:55:57

标签: python string algorithm prefix trie

给定一个字符串str和一个可变长度前缀列表p,我想找到str开头找到的所有可能的前缀,允许最多{{1} k中的不匹配和通配符(点字符)。

我只想在字符串的开头搜索,并且需要有效地为str和数百万len(p) <= 1000; k <= 5 s执行此操作。

例如:

str

是否有一个有效的算法,理想情况下已经有python实现了?

我目前的想法是逐字逐句str = 'abc.efghijklmnop' p = ['abc', 'xxx', 'xbc', 'abcxx', 'abcxxx'] k = 1 result = ['abc', 'xbc', 'abcxx'] #but not 'xxx', 'abcxxx' ,并保持每个前缀不匹配计数的运行记录。

在每一步,我都会计算一个新的候选人名单,这是没有太多不匹配的前缀列表。

如果我到达前缀的末尾,它会被添加到返回的列表中。

这样的事情:

str

但是我不确定这是否比仅仅搜索一个前缀更有效率,因为它需要在每一步重建这个候选列表。

1 个答案:

答案 0 :(得分:0)

我不知道究竟是怎么回事。

但如果我要写它,我会尝试构建一个所有可能的决策点,带有你所卷入的所有状态的附加向量。然后你会拿走每个字符串,然后走到特里最终匹配的节点,然后返回预编译的结果向量。

如果你有很多前缀并且设置k大,那么这个特里可能非常大。但如果你正在分摊创建它而不是在数百万字符串上运行它,那么它可能是值得的。

相关问题