字符串匹配算法极大地影响了计算机科学,并在各种现实世界问题中发挥着重要作用。它有助于在多个域中执行省时的任务。这些算法在搜索另一个字符串的字符串很有用。字符串匹配也用于数据库模式、网络系统。
让我们先看看一些字符串匹配算法,然后再讨论它们在现实世界中的应用。字符串匹配算法大致可以分为两类算法——
- 精确字符串匹配算法
- 近似字符串匹配算法
精确字符串匹配算法:
精确字符串匹配算法是在大字符串(文本或序列)中找到一个、多个或所有出现的已定义字符串(模式),使得每个匹配都是完美的。模式的所有字母必须与相应的匹配子序列匹配。这些进一步分为四类:
- 基于字符比较的算法:
- 朴素算法:它将模式一个接一个地滑过文本并检查是否匹配。如果找到匹配项,则再次滑动 1 以检查后续匹配项。
- KMP (Knuth Morris Pratt) 算法:这个想法是每当检测到不匹配时,我们就已经知道下一个窗口文本中的一些字符。因此,我们利用这些信息来避免匹配我们知道无论如何都会匹配的字符。
- Boyer Moore 算法:该算法使用 Naive 和 KMP 算法的最佳启发式算法,并从模式的最后一个字符开始匹配。
- 使用 Trie 数据结构:它被用作一种高效的信息检索数据结构。它以平衡的 BST 形式存储密钥。
- 确定性有限自动机 (DFA) 方法:
- 自动机匹配算法:从自动机的第一个状态和文本的第一个字符。在每一步,它都会考虑文本的下一个字符,并在构建的有限自动机中寻找下一个状态并移动到一个新状态。
- 基于Bit的算法(并行法):
- Aho-Corasick 算法:它在 O(n + m + z) 时间内找到所有单词,其中 n 是文本的长度,m 是所有单词中的字符总数,z 是文本中单词出现的总数。该算法构成了原始 Unix 命令 fgrep 的基础。
- 哈希字符串匹配算法:
- Rabin Karp 算法:将模式的哈希值与文本当前子串的哈希值进行匹配,如果哈希值匹配,则仅开始匹配单个字符。
近似字符串匹配算法:
近似字符串匹配算法(也称为模糊字符串搜索)搜索输入字符串的子字符串。更具体地说,近似字符串匹配方法如下所述:假设我们有两个字符串,文本 T[1…n] 和模式 P[1…m]。任务是找到文本中所有出现的模式,其与模式的编辑距离至多为 k。一些众所周知的编辑距离是 – Levenshtein 编辑距离和 Hamming 编辑距离。
这些技术用于文本质量低、模式或文本存在拼写错误、变异后寻找DNA子序列、异构数据库等。 一些近似的字符串匹配算法有:
- 朴素的方法:它在文本上一个一个地滑动模式并检查近似匹配。如果找到,则再次滑动 1 以检查后续的近似匹配。
- 卖方算法(动态规划)
- 移位或算法(位图算法)
字符串匹配算法的应用:
- 抄袭检测:将要比较的文档分解为字符串标记,并使用字符串匹配算法进行比较。因此,这些算法用于检测它们之间的相似性并声明作品是抄袭还是原创。
- 生物信息学和 DNA 测序:生物信息学涉及将信息技术和计算机科学应用于涉及基因序列的问题以寻找 DNA 模式。字符串匹配算法和 DNA 分析都被共同用于查找模式集的出现。
- 数字取证:字符串匹配算法用于定位数字取证文本中感兴趣的特定文本字符串,这对调查很有用。
- 拼写检查器: Trie 是基于一组预定义的模式构建的。然后,这个trie 用于字符串匹配。将文本作为输入,如果出现任何此类模式,则通过达到接受状态来显示。
- 垃圾邮件过滤器:垃圾邮件过滤器使用字符串匹配来丢弃垃圾邮件。例如,将电子邮件归类为垃圾邮件与否,通过字符串匹配算法在电子邮件内容中搜索可疑的垃圾邮件关键字。因此,内容被归类为垃圾邮件与否。
- 大型数据库中的搜索引擎或内容搜索:为了有效地对数据进行分类和组织,使用了字符串匹配算法。分类是根据搜索关键字完成的。因此,字符串匹配算法使人们更容易找到他们正在搜索的信息。
- 入侵检测系统:通过字符串匹配算法发现包含入侵相关关键字的数据包。所有的恶意代码都存储在数据库中,每个传入的数据都与存储的数据进行比较。如果找到匹配项,则生成警报。它基于精确的字符串匹配算法,其中必须检测每个入侵的数据包。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live