📜  字符串匹配算法的应用

📅  最后修改于: 2021-05-08 16:58:07             🧑  作者: Mango

字符串匹配算法极大地影响了计算机科学,并在各种实际问题中发挥了至关重要的作用。它有助于在多个域中执行省时的任务。在搜索另一个字符串的一个字符串,这些算法很有用。在数据库模式网络系统中也使用字符串匹配。
在继续将其应用于现实世界之前,让我们看一些字符串匹配算法。字符串匹配算法大致可分为两种算法–

  1. 精确的字符串匹配算法
  2. 近似字符串匹配算法

确切的字符串匹配算法:

精确的字符串匹配算法是在大字符串(文本或序列)中找到一个,多个或所有出现的已定义字符串(模式),从而使每个匹配都是完美的。模式的所有字母必须与相应的匹配子序列匹配。这些又分为四类:

  1. 基于字符比较的算法:
    • 天真的算法:它将模式在文本上逐一滑动并检查是否匹配。如果找到匹配项,则再次滑动1以检查后续匹配项。
    • KMP(Knuth Morris Pratt)算法:这个想法是,每当检测到不匹配项时,我们就已经知道下一个窗口文本中的某些字符。因此,我们利用此信息来避免匹配我们知道仍将匹配的字符。
    • Boyer Moore算法:该算法使用了Naive的最佳启发式算法和KMP算法,并从模式的最后一个字符开始匹配。
    • 使用Trie数据结构:它用作有效的信息检索数据结构。它以平衡的BST形式存储密钥。
  2. 确定性有限自动机(DFA)方法:
    • 自动机匹配器算法:它从自动机的第一个状态和文本的第一个字符。在每一步中,它都会考虑文本的下一个字符,并在已建立的有限自动机中寻找下一个状态,然后移至新状态。
  3. 基于位的算法(并行方法):
    • 阿霍Corasick算法:它发现所有词语的O(N + M + z)的时间,其中n是文本和米的长度在所有字的总数的字符和z是在文本中的单词的出现的总次数。该算法构成了原始Unix命令fgrep的基础。
  4. 哈希字符串匹配算法:
    • Rabin Karp算法:它将模式的哈希值与文本的当前子字符串的哈希值进行匹配,如果哈希值匹配,则只有它开始匹配各个字符。

近似字符串匹配算法:

近似字符串匹配算法(也称为模糊字符串搜索)搜索输入字符串的子字符串。更具体地说,近似字符串匹配方法描述如下:假设我们给了两个字符串,文本T [1…n]和模式P [1…m]。任务是查找文本中所有与模式的编辑距离最大为k的模式。一些众所周知的编辑距离是– Levenshtein编辑距离和Hamming编辑距离。

当文本质量较低,图案或文本中存在拼写错误,突变后发现DNA子序列,异构数据库等时,将使用这些技术。一些近似的字符串匹配算法是:

  • 天真的方法:它将模式在文本上一一滑过,并检查近似匹配项。如果找到它们,则再次滑动1以检查后续的近似匹配。
  • 卖家算法(动态编程)
  • 移位或算法(位图算法)

字符串匹配算法的应用:

  • 抄袭检测:将要比较的文档分解为字符串标记,并使用字符串匹配算法进行比较。因此,这些算法用于检测它们之间的相似性并声明作品是is窃还是原创。
  • 生物信息学和DNA测序:生物信息学涉及将信息技术和计算机科学应用于涉及遗传序列的问题,以寻找DNA模式。字符串匹配算法和DNA分析都共同用于查找模式集的出现。
  • 数字取证:字符串匹配算法用于在数字取证文本中找到感兴趣的特定文本字符串,这对于调查很有用。
  • 拼写检查器: Trie是基于一组预定义的模式构建的。然后,将此特里用于字符串匹配。文本被视为输入,并且如果发生任何此类模式,则通过进入接受状态来显示该文本。
  • 垃圾邮件过滤器:垃圾邮件过滤器使用字符串匹配来丢弃垃圾邮件。例如,要将电子邮件分类为垃圾邮件或不将其分类为垃圾邮件,可通过字符串匹配算法在电子邮件的内容中搜索可疑的垃圾邮件关键字。因此,该内容是否归类为垃圾邮件。
  • 大型数据库中的搜索引擎或内容搜索:为了有效地对数据进行分类和组织,使用了字符串匹配算法。根据搜索关键词进行分类。因此,字符串匹配算法使人们更容易找到他们正在搜索的信息。
  • 入侵检测系统:通过应用字符串匹配算法,可以找到包含与入侵相关的关键字的数据包。所有的恶意代码都存储在数据库中,并将每个传入的数据与存储的数据进行比较。如果找到匹配项,则生成警报。它基于精确的字符串匹配算法,在该算法中必须检测每个入侵数据包。