专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

匹配算法有哪些,常用的字符串匹配算法最全详解

来源:小易整编  作者:小易  发布时间:2023-02-08 09:19
摘要:匹配算法有哪些,常用的字符串匹配算法最全详解子字符串匹配子字符串匹配算法的定义:文本长度:N模式字符串长度:M有效位移:s解决字符串的匹配算法有非常多,目前常用的有以下几种:暴力查找KMP算法Boyer-Moore算法Rabin-Karp指...

匹配算法有哪些,常用的字符串匹配算法最全详解

子字符串匹配

子字符串匹配算法的定义:

  • 文本长度:N

  • 模式字符串长度:M

  • 有效位移:s

匹配算法有哪些,常用的字符串匹配算法最全详解

解决字符串的匹配算法有非常多,目前常用的有以下几种:

  • 暴力查找

  • KMP 算法

  • Boyer-Moore算法

  • Rabin-Karp指纹字符串查找

字符串匹配算法通常分为两个步骤:预处理(Preprocessing)和匹配(Matching)。所以算法的总运行时间为预处理和匹配的时间的总和。

常用算法

暴力查找

朴素的字符串匹配算法又称为暴力匹配算法(Brute Force Algorithm),它的主要特点是:

  • 没有预处理阶段;

  • 滑动窗口总是后移 1 位;

  • 对模式中的字符的比较顺序不限定,可以从前到后,也可以从后到前;

  • 匹配阶段需要 O((n - m + 1)m) 的时间复杂度;

  • 需要 2n 次的字符比较;

KMP 算法

详细过程:

匹配算法有哪些,常用的字符串匹配算法最全详解

从左到右匹配,直到匹配到第一个字符相等,如下图所示,然后继续匹配后面的字符。

匹配算法有哪些,常用的字符串匹配算法最全详解

到了D,发现不对,这是如果暴力法,则直接将模式后移一位,重新匹配。KMP算法的想法是,设法利用这个已知信息,不要把"搜索位置"移回已经比较过的位置,继续把它向后移,这样就提高了效率。

匹配算法有哪些,常用的字符串匹配算法最全详解

在查找的一开始根据模式字符串,生成一张《部分匹配表》(Partial Match Table)

匹配算法有哪些,常用的字符串匹配算法最全详解

移动位数 = 已匹配的字符数 - 对应的部分匹配值

所以移动为数 = 6 - 2 =4

匹配算法有哪些,常用的字符串匹配算法最全详解

在这里插入图片描述

这个《部分匹配表》如何生成?

"部分匹配值"就是"前缀"和"后缀"的最长的共有元素的长度。以"ABCDABD"为例,

- "A"的前缀和后缀都为空集,共有元素的长度为0;- "AB"的前缀为[A],后缀为[B],共有元素的长度为0;- "ABC"的前缀为[A, AB],后缀为[BC, C],共有元素的长度0;- "ABCD"的前缀为[A, AB, ABC],后缀为[BCD, CD, D],共有元素的长度为0;- "ABCDA"的前缀为[A, AB, ABC, ABCD],后缀为[BCDA, CDA, DA, A],共有元素为"A",长度为1;- "ABCDAB"的前缀为[A, AB, ABC, ABCD, ABCDA],后缀为[BCDAB, CDAB, DAB, AB, B],共有元素为"AB",长度为2;- "ABCDABD"的前缀为[A, AB, ABC, ABCD, ABCDA, ABCDAB],后缀为[BCDABD, CDABD, DABD, ABD, BD, D],共有元素的长度为0。

Boyer-Moore

几种常见的字符串匹配算法的性能比较:

匹配算法有哪些,常用的字符串匹配算法最全详解

KMP算法并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。

详细过程:

匹配算法有哪些,常用的字符串匹配算法最全详解

