`
shaojiashuai123456
  • 浏览: 262804 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

字符串匹配算法

 
阅读更多

      本文将介绍字符串匹配算法中的 朴素算法、快速匹配和自动机匹配

(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代码实现

    在C语言中,实现字符串匹配算法通常涉及到对字符数组的操作和逻辑控制结构。本篇文章将详细探讨四种常见的字符串匹配算法:平凡算法(SimpleSM)、KMP算法(KMPSM)、BM算法(bmSM)以及RK算法(rkSM),并分析它们...

    KMP字符串匹配算法

    **KMP字符串匹配算法详解** KMP(Knuth-Morris-Pratt)字符串匹配算法是由D.E. Knuth、V.J. Morris和J.H. Pratt三位学者于1977年提出的,它是一种高效的字符串搜索算法,主要用于在一个主串(text)中查找是否存在...

    字符串匹配算法之Horspool算法

    ### 字符串匹配算法之Horspool算法:深入解析与应用 #### 引言 在计算机科学领域,字符串匹配是一项核心任务,广泛应用于文本编辑、数据检索、模式识别等多个场景。传统的简单匹配算法如逐一比较法往往在面对大...

    字符串匹配算法ppt

    在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、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算法的深度解析与实现》 字符串匹配算法是计算机科学中的一个重要领域,尤其在文本处理、搜索引擎、数据挖掘等领域有着广泛应用。其中,AC_BM算法,即Aho-Corasick算法结合Boyer-...

    字符串匹配算法小集(英文)

    ### 字符串匹配算法小集解析 #### 一、引言 本文档提供了一系列共35种不同的字符串匹配算法,这些算法在英文环境下被广泛讨论和应用。通过对这些算法进行详细的解析,我们可以更好地理解每种算法的特点、应用场景...

    入侵检测技术中一种改进的字符串匹配算法的研究

    ### 入侵检测技术中一种改进的字符串匹配算法的研究 #### 概述 随着网络环境的日益复杂化,网络攻击事件频繁发生,如何有效监测和响应这些潜在威胁成为了网络安全领域的重要课题。入侵检测系统(IDS)作为网络安全...

    字符串匹配算法-BM算法的实现代码

    **字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...

    字符串匹配算法_朴素字符串匹配算法

    一般而言文本就是要编辑的文档,而模式字符串往往由用户来指定,高效的字符串匹配 算法可以提高程序的响应性能,当然字符串匹配算法的应用远远不止于此,例如在生物计算科学中查找特定的DNA序列,也是字符串匹配算法...

    实现并对比三种基本的字符串匹配算法

    首先对三种基本字符串匹配算法进行了详细分析和说明,再编程实现。创新拓展研究了Boyer-Moore算法,进行了分析和编程实现。让四种算法对数据量极大的文本,进行子串的查询处理,并分析算法运行时间效率,并对所有...

    KMP.rar_KMP_KMP算法_visual c_字符串匹配_字符串匹配算法

    KMP算法,全称为Knuth-Morris-Pratt算法,是一种高效的字符串匹配算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位学者在1970年代提出。该算法在处理字符串匹配问题时,避免了不必要的回溯,极大地提高了...

    KMP算法:高效字符串匹配算法详解

    本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为“部分匹配表”或...

    字符串匹配算法之BNDM

    ### 字符串匹配算法之BNDM:结合位并行与后缀自动机的高效灵活匹配 在计算机科学领域,字符串匹配算法是处理文本搜索、数据挖掘和生物信息学等应用中的关键工具。《字符串匹配算法之BNDM》一文深入探讨了一种创新的...

    2.KMP算法:高效字符串匹配算法详解

    本文将介绍一种名为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...

    算法与数据结构 算法分析课程 第11章 字符串匹配 字符串匹配算法 KMP算法 共11页.pptx

    ### 字符串匹配算法概述 在计算机科学领域中,字符串匹配是一种常见的操作,它涉及到在一个较大的文本串(T)中查找一个较短的模式串(P)。本章节将重点介绍字符串匹配的基本概念以及两种重要的算法——简单字符串...

Global site tag (gtag.js) - Google Analytics