朴素字符串匹配

article/2025/10/4 0:19:51

描述

字符串匹配问题的形式定义:

  • 文本(Text)是一个长度为 n 的字符串:T;
  • 模式(Pattern)是一个长度为 m 且 m≤n 的字符串:P;

T 和 P 中的元素都属于有限的字母表 Σ 表;

有效位移 (Valid Shift):
如果 0≤ s ≤n-m,并且 T[s+1…s+m] = P[1…m],即对 1≤j≤m,有 T[s+j] = P[j],则说模式 P 在文本 T 中出现且位移为 s,且称 s 是一个有效位移。

字符串匹配示意图如下:
在这里插入图片描述
目标是找出所有在文本 T = abcabaabcabac 中模式 P = abaa 的所有出现。该模式在此文本中仅出现一次,即在位移 s = 3 处,位移 s = 3 是有效位移。

算法原理

朴素字符串匹配算法:通过一个循环找到所有有效偏移,即对检查是否满足条件。算法没有进行预处理,只是对其进行匹配处理。

算法复杂度

  • 时间复杂度是非常大: O((n-m+1)m)
  • 空间复杂度:O(m+n)
# -*- coding: utf-8 -*-def nativeStringMatcher(t, p):''':param t: the string to check:param p: pattern'''n = len(t)m = len(p)for s in range(0, n-m+1):if p == t[s:s+m]:print ('Pattern occurs with shift %d' % s)
if __name__ == '__main__':# 氨基酸序列t = "CGTCGATCGCGCTACGTCGACGTACGGCAGCCAGCGACGTCGCTTTCACGACGTCGTCAGCACCGTCGGATCCGTCG"p = "GTCG"nativeStringMatcher(t,p)
Pattern occurs with shift 1
Pattern occurs with shift 15
Pattern occurs with shift 38
Pattern occurs with shift 52
Pattern occurs with shift 64
Pattern occurs with shift 73

http://chatgpt.dhexx.cn/article/UvoqDIil.shtml

相关文章

算法之字符串匹配一

目录 前言: BF算法: RK算法 总结: 参考资料 前言: 字符串匹配指的是一个短点的字符串与一个长点的字符串进行匹配,并确认短的字符串是否在长的字符串中存在。匹配算法有很多,本文介绍两种简单、容易…

字符串匹配算法(C语言实现)

目录 文章目录 前言 一、BF算法 二、KMP算法 1.算法介绍 2.算法思路 3.整体代码实现 总结 前言 字符串匹配算法又称模式匹配算法,该算法的目的是为了子串从主串中寻找是否有与其匹配的部分, 其可分为BF暴力检索、RK哈希检索、KMP、BM等等,本…

shell字符串匹配

一、简介 Bash Shell提供了很多字符串和文件处理的命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容比较多故单独列出,本文只涉及字符串的处理和部分文本处理命令。 二、字符串处理 1、expr命令…

golang字符串匹配算法

