Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练
文章目录
- 第二节 串
- 串的基本概念
- 串的模式匹配
- 朴素的模式匹配算法(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了,所以还是图示最简单,找解题规律一目了然
- 先别管什么偏移量,存储单位的概念,直接画图最直观明了
相关文章:
Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练
文章目录 第二节 串串的基本概念串的模式匹配朴素的模式匹配算法(BF算法)算法最坏时间复杂度O(n x m) 改进的模式匹配算法(KMP算法)特征向量next,来确定k值特征向量next的算法实现 算法最坏时间复杂度O(n)进一步改进next值的计算,简化步骤 第四章真题真题…...
陷入闭包:理解 React 状态管理中的怪癖
TLDR 闭包就像函数随身携带的背包,包含它们创建时的数据React 组件使用闭包来记住它们的状态和属性过时的闭包可能导致状态更新不如预期时的错误函数式更新提供了一个可靠的方式来处理最新状态 简介 你是否曾经疑惑过,为什么有时你的 React 状态更新不…...
【SRC排名】安全应急响应中心SRC上榜记录
2023年 新氧第三 https://security.soyoung.com/top 合合第四 https://security.intsig.com/index.php?m&chall&aindex 2024年 好未来第一 https://src.100tal.com/index.php?m&chall&aindex(官网是总榜,年榜只有海报)…...
Linux——基础命令1
$:普通用户 #:超级用户 cd 切换目录 cd 目录 (进入目录) cd ../ (返回上一级目录) cd ~ (切换到当前用户的家目录) cd - (返回上次目录) pwd 输出当前目录…...
大语言模型极速部署:Ollama 、 One-API、OpenWebUi 完美搭建教程
大语言模型极速部署:Ollama 、 One-API、OpenWebUi 完美搭建教程 本文将介绍如何通过命令行工具部署 Ollama 和 One-API 以及 OpenWebUi,帮助你快速搭建私有化大模型。 Ollama 是一个容器化工具,简化了大语言模型的管理与运行,支持…...
OSPF基础(1):工作过程、状态机、更新
OSPF基础 1、技术背景(与RIP密不可分,因为RIP中存在的问题) RIP中存在最大跳数为15的限制,不能适应大规模组网周期性发送全部路由信息,占用大量的带宽资源以路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒…...
【目标检测】模型验证:K-Fold 交叉验证
K-Fold 交叉验证 1、引言1.1 K 折交叉验证概述 2、配置2.1 数据集2.2 安装包 3、 实战3.1 生成物体检测数据集的特征向量3.2 K 折数据集拆分3.3 保存记录3.4 使用 K 折数据分割训练YOLO 4、总结 1、引言 我们将利用YOLO 检测格式和关键的Python 库(如 sklearn、pan…...
verdi 查看覆盖率
点击Tools -> Coverage,会出现一个Verdi:vdCoverage:1页面点击File->Open/Add Database, 会出现一个 Open/Add Coverage Database页面, 在Design Hierarchy/Testbench Location 中输入 vdb路径点击… , 会出现当前路径下的文件…...
Unity 2D实战小游戏开发跳跳鸟 - 计分逻辑开发
上文对障碍物的碰撞逻辑进行了开发,接下来就是进行跳跳鸟成功穿越过障碍物进行计分的逻辑开发,同时将对应的分数以UI的形式显示告诉玩家。 计分逻辑 在跳跳鸟通过障碍物的一瞬间就进行一次计分,计分后会同步更新分数的UI显示来告知玩家当前获得的分数。 首先我们创建一个用…...
京准:NTP卫星时钟服务器对于DeepSeek安全的重要性
京准:NTP卫星时钟服务器对于DeepSeek安全的重要性 京准:NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域,分布式拒绝服务(DDoS)攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…...
Android学习20 -- 手搓App2(Gradle)
1 前言 昨天写了一个完全手搓的:Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt,d8这些来搞。其实不想弄Gradle的,不过想着既然开始了,就多看一些。之前写过一篇Gradle,不过是最简单的编译,不涉…...
车型检测7种YOLOV8
车型检测7种YOLOV8,采用YOLOV8NANO训练,得到PT模型,转换成ONNX,然后OPENCV的DNN调用,支持C,python,android开发 车型检测7种YOLOV8...
IDEA 中集成 Maven,配置环境、创建以及导入项目
目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...
react关于手搓antd pro面包屑的经验(写的不好请见谅)
我们先上代码,代码里面都有注释,我是单独写了一个组件,方便使用,在其他页面引入就行了 还使用了官方的Breadcrumb组件 import React, { useEffect, useState } from react; import { Breadcrumb, Button } from antd; import { …...
[含文档+PPT+源码等]精品大数据项目-Django基于大数据实现的心血管疾病分析系统
大数据项目-Django基于大数据实现的心血管疾病分析系统背景可以从以下几个方面进行阐述: 一、项目背景与意义 1. 心血管疾病现状 心血管疾病是当前全球面临的主要健康挑战之一,其高发病率、高致残率和高死亡率严重威胁着人类的生命健康。根据权威机构…...
【工具篇】深度剖析 Veo2 工具:解锁 AI 视频创作新境界
在当下这个 AI 技术日新月异的时代,各种 AI 工具如雨后春笋般涌现,让人目不暇接。今天,我就来给大家好好说道说道谷歌旗下的 Veo2,这可是一款在 AI 视频创作领域相当有分量的工具。好多朋友都在问,Veo2 到底厉害在哪?好不好上手?能在哪些地方派上用场?别着急,今天我就…...
【Rust自学】19.5. 高级类型
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 19.5.1.使用newtype模式实现类型安全和抽象 在 19.2. 高级trait 中(具体来说是…...
113,【5】 功防世界 web unseping
进入靶场 代码审计 <?php // 高亮显示当前 PHP 文件的源代码,方便开发者查看代码结构和内容 highlight_file(__FILE__);// 定义一个名为 ease 的类 class ease {// 私有属性 $method,用于存储要调用的方法名private $method;// 私有属性 $args&…...
leetCode刷题-图、回溯相关
岛屿数量 class Solution { private:int mi;int mj; public:int numIslands(vector<vector<char>>& grid) {mi grid.size() - 1; // i的范围 0~mimj grid[0].size() - 1; // j的范围 0~mjint landnum 0;bool sea false;do {pair<int, int> res …...
Windows编程:下载与安装 Visual Studio 2010
本节前言 在写作本节的时候,本来呢,我正在写的专栏,是 MFC 专栏。而 VS2010 和 VS2019,正是 MFC 学习与开发中,可以使用的两款软件。然而呢,如果你去学习 Windows API 知识的话,那么࿰…...
OpenEuler学习笔记(十八):搭建企业云盘服务
要在 OpenEuler 上搭建企业云盘,可借助一些开源软件来实现,以下以 Nextcloud 为例详细介绍搭建步骤。Nextcloud 是一款功能丰富的开源云存储解决方案,支持文件共享、同步、协作等多种功能。 1. 系统环境准备 确保 OpenEuler 系统已更新到最…...
什么是三层交换技术?与二层有什么区别?
什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…...
Ollama+deepseek+Docker+Open WebUI实现与AI聊天
1、下载并安装Ollama 官方网址:Ollama 安装好后,在命令行输入, ollama --version 返回以下信息,则表明安装成功, 2、 下载AI大模型 这里以deepseek-r1:1.5b模型为例, 在命令行中,执行&…...
数字滤波器的分类
数字滤波器可以根据不同的标准进行分类,以下是几种常见的分类方式: 1. 按实现结构分类 FIR滤波器(有限脉冲响应滤波器) - 特点:系统的脉冲响应在有限时间内衰减到零。 - 优点:线性相位特性(保…...
MySQL主要使用的几种索引算法
MySQL 索引算法详解 在 MySQL 中,索引是一种提高查询速度的数据结构。不同的索引算法适用于不同的查询场景,本文将详细介绍 MySQL 的几种主要索引算法。 1. BTree 索引(默认索引) 1.1 存储结构 BTree(B 树ÿ…...
Linux生成自签证书【Nginx】
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...
网络安全 | 加密技术揭秘:保护数据隐私的核心
网络安全 | 加密技术揭秘:保护数据隐私的核心 一、前言二、对称加密技术2.1 原理2.2 优点2.3 缺点2.4 应用场景 三、非对称加密技术3.1 原理3.2 优点3.3 缺点3.4 应用场景 四、哈希函数4.1 原理4.2 优点4.3 缺点4.4 应用场景 五、数字签名5.1 原理5.2 优点5.3 缺点5…...
使用服务器部署DeepSeek-R1模型【详细版】
文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中,模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别,如何高效、稳定地将深度学习模型部署到…...
DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区
Direct3D 11 总结 —— 4 绘制三角形_direct绘制三角形-CSDN博客 DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区 - X_Jun - 博客园 练习题 粗体字为自定义题目 尝试交换三角形第一个和第三个顶点的数据,屏幕将显示什么?为什么&…...
Continue 与 CodeGPT 插件 的对比分析
以下是 Continue 与 CodeGPT 插件 的对比分析,涵盖功能定位、适用场景和核心差异: 1. 功能定位 工具核心功能技术基础Continue专注于代码自动补全和上下文感知建议,支持多语言,强调低延迟和轻量级集成。基于本地模型或轻量级AI&a…...
