Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练

ops/2025/2/7 9:09:03/

文章目录

    • 第二节 串
      • 串的基本概念
      • 串的模式匹配
        • 朴素的模式匹配算法(BF算法)
          • 算法最坏时间复杂度O(n x m)
        • 改进的模式匹配算法(KMP算法)
          • 特征向量next,来确定k值
            • 特征向量next的算法实现
          • 算法最坏时间复杂度O(n)
          • 进一步改进next值的计算,简化步骤
    • 第四章真题
      • 真题1
      • 真题2

第二节 串

在这里插入图片描述

串的基本概念

在这里插入图片描述

C语言中没有字符串类型,而是提供了字符数组,将字符串作为字符数组来处理。当使用字符数组表示一个字符串时,C语言规定使用一个字符串结束标志"\0’表示串的结尾。同时,C语言还提供了许多字符串操作。例如,可以定义字符串s1和s2,并展示其内容和长度,语句如下。

在这里插入图片描述

串的模式匹配

求在主串中寻找子串(第一个字符)在主串中的位置,称为串的模式匹配。

此时,子串又称为模式,:串又称为目标。

例如,目标T=“Beijing”,模式P=“jin”,匹配结果为3。

朴素的模式匹配算法(BF算法)

最简单的模式匹配算法是朴素的模式匹配算法

分别从主串与模式串各自的首字符(看作当前位置)开始,依次比较两个串的当前字符。如果相等,则两个串各自的当前位置均后移一个位置,继续比较下对字符;如果不等,则模式串整体后移一个位置,模式串的首字符和主串的第二个字符分别是当前位置,依次比较两个串的当前字符。继续这个过程,当主串与模式串失配时,模式串整体后移一个位置,从模式串的首字符和主串的第三个字符、第四个字符等开始,依次比较两个串的当前字符。直到模式串与主串的某个子串完全匹配,或到达了主串的最后位置,仍未找到与模式串完全匹配的子串时为止,前者表示匹配成功,后者意味着匹配失败。

全称 Brute - Force 算法 ,也被称为暴风算法、简单匹配算法、蛮力算法 。这是一种在数据结构中用于字符串模式匹配的基本算法,常用于在一个主串内查找一个子串的出现位置,其核心思想是穷举法。

在这里插入图片描述

  • 算法,就是一种解题步骤,看着呆板,但实际上是一种解题的步骤

    程序,只不过是用什么编程语言来实现算法而已,也就是实现解题步骤而已

第一趟比较时,模式串前两个字符分别与主串的前两个字符匹配成功,但第三对字符失配。带下画线的字符表示每趟匹配时失配的位置。失配后,模式串整体后移一个位置,再次从它的首字符开始与主串相对应的字符进行比较。这个过程一直进行到第四趟,匹配成功。在每趟匹配中,主串与模式串的字符之间的比较次数均有三次,共四趟,所以共进行了12次比较。

算法最坏时间复杂度O(n x m)

朴素的模式匹配算法简单,但时间效率不高。设主串长度为n,模式串长度为m。如果每次都是比较到模式串最后一个字符时才出现失配,且主串的最后m个字符与模式串匹配成功(与例4-8中的情形类似),就出现了最坏情况。

此时,每一趟都进行了m次比较,共比较了n-m+1趟,故总比较次数将达到(n-m+1)xm。

在多数场合下,m远小于n,因此,算法最坏情况时间复杂度为O(n x m)

  • 和排列组合有关,选一个最简单例子,然后推广
改进的模式匹配算法(KMP算法)

有多个模式匹配算法改进了BF算法,下面介绍经典的KMP算法

在BF算法中,当失配时,模式串整体后移一个位置并继续从模式串首字符开始进行比较。在多数情况下,主串和模式串的当前位置都要回退,意味着主串和模式串中的字符都要进行多次比较,故算法的效率不高。

实际上,当模式串整体向右移动一位后,失配位置之前的各对字符都已经比较过了,也就是已经知道这几个位置上主串和模式串的字符是匹配的

因此,可以借助前一趟比较的结果,决定本趟匹配时模式串后移的位数,从而提高匹配的效率。这种处理思想是由D.E.Knuth、J.H.Morris和V.R.Pratt同时提出的,相应的算法称为KMP算法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

特征向量next,来确定k值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

特征向量next的算法实现

在这里插入图片描述

在这里插入图片描述

算法最坏时间复杂度O(n)

在这里插入图片描述

在这里插入图片描述

进一步改进next值的计算,简化步骤

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

第四章真题

