什么是字典中少量模式的最简单快速的字符串匹配算法,以找到一个小字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是字典中少量模式的最简单快速的字符串匹配算法,以找到一个小字符串相关的知识,希望对你有一定的参考价值。

我有大量包含小对话的文本文件,这些对话本身包含小字符串(<1000字)。我还有一个我想在这些文本文件中搜索的标签和短语列表。

所以,我需要一个搜索算法

  1. 容易明白。
  2. 易于实施。
  3. 并在时间效率方面给出相当好的结果(对于每个文件)

有什么建议?

答案

当您想要在一组单词中查找单词时,选择的数据结构就是trie。 trie是一棵树,每个节点都传达一个字母并指向词汇表中的所有下一个字母。

例如,如果集合是'cat''carrot''clock',则trie的根将指向节点'c'。然后'c'将指向'a''l''a'指向't''r'。 trie结构可以继续到单词的结尾,或者您可以单独保留单个后缀。

现在,如果你搜索单词'card',你将遵循节点'c' > 'a' > 'r'并看到没有'd'并得出结论该单词不存在。

https://en.wikipedia.org/wiki/Trie


你可以根据你的情况调整这个想法,将“word”替换为“sentence”,将“letter”替换为“word”。由于单词集大于字母表,您必须在每个节点中使用散列图,以将可能的单词与指向以下节点的指针相关联。

要解决您的初始问题,请依次取出每个单词并进行比较,并将其与其继承者匹配。我猜总的运行时间将是文本中单词数量乘以匹配的平均长度的顺序,乘以执行hashmap查找所需的时间。


为了便于开发,请考虑首先在标准trie中实现单词查找。

以上是关于什么是字典中少量模式的最简单快速的字符串匹配算法,以找到一个小字符串的主要内容,如果未能解决你的问题,请参考以下文章

算法基础 - 朴素模式匹配算法、KMP模式匹配算法

从排序字符串数组中找到第一个前缀匹配的最有效算法?

算法AC自动机/AC算法 - 多模式串快速匹配

数据结构与算法简记--多模式字符串匹配AC自动机

AC自动机

详解 Scala 模式匹配