【408数据结构与算法】—串和BF算法(二十四)

简介: 串(String):零个或多个任意字符组成的有限序列

【408数据结构与算法】—串和BF算法(二十四)

一、串的定义

串(String):零个或多个任意字符组成的有限序列

2345_image_file_copy_368.jpg

❤️❤️串的几个术语

  • 子串:串中任意个连续字符组成的子序列(含空串)称为该串的子串
  • 真自串:是指不包含自身的所有子串
  • 字符位置:字符在序列中的序号为该字符在串中的位置
  • 子串位置:子串第一个字符在主串中的位置
  • 空格串:有一个或多个空格组成的串,与空串不同
  • 串相等:当且仅当两个串的长度相等并且各个对应的字符都相等时,这两个串才是相等的
  • 所有的空窜是相等的

2345_image_file_copy_369.jpg

2345_image_file_copy_370.jpg

2345_image_file_copy_371.jpg

2345_image_file_copy_372.jpg

二、串的案例引入

串的应用非常广泛,计算机上的非数值处理对象大部分是字符串数据,例如文字编辑,符号处理,各种信息处理系统等等

🍑🍑例如:病毒感染检测

研究者将人的DNA和病毒的DNA均表示由一些字母组成的字符串序列

2345_image_file_copy_373.jpg

2345_image_file_copy_374.jpg

三、串的类型定义

2345_image_file_copy_375.jpg

2345_image_file_copy_376.jpg

2345_image_file_copy_377.jpg

四、串的存储结构以及运算

串中元素逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构

2345_image_file_copy_378.jpg

😛串的顺序存储结构

🤣串的链式存储结构

2345_image_file_copy_380.jpg

  • 优点:操作方便
  • 缺点:存储密度低

2345_image_file_copy_381.jpg

😅串的链式存储结构—块链结构

2345_image_file_copy_382.jpg

五、串的模式匹配算法

  1. 算法目的:确定主串中所含子串(模式串)第一次出现的位置(定位)
  2. 算法应用:搜索引擎,拼写检查、语言翻译、数据压缩

算法种类

  • BF算法(Brute-Force又称古典的、经典的、朴树的、穷举的)
  • KMP算法(特点:速度快)

Brute—Force简称为BF算法,亦称简单匹配算法,采用穷举法的思路

算法的思路:它是从每一个字符开始依次与T的字符进行匹配

2345_image_file_copy_383.jpg

2345_image_file_copy_384.jpg

🤣BF算法设计思想

Index(S,T,pos)

  • 将主串的第pos个字符和模式串的第一个字符比较
  • 若相等,继续逐个比较后续字符
  • 若不等,从主串的下一字符起,重新与模式串的第一个字符比较
  • 知道主串的一个连续子串字符序列与模式串相等,返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。否则,匹配失败,返回值0

2345_image_file_copy_385.jpg

BF算法的时间复杂度

2345_image_file_copy_386.jpg



相关文章
|
25天前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
62 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
28天前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
20 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
21天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
31 4
|
28天前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
17 0
数据结构与算法学习十四:常用排序算法总结和对比
|
27天前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
28天前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
17 0
|
6天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
66 9
|
2天前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
4天前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
26 4
|
28天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
26 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器