简介 字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为模式串)。在 Golang 中,可以使用最常见的字符串匹配算法之一:Knuth-Morris-Pratt(KMP)算法,它的时间复杂度为 O(nm…

【数据结构】字符串匹配(暴力匹配)

原理解析: 字符串匹配方法,创建两个字符串结构,主 串和子串比较。 主串字符 a 和 子串字符 c 不匹配,主串的指针向下移动,移动到上一次开始比较的下一个位置。 子串指向开始的位置。 主串字符 b 和 子串字符 c 不匹配…

字符串匹配算法比较

字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括暴力搜索(Brute force)…

子串查找(字符串匹配)

子串查询 首先,我们来定义两个概念,主串和模式串。我们在字符串 A 中查找字符串 B,则 A 就是主串,B 就是模式串。我们把主串的长度记为 n,模式串长度记为 m。由于是在主串中查找模式串,因此,主串…

字符串匹配算法综述

字符串匹配算法综述 字符串匹配算法综述:BF、RK、KMP、BM、Sunday 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(string)和子串(pattern&…

字符串匹配算法详解

希望看到文章的你们,能够在今年的研究生考试中超常发挥。 愿你们都能考上自己心仪的学校,为你们的备考生涯划上一个完美的句号。做为你们的师兄有几句话想对你们说,希望这些话能对你们有一些帮助。 马上就要考试了,不要再继续啃难…

字符串匹配算法

字符串匹配就是在主串A中查找模式串B,例如在主串abababc中查找模式串abc是否存在,记主串A的长度为n,模式串B的长度为m,n>m。 BF算法 BF(Brute Force)算法,又叫暴力匹配算法或者朴素匹配算法,思路很简单…

字符串(字符串匹配)

一、字符串匹配问题、基础 1、假设文本是一个长度为n的数组T,而模式是长度为m的数组P,我们希望在文本T中寻找模式P 如果P出现在T中的第s个位置,那么我们称其有效偏移为s,在其他不匹配的位置称为无效偏移 2、如果字符串w是字符串…

字符串匹配

字符串匹配 1.朴素的串匹配算法(暴力解法) 1.1 分析 设t是目标串(母串),p是模式串(待匹配串),i , j 分别指向 模式串 和 目标串,m、n分别是模式串p和目标串t的长度。 从目标串的第0个字符&am…

Photoshop怎么给图片添加简介信息或者版权信息

转自:Photoshop怎么给摄影图片添加作者名字版权等信息? 有时我们点开一张图片的详细信息中可能可以看到各种属性信息,比如作者,时间,关键字,图片信息描述等属性,但是我们自己的拍摄的或者从别的地方获取的…

2022年中国版权保护中心计算机软件著作权登记最全申请步骤流程

一、前言二、实名认证1. 用户注册2. 实名认证 三、办理步骤1. 办理流程2. 填写申请表3. 提交申请文件4. 登记机构受理申请5. 审查6. 获得登记证书 四、登记申请所需文件1. 软件著作权登记申请表2. 软件(程序、文档)的鉴别材料3. 有关证明文件 五、申请表…

IDEA设置版权信息

File→Settings或者CtrlS快捷键。 Editor下面有个Copyright→Copyright Profiles 点击加号,然后输入名称。 然后修改成自己的信息: 其中第一个年份是本文件新建日期,后面的是最后一次修改年份。 中文版本: 版权所有(c) Jack魏 …

版权和版本信息

版权和版本信息的主要内容有: (1)版权信息; (2)文件名称、简要描述、创建日期和作者; (3)当前版本信息和说明; (4)历史版本信息和…

版权和商标权有什么关系?版权和商标的区别在哪里?

版权和商标权存在着一定的关系,版权和商标又有着很多区别,具体的关系和区别是怎样的,大家都知道吗?今天企多多就带大家来了解! 版权和商标权的关系 版权和商标权的关系主要有以下三点: 1、关联性&#xf…

版权 | 收藏!哪些作品可以登记版权?

创业创新中,无论是公司LOGO还是IP形象或者产品手册,都凝结着无数的心血。当下互联网和科技的发展,让抄袭变得前所未有的容易,尤其在美术作品、文字作品和影视作品领域。如何有效地保护自己的智力成果呢?先从了解这些开…

Pyinstaller加入版本和版权信息

目录 参考链接 前言 一. 获取版本信息 1. 拖过来个有版本和版权信息的exe文件 2. 放置一个txt文件 我们接着放置一个txt文件叫file_version_info.txt。这名字不能改,Pyinstaller自动就把版权信息放在这里。 3.开始获取 二. 修改 三. 打包 参考链接 pyinsta…

版权信息的生成方法

网页底部添加网站的版权信息,将版权信息封装到JavaBean中,可重复利用 新建JavaBean类 public class StringUtil3 {private String copyrightStr"xxxxxxxxxxx xxxxxxxxxxxxx--xxxxxxxxxxxxxxxxxxxx-xxx";public String getCopyrightStr() {ret…