本文将介绍字符串匹配算法中的 朴素算法、快速匹配和自动机匹配
(1)朴素算法
朴素算法是一个比较容易理解的算法,也是容易编写的算法。
设偏移量为s,当T【s+0,s+1..s+n-1】=P[0,1,...n-1]时,说明文本中匹配到查找字符串,下图为匹配示意图。
朴素匹配c语言实现: http://shaojiashuai123456.iteye.com/blog/1637823
(2)快速匹配
快速匹配算法通过使用额外的记录数组,记录模式串P匹配失败时的跳转位置,从而实现匹配失败时的快速跳转,从而减少重复匹配。
如上图所示,由模式串P得出失败跳转位置数组。
KMP算法c语言实现: http://shaojiashuai123456.iteye.com/blog/1637804
(3)自动机匹配
自动机匹配通过预先对模式串P预处理,建立状态转换图,从而使输入串通过状态转换来匹配模式串P。
上图展示了模式串P状态转换的过程,下面将给出状态变迁函数伪代码:
Compute-Transition-Function(P, ∑)
{
m = length[P];
for q=0 to m
{
for each character A∈∑
{
k = min(m,q+1);
while(Pk is not a prefix of PqA)
k--;
δ(q,a)=k;
}
}
}
第一个for循环代表构造第q个状态
第二个for循环代表放入一个字符
第三个while循环用来计算下一个状态
举例说明其过程:
例如模式串P = ababaca ,当q=5时(第一个for),输入字符为a(第二个for)时,此时 PqA = ababaa ,此时 m=7 ,q=5, k=min(7,5+1) = 6;
现在进入while循环:
Pk(k=6) = ababac , 与 PqA(ababaa)后缀比较,不相等,则k-- ,
Pk(k=5) = ababa , 与 PqA(ababaa)后缀比较,不相等,则k-- ,
Pk(k=4) = abab , 与 PqA(ababaa)后缀比较,不相等,则k-- ,
Pk(k=3) = aba , 与 PqA(ababaa)后缀比较,不相等,则k-- ,
Pk(k=2) = ab , 与 PqA(ababaa)后缀比较,不相等,则k-- ,
Pk(k=1) = a , 与 PqA(ababaa)后缀比较,相等,返回k (k=1)
这回应该知道状态转换表是怎么形成的吧,其实其效率不是很高,因为可以发现其形成过程中使用了太多的循环,因此其匹配效率远不如KMP算法,但是其变形 AC自动机 却是多模匹配的最牛匹配算法,AC自动机通过使用trie树与KMP思想结合,有兴趣的可以自己学习下。
- 大小: 19.5 KB
- 大小: 4.2 KB
- 大小: 8.5 KB
- 大小: 11.6 KB
- 大小: 32 KB
分享到:
相关推荐
带通配符的字符串匹配算法则是这个领域的延伸,它允许在模式字符串中包含特殊字符,如星号(*)或问号(?),以表示任意字符或单个任意字符。这种算法使得搜索更加灵活,可以适应更复杂的查询需求。 **通配符的含义** -...
在C语言中,实现字符串匹配算法通常涉及到对字符数组的操作和逻辑控制结构。本篇文章将详细探讨四种常见的字符串匹配算法:平凡算法(SimpleSM)、KMP算法(KMPSM)、BM算法(bmSM)以及RK算法(rkSM),并分析它们...
**KMP字符串匹配算法详解** KMP(Knuth-Morris-Pratt)字符串匹配算法是由D.E. Knuth、V.J. Morris和J.H. Pratt三位学者于1977年提出的,它是一种高效的字符串搜索算法,主要用于在一个主串(text)中查找是否存在...
### 字符串匹配算法之Horspool算法:深入解析与应用 #### 引言 在计算机科学领域,字符串匹配是一项核心任务,广泛应用于文本编辑、数据检索、模式识别等多个场景。传统的简单匹配算法如逐一比较法往往在面对大...
在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。 1. **穷举法**:也称为朴素匹配算法,是最直观的字符串匹配方法。它通过比较主串中的每个...
### 改进的多模式字符串匹配算法 #### 摘要与背景介绍 本文提出了一种改进的多模式字符串匹配算法,旨在优化经典的AC(Aho-Corasick)多模式字符串匹配算法,并融合了BMH(Boyer-Moore-Horspool)算法的优势。这一...
这里我们将深入探讨几种常见的字符串匹配算法,包括Brute Force算法、KMP算法、Horspool算法以及Boyer-Moore算法。 1. **Brute Force算法**:这是最直观的字符串匹配方法,也被称为简单匹配。它将模式串与匹配串...
《多模式字符串匹配算法——AC_BM算法的深度解析与实现》 字符串匹配算法是计算机科学中的一个重要领域,尤其在文本处理、搜索引擎、数据挖掘等领域有着广泛应用。其中,AC_BM算法,即Aho-Corasick算法结合Boyer-...
### 字符串匹配算法小集解析 #### 一、引言 本文档提供了一系列共35种不同的字符串匹配算法,这些算法在英文环境下被广泛讨论和应用。通过对这些算法进行详细的解析,我们可以更好地理解每种算法的特点、应用场景...
### 入侵检测技术中一种改进的字符串匹配算法的研究 #### 概述 随着网络环境的日益复杂化,网络攻击事件频繁发生,如何有效监测和响应这些潜在威胁成为了网络安全领域的重要课题。入侵检测系统(IDS)作为网络安全...
**字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...
一般而言文本就是要编辑的文档,而模式字符串往往由用户来指定,高效的字符串匹配 算法可以提高程序的响应性能,当然字符串匹配算法的应用远远不止于此,例如在生物计算科学中查找特定的DNA序列,也是字符串匹配算法...
首先对三种基本字符串匹配算法进行了详细分析和说明,再编程实现。创新拓展研究了Boyer-Moore算法,进行了分析和编程实现。让四种算法对数据量极大的文本,进行子串的查询处理,并分析算法运行时间效率,并对所有...
KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者在1970年代提出。该算法在处理字符串匹配问题时,避免了不必要的回溯,极大地提高了...
本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为“部分匹配表”或...
### 字符串匹配算法之BNDM:结合位并行与后缀自动机的高效灵活匹配 在计算机科学领域,字符串匹配算法是处理文本搜索、数据挖掘和生物信息学等应用中的关键工具。《字符串匹配算法之BNDM》一文深入探讨了一种创新的...
本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为“部分匹配表”或...
### 一种改进的字符串匹配算法:KMP算法详解 #### KMP算法简介 KMP算法是一种高效的字符串匹配算法,由D.E.Knuth、V.R.Pratt和J.H.Morris三位计算机科学家共同发现,因此得名为Knuth-Morris-Pratt算法(简称KMP...
### 字符串匹配算法概述 在计算机科学领域中,字符串匹配是一种常见的操作,它涉及到在一个较大的文本串(T)中查找一个较短的模式串(P)。本章节将重点介绍字符串匹配的基本概念以及两种重要的算法——简单字符串...