真题1

在这里插入图片描述

1、初值表p,矩阵表示如图,更加清晰,实际上是同一条件的不同表示,这种更加容易让人理解

2、要求解的东西,是矩阵的行、列坐标,注意是从0开始,p后面的坐标表示位置1的行,实际上是第2行,位置2的列,实际上是第3列,为0,选A,这个是输入值的不同表示,变成矩阵形式则一目了然,

其实关键是这种哲学上的条件翻译,以及关于坐标位置和实际第几个位置的哲学辨析,翻译出来之后,求解简直一目了然

  • 为什么能够这样翻译,问问AI,或者自己先记一下,关键还是多找这种条件题目

真题2

在这里插入图片描述

位置0的第一个元素,a0-0,地址100

第二个元素,是a1-0,;看来这个的地址是104呗,每个元素占4个地址

第三个元素,是a1-1,地址108

a4-4,已经是第十五个元素

位置0位置1位置2位置3位置4位置5
位置0第一个100
位置1二104三108
位置2
位置3
位置4十一十二十三十四十五
位置5十六十七十八十九二十二十一

(技巧:位置,角标,采用阿拉伯数字,把第几个元素,不要用阿拉伯数字,免得数字看来看去弄混!)

  • 再进阶一点,可以找找这个排列的计算公式,简单粗暴一点就直接排,反正不超过10*10的矩阵

重点是明晰下三角矩阵,这个概念的图的元素的顺序位置

以及进一步明晰,这个概念图的元素的坐标标号

一、然后直接翻译和记忆,a1-1是第几个元素,a0-0是第几个元素;已经输入值,a4-4是第几个元素

二、1、再解题步骤,通过元素位置之差,先求出单个元素占用位置

​ 2、第三个元素,100加了两个4

​ 第十五个元素,100加十四个4,就是156,选B

​ 注意别算成加十五个4了,所以还是图示最简单,找解题规律一目了然

  • 先别管什么偏移量,存储单位的概念,直接画图最直观明了

http://www.ppmy.cn/ops/156396.html

相关文章

Linux常用命令——文件目录类

文章目录 一、帮助命令manhelptype常用快捷键 二、文件目录类1.pwd显示当前工作路径的绝对路径2. ls 列出目录的内容3.cd切换目录4. mkdir 创建新目录5.rmdir删除一个空目录6.touch创建空文件7.cp 复制文件或目录8.rm删除文件或目录9.mv 移动10.cat/more/less 查看文件内容11.e…

go的sync包学习

包含了sync.Mutex,sync.RWMutex,sync.Cond,sync.Map,sync.Once等demo sync.Mutex //讲解mutex import ("fmt""math/rand""sync""time" )type Toilet struct {m sync.Mutex } type Person struct {Name string }var DateTime "2…

每日Attention学习18——Grouped Attention Gate

模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…

防火墙与Squid代理服务器

服务器的安装、搭建与配置准备前期 虚拟机版本:redhat Enterprise Linux Server release 7.2(Maipo)系统架构:x86虚拟机服务器地址:192.168.195.3Window地址:192.168.195.237进行ISO挂载操作进入root模式[yonghu@localhost 桌面]#su 返回上级目录文件进入media文件中,创建…

Azure DevOps Server:集成奇安信开源卫士(OpenSourceSafe)

1. 概述 奇安信开源卫士是奇安信公司推出的一款开源组件检测工具,主要用于识别和管理软件项目中的开源组件及其潜在的安全风险。它支持多种编程语言和框架,如Java、Python、JavaScript等,通过集成CI/CD工具,可以在软件开发和测试阶…

Java高频面试之SE-18

hello啊,各位观众姥爷们!!!本baby今天又来了!哈哈哈哈哈嗝🐶 BIO NIO AIO的区别? 在 Java 网络编程中,BIO、NIO 和 AIO 是三种不同的 I/O 模型,它们的核心区别在于 阻塞…

S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644

本文主要介绍在S4 HANA OP中S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644的后台配置及前台操作。具体请参照如下内容: 目录 Deferred Tax Transfer - S_AC0_52000644 1. 后台配置 1.1 Business Transaction Events激活- FIBF 2. 前台操作 …

【matlab基本使用笔记】

ctrl a i 代码格式化 fzero求非线性函数的根 arrayfun将函数应用于每个数组元素 format long长格式输出 format long g取消科学计数法 linspace logspace 一、界面使用 1.创建matlab脚本 利用.m后缀的脚本文件(又称为m文件)编程: 点击…