当前位置: 首页 > article >正文

数据结构——串、数组和广义表

串、数组和广义表

1. 串

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412021944459.png

1.1 串的定义

串(string)是由零个或多个字符组成的有限序列。一般记为

S = a 1 a 2 . . . a n ( n ≥ 0 ) S=a_1a_2...a_n(n\geq0) S=a1a2...an(n0)

其中,S是串名,单引号括起来的字符序列是串的值, a i a_i ai可以是字母、数字或其他字符;串中字符的个数n称为串的长度。n=0时的串称为空串(用表示)。

1.2 串的模式匹配

1.2.1 朴素模式匹配

使用暴力求解的方法,一直遍历,但时间复杂度过高。

int ViolentMatch(string &s, string &t)
{int i = 0, j = 0;while (i < s.size() && j < t.size()){if (s[i] == t[j]){i++;j++;}else{i = i - j + 1;j = 0;}}if (j == t.size())return i - j;elsereturn -1;
}

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022043282.png

1.2.2 KMP算法

vector<int> make_next(const string &s)
{int i = 0, j = -1;vector<int> next(s.size() + 1, 0); // Initialize the vector with the correct sizenext[0] = -1;                      // Set the first element to -1while (i < s.size()){if (j == -1 || s[i] == s[j]){i++;j++;next[i] = j;}elsej = next[j];}return next;
}
int KMP(const string &s, const string &t)
{int i = 0, j = 0;vector<int> next = make_next(t);while (i < s.size() && j < (int)t.size()){if (j == -1 || s[i] == t[j]) // Fix the logic error here{i++;j++;}elsej = next[j];}if (j == t.size())return i - j;return -1;
}

2. 数组和广义表

2.1 数组

2.1.1 数组的定义

数组是由n(n>1)个相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素,每个元素在n个线性关系中的序号称为该元素的下标,下标的取值范围称为数组的维界。

数组与线性表的关系:数组是线性表的推广。一维数组可视为一个线性表;二维数组可视为其元素是定长数组的线性表,以此类推。数组一旦被定义,其维数和维界就不再改变。因此,除结构的初始化和销毁外,数组只会有存取元素和修改元素的操作。

2.1.2 数组的存储结构

大多数计算机语言都提供了数组数据类型,逻辑意义上的数组可采用计算机语言中的数组数据类型进行存储,一个数组的所有元素在内存中占用一段连续的存储空间。

以一维数组 A[0…n-1]为例,其存储结构关系式为

L O C ( a i , j ) = L O C ( a 0 , 0 ) + i × L ( 0 ≤ i ≤ n ) LOC(a_{i,j})=LOC(a_{0,0})+i\times L (0\leq i\leq n) LOC(ai,j)=LOC(a0,0)+i×L(0in)

其中L是每个存储单元的大小。

对于多维数组,有两种映射方法:按行优先和按列优先。以二维数组为例,按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素。设二维数组的行下标与列下标的范围分别为[0, h 1 h_1 h1]与[0, h 2 h_2 h2],则存储结构关系式为

L O C ( a i , j ) = L O C ( a 0 , 0 ) + [ i × ( h 2 + 1 ) + j ) × L LOC(a_{i,j})=LOC(a_{0,0})+[i\times (h_2+1)+j)\times L LOC(ai,j)=LOC(a0,0)+[i×(h2+1)+j)×L

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022102961.png

2.2 特殊矩阵的压缩存储

压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配空间。

特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。常见的特殊矩阵有对称矩阵、上(下)三角矩阵、对角矩阵等。

特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的、值相同的多个矩阵元素压缩存储到一个存储空间中。

2.2.1 对称矩阵

对于矩阵 A A A元素满足性质 a i , j = a j , i ​ a_{i,j}=a_{j,i}​ ai,j=aj,i,则其为对称矩阵。

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022108424.png

由于其上三角与下三角元素相同,使用二维数组会浪费空间,故使用一维数组存储来压缩空间。如下图所示,数组下标从0开始。

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022112698.png

2.2.2 三角矩阵

下三角矩阵:

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022114196.png

上三角矩阵:

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022115595.png

2.2.3 三对角矩阵

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022116892.png

2.2.4 稀疏矩阵

https://cdn.jsdelivr.net/gh/junmoxiao6661/pigo_image@main/202412022119078.png

相关文章:

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是串的值&#xff0c; a i a_i a…...

Spring中DI与IOC的关系解析

在Spring框架中&#xff0c;DI&#xff08;依赖注入&#xff09;和IOC&#xff08;控制反转&#xff09;是两个核心概念&#xff0c;它们密切相关但有不同的侧重点。 IOC&#xff08;控制反转&#xff09; IoC 是一种设计原则&#xff0c;将对象的创建和依赖管理交给框架或容…...

pycharm-python國際象棋遊戲代碼

嗯&#xff0c;用户的问题是“pycharm寫關於python國際象棋遊戲代碼”&#xff0c;也就是要用PyCharm来写一个Python的国际象棋游戏代码。我需要先整理一下用户提供的搜索结果&#xff0c;看看有什么相关的信息可以利用。 首先看搜索结果中的各个网页内容。网页1主要讲的是象棋…...

【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解

未经许可&#xff0c;不得转载。 文章目录 MVC模型模型&#xff08;Model&#xff09;视图&#xff08;View&#xff09;控制器&#xff08;controller&#xff09;MVC工作流程 项目结构java目录resources目录webapp目录 依赖管理配置文件 MVC模型 MVC&#xff08;Model-View-…...

单片机ADC+NTC温度采集电路学习

文章目录 前言一、NTC是什么&#xff1f;二、NTC重要参数三、实际应用举例四、NTC和PTC的区别总结 前言 NTC常用来检测外部环境或者电池温度&#xff0c;及汽车水温传感器。 有时候电池并不内置NTC&#xff0c;所以需要外置NTC来采集电池温度&#xff0c;注意要紧贴电池&#…...

【Spring Boot 中 `@Value` 注解的使用】

文章目录 一、前言二、Value 注解简介三、Value 注解的常见用法1. 读取 application.properties 或 application.yml 配置值&#xff08;1&#xff09;配置文件示例&#xff08;2&#xff09;Java 代码示例&#xff08;3&#xff09;测试输出 2. 使用 Value 设置默认值3. 读取系…...

分布式数据库系统(DDBS)

分布式数据库系统&#xff08;DDBS&#xff09; (Distributed Database System)的概念及其特点&#xff1a; 分布式数据库系统是一种数据库系统&#xff0c;它将数据分散存储在多个地理上分散的节点上&#xff0c;通过一个全局数据库管理系统&#xff08;DBMS&#xff09;来协调…...

2025年,电脑还需要分区吗?

随着2025年的到来&#xff0c;电脑存储空间已经不像以前那么金贵&#xff0c;固态硬盘&#xff08;SSD&#xff09;容量更大、速度更快&#xff0c;云存储也成了日常标配。许多人开始质疑&#xff1a;电脑还需要像以前那样分区吗&#xff1f; 一、分区到底是什么意思&#xff…...

一个成功的Git分支模型

本作品原发布账号为【白鸽子中文网】&#xff0c;现转至当前账号【飞翔中文网】。 反思备录(2020/3/5) 这个模型构思于2010年&#xff0c;现已过去10余年&#xff0c;(2010年)那时正处于Git诞生后不久。在这10年间&#xff0c;git-flow(本文中提到的分支模型) 在许多软件队伍里…...

Kafka可视化工具KafkaTool工具的使用

Kafka Tool工具 介绍 使用Kafka的小伙伴&#xff0c;有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢&#xff1f;下面推荐给大家一款带有可视化页面的Kafka工具&#xff1a;Kafka Tool &#xff08;目前最新版本是 3.0.2&#xff09; 注意&#xff1a;以前叫Kafk…...

【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目

目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…...

同等学力申硕-计算机专业-数学基础-历年真题和答案解析

同等学力申请硕士学位考试是比较适合在职人员的提升学位方式&#xff0c;了解过的人应该都知道&#xff0c;现在社会的竞争压力越来越大&#xff0c;为了提高职业生存能力&#xff0c;提升学位在所难免。 为了通过同等学力申请硕士学位考试&#xff0c;对于计算机专业的人来说…...

网络安全漏洞与修复 网络安全软件漏洞

文章目录 一、软件漏洞的概念 1、信息安全漏洞简述2、软件漏洞3、软件漏洞概念4、软件漏洞的成因分析 二、软件漏洞标准化管理 1、软件漏洞分类2、软件漏洞分级3、安全漏洞管理规范 一、软件漏洞的概念 1、信息安全漏洞简述 信息安全漏洞是信息安风险的主要根源之一&…...

STM32:Default_Handler问题

记录代码进入Default_Handler错误的解决办法 一、 问题表述 在一次调试代码的时候&#xff0c;发现代码卡死在启动文件 startup_at32f423xx_.s 的367行&#xff0c;即 B. 处B.是汇编代码&#xff0c;B&#xff1a;跳转到一个标号&#xff0c;这里跳转到一个‘.’&#xff0c;…...

iwebsec-SQL数字型注入

1.判断是否存在漏洞 添加and 11发现正常显示&#xff0c;添加and 12无回显条目&#xff0c;则存在sql注入漏洞 2.因为有回显&#xff0c;尝试union联合注入&#xff0c;使用order by判断出有3个字段 3.使用union联合注入查看回显位&#xff0c;发现3三个字段均有回显&#xff…...

基于Spring Boot的冷链物流系统的设计与实现的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

LLM(6):理解词嵌入

深度神经网络模型&#xff0c;包括 LLM&#xff0c;无法直接处理原始文本。由于文本是分类的&#xff0c;它与用于实现和训练神经网络的数学操作不兼容。因此&#xff0c;我们需要一种方法来将词语表示为连续值向量。 注意&#xff1a;如果读者对向量和张量不太了解&#xff0c…...

SQLMesh系列教程:利用date_spine宏构建日期序列实践指南

引言&#xff1a;为什么需要日期维度表&#xff1f; 在数据分析和报表开发中&#xff0c;日期维度表是不可或缺的基础结构&#xff0c;其中包括一定日期范围的日期序列&#xff0c;每个序列包括对应日期属性&#xff0c;如年季月日、是否周末等。无论是计算日粒度销售额、分析…...

sqlite mmap

https://www.sqlite.org/mmap.html 1. 内存映射 I/O 的基本原理 默认机制&#xff08;传统 I/O&#xff09; SQLite 默认通过 xRead() 和 xWrite() 方法&#xff08;对应 read()/write() 系统调用&#xff09;访问数据库文件。这些方法需要将数据从内核缓冲区复制到用户空间&am…...

Java 大视界 -- 企业数字化转型中的 Java 大数据战略与实践(93)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Unity Enlighten与Progressive GPU Lightmapper对比分析

一、技术背景与核心差异 1. 算法原理 Enlighten 基于辐射度算法&#xff08;Radiosity&#xff09;&#xff0c;通过将场景分解为Systems&#xff08;光照关联单元&#xff09;和Clusters&#xff08;计算单元&#xff09;&#xff0c;预计算光照环境中的间接光传输。其核心是…...

linux:环境变量,进程地址空间

一.命令行参数 main的参数&#xff1a;int argc,char*argv[]&#xff0c;char*env[] 1.参数意义&#xff1a; argc是命令行调用次程序时传递的参数 例&#xff1a; ls -l -a 传递了三个参数&#xff0c;“ls" "-l" "-a"三个字符串 argv是传递的参…...

mybatis集合映射association与collection

官方文档&#xff1a;MyBatis的一对多关联关系 一、用途 一对一&#xff1a;association 一对多&#xff1a;collection 二、association 比较容易理解&#xff0c;可参考官方文档 三、collection <?xml version"1.0" encoding"UTF-8"?> &l…...

【AIGC】Win10系统极速部署Docker+Ragflow+Dify

【AIGC】WIN10仅3步部署DockerRagflowDify 一、 Docker快速部署1.F2进入bios界面&#xff0c;按F7设置开启VMX虚拟化技术。保存并退出。2.打开控制面板配置开启服务3.到官网下载docker安装包&#xff0c;一键安装&#xff08;全部默认勾选&#xff09; 二、 RagFlow快速部署1.确…...

全局上下文网络GCNet:创新架构提升视觉识别性能

摘要&#xff1a;本文介绍了全局上下文网络&#xff08;GCNet&#xff09;&#xff0c;通过深入分析非局部网络&#xff08;NLNet&#xff09;&#xff0c;发现其在重要视觉识别任务中学习的全局上下文与查询位置无关。基于此&#xff0c;提出简化的非局部模块、全局上下文建模…...

鸿蒙NEXT项目实战-百得知识库03

代码仓地址&#xff0c;大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点&#xff1a; 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...

Linux上位机开发实战(qt编译之谜)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多同学都喜欢用IDE&#xff0c;也能理解。因为不管是visual studio qt插件&#xff0c;还是qt creator其实都帮我们做了很多额外的工作。这里面最…...

【人工智能】【Python】在Scikit-Learn中使用网格搜索对决策树调参

这次实践课最大收获非网格搜索莫属。 # 导入包 import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, GridSearchCV # 网格搜索 from sklearn.tree import DecisionTreeClassi…...

用Python代码生成批量下单json

需求 根据以下json体&#xff0c;生成230OrderList对象生成10位有序的数字字母随机数赋值给OrderDetailList.ApiOrderId 和 OrderDetailList.Traceid生成的Json文件 保存在项目JSON目录中 {"UAccount": "xxxx","Password": "","…...

笔记:代码随想录算法训练营day56:图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础

学习资料&#xff1a;代码随想录 连通图是给无向图的定义&#xff0c;强连通图是给有向图的定义 朴素存储&#xff1a;二维数组 邻接矩阵 邻接表&#xff1a;list基础知识&#xff1a;C 容器类 <list> | 菜鸟教程 深搜是沿着一个方向搜到头再不断回溯&#xff0c;转…...