首先,"字符串"与"搜索词"头部对齐,从尾部开始比较。我们看到,"S"与"E"不匹配。这时,"S"就被称为"坏字符"(bad character),即不匹配的字符。我们还发现,"S"不包含在搜索词"EXAMPLE"之中,这意味着可以把搜索词直接移到"S"的后一位。

匹配算法有哪些,常用的字符串匹配算法最全详解

依然从尾部开始比较,发现"P"与"E"不匹配,所以"P"是"坏字符"。但是,"P"包含在搜索词"EXAMPLE"之中。所以,将搜索词后移两位,两个"P"对齐。

"坏字符规则":后移位数 = 坏字符的位置 - 搜索词中的上一次出现位置(如果"坏字符"不包含在搜索词之中,则上一次出现位置为 -1)

上图中,比较的是P和E,出现在第6位(0开始),然后P上一次位置是4,所以6-4=2

接着继续,一直比较到M:


本文地址:百科问答频道 https://www.neebe.cn/wenda/903057.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 线性搜索算法是什么意思?

    线性搜索算法是什么意思?

    线性搜索算法是一种常见的搜索算法,也叫线性搜索或顺序搜索,它的基本思想是从序列的头(或尾)端开始,一次沿着序列的方向进行搜索,直到搜索到被搜索元素为止。线性搜索算法可以用来在一组元素中搜索某个特定的元素,它是一种最简单且最常用的搜索算法。...

  • 智能优化算法是什么意思?

    智能优化算法是什么意思?

    智能优化算法是一种利用复杂搜索和优化算法,从复杂环境中求解优化问题的一种计算方法。它能够有效地解决问题,其本质就是通过改进最优化问题的目标函数来改善求解的问题。智能优化是基于数学和统计的概念,它同时考虑到了复杂场景下函数的优化,以提高问题...

  • JS 字符串转数组

    JS 字符串转数组

    JS中,将一个字符串转置为数组,使用到的方法是split(),通过使用split()方法,可以轻松的将一个字符串转换为数组操作方法01新建一个HTML文档,用于承载JS02...

  • 签名算法是什么

    签名算法是什么

    签名算法是指数字签名的算法。数字签名就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。签名算法是指数字签名的算法。数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段...

  • 国密算法是什么

    国密算法是什么

    国密即国家密码局认定的国产密码算法。商用密码是指能够实现商用密码算法的加密、解密和认证等功能的技术。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。国密即国家密码局认定的国产...

  • 扫一扫自己脸型配发型的软件2022 好用的发型匹配软件推荐

    扫一扫自己脸型配发型的软件2022 好用的发型匹配软件推荐

    最近有很多用户们想知道有哪些发型匹配软件,那么扫一扫自己脸型配发型的软件2022有哪些呢,小编为大家带来好用的发型匹配软件推荐,帮助大家快速的找到好用的发型匹配软件,解决用户们发型匹配方面的问题,快来看看都有哪些好用的发型匹配软件吧!1、《...

  • 英雄联盟匹配机制是什么样的 盘点匹配机制上分技巧攻略

    英雄联盟匹配机制是什么样的 盘点匹配机制上分技巧攻略

    英联联盟采纳的是ELO值匹配机制,ELO值也就是说是游戏玩家嘴里的"隐蔽分"。那么本期小编就来讲下英雄联盟匹配机制是什么样的,盘点匹配机制上分技巧攻略。碰到总是输的情形,偶尔玩个娱乐模式都会呈现5连跪的情形,你怎么样尽力......

  • 适用于所有手环app有哪些 可以和手环匹配连接的软件排行

    适用于所有手环app有哪些 可以和手环匹配连接的软件排行

    人们常说生命在于运动,在平时只有适当的运动才可以拥有健康的体魄。只不过很多人难以长期坚持下去,只是三天打鱼两天晒网。如果自己没有持之以恒的心,可以佩戴一个运动手环,那么适用于所有手环app有哪些?利用运动手环可以监测自己每天的运动成果,并提...

  • 周排行
  • 月排行
  • 年排行

精彩推荐