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

数据结构与算法基础(青岛大学-王卓)(5)

叮叮咚咚,新一期来袭,我还在吃桃子,吃桃子,吃桃子。。。串和python的字符串差不多,数组和广义表像是python的list


文章目录

      • 串(string) - 字符串
        • 概念及术语
        • 串的类型定义
        • 存储结构(同线性表)
        • 串的模式匹配算法
          • BF 算法
          • KMP算 法 (特点:速度快 )
      • 数组
        • 数组的定义
          • 一维数组
          • 二维数组
          • 数组特点
        • n维数组的数据类型定义
        • 数组的顺序存储
        • 特殊矩阵的压缩存储
          • 对称矩阵
          • 三角矩阵
          • 对角矩阵
          • 稀疏矩阵
      • 广义表
        • 概念
        • 性质
        • 广义表和线性表的区别?
        • 基本运算
      • 案例分析
    • TO BE CONTINUED...

串(string) - 字符串

概念及术语

  • 定义: 零个或多个任意字符组成的有限序列,是一种内容受限的线性表
    在这里插入图片描述

  • 子串 : 串中任意个连续字符组成的子序列称为该串的子串, 空串和串本身都是子串,不含本身的是真子串。

  • 主串 : 包含子串的串相应地称为主串。

  • 字符位置 : 字符在序列中的序号为该字符在串中的位置 。

  • 子串位置 : 子串第一个字符在主串中的位置 。

  • 空格串 : 由一个或多个空格组成的串 , 与空串不同。

  • 串相等 : 当且仅当两个串的长度相等并且各个对应 位置上的字符都相同时 , 这两个串才是相等的 。

  • 所有的空串是相等的。

串的类型定义

在这里插入图片描述

在这里插入图片描述

存储结构(同线性表)

  • 顺序串(顺序存储结构)(更常用因不经常插入删除)

    #define MAXLEN 255
    typedef struct{char ch[MAXLEN+1]; // 存储串的一维数组,实际范围0-255(0可能保留不用)int length; // 串的当前长度长度
    }SString;
    
  • 链串(链式存储结构)

    在这里插入图片描述

    // 块链结构
    #define CHUNKSIZE 80  // 块的大小可有客户定义
    typedef struct Chunk{char ch[CHUNKSIZE];struct Chunk *next;
    }Chunk;typedef struct LString{Chunk *head,*tail; // 串的头指针和尾指针int curlen; //串的当前长度
    }LString; //字符串的块链结构
    

串的模式匹配算法

确定主串中所含子串(模式串)第一次出现的位置(BF&KMP)

BF 算法
  • (Brute-Force, 又称古典的 、 经典的 、 朴素的 、 穷举的 )

思路:从主串的每一个字符开始依次与模式串字符进行比较

Index(S,T,pos)

  • 将主串的第 pos 个字符和模式串的第一个字符比较 ,若相等,继续逐个比较后续字符;

  • 若不等,从主串的下一字符起(回溯) , 重新与模式串的第一个字符比较

  • 直到主串的一个连续子串字符序列与模式串相等。 返回值
    为 S 中与 T 匹配的子序列第一个字符的序号 , 即匹配成功 。
    否则 , 匹配失败 , 返回值 0

    在这里插入图片描述

    int Index_BF(SString S, SString T, int pos){int i=pos; j=1; // 主串i的位置从1开始pos>=1while(i<=S.length&&j<=T.length){ if (S.ch[i]==T.ch[j]) {++i; ++j;} // 主串和子串依次匹配下一个字符else {i=i-j+2; j=1} // 字符不相等,主串i回溯位置到(i-(j-1)+1),j回到1}if (j>T.length) return i-T.length; // 返回模式串匹配成功后主串对应首字符的下标else return 0;
    }
    
  • 时间复杂度为(n-m)*m+m --> (n-m+1)*m--> O(n*m)(当m<<n)在这里插入图片描述

KMP算 法 (特点:速度快 )

利用已经部分匹配的结果而加快模式串的滑动速度 ?
且主串 S 的指针 i 不必回溯 ! 可提速到 O( n+m )

在这里插入图片描述

j的位置可以根据模式串来确定 ,定义next[j]函数 , 表明当模式中剃个字符与主串中相应字符 " 失配 " 时 , 在模式中需重新和主串中该字符进行比较的字符的位置 。

在这里插入图片描述

在这里插入图片描述

int Index_KMP(SString S, SString T, int pos){int i=pos; j=1; // 主串i的位置从1开始pos>=1while(i<=S.length&&j<=T.length){ if (S.ch[i]==T.ch[j]) {++i; ++j;} // 主串和子串依次匹配下一个字符else j=next[j] // 通过next[j]得到j的位置,i不用回溯}if (j>T.length) return i-T.length; // 返回模式串匹配成功后主串对应首字符的下标else return 0;
}void get_next(SString T, int &next[]){i=1; next[1]=0; j=0;while (i < T.length){if (j==0 || T.ch[i]==T.ch[j]){++i; ++j;next[i]=j;}else j=next[j];}
}

next[j]的改进- nextval[j]

在这里插入图片描述

在这里插入图片描述

void get_nextval(SString T, int &nextval[]){i=1; nextval[1]=0; j=0;while (i < T.length){if (j==0 || T.ch[i]==T.ch[j]){++i; ++j;if (T.ch[i]==T.ch[j]) nextval[i]=j;else nextval[i]=nextval[j];}else j=nextval[j];}
}

数组

数组的定义

按一定格式排列起来的具有相同类型的数据元素的集合

一维数组

若线性表中的数据元素为非结构的简单元素,则称为一维数组 。
其逻辑结构有线性结构,定长的线性表 。

声明格式 : 数据类型 变量名称 [长度]

二维数组

在这里插入图片描述

声明格式: 数据类型变量名称 [行数] [列数] ,eg: int num[5][8]

在 C 语言中 ,一个二维数组类型也可以定义为一维数组类型
( 其分量类型为一维数组类型 ),

即 :typedef elemtype array2[m][n];

等价于 :

typedef elemtype array1[n];

typedef array1 array2[m];

三维数组 : 若二维数组中的元素又是一个一维数组 , 则称作三维数组 。。。。

n维数组:若n-1维数组中的元素又是一个一维数组结构则称为n维数组 。

线性表是数组结构的一个特例,数组结构又是线性表结构的扩展。

数组特点

结构固定(定以后维数和维界不再改变),基本操作就是初始化,销毁,取元素,修改元素 。

n维数组的数据类型定义

在这里插入图片描述

在这里插入图片描述

数组的顺序存储

一维数组存储位置

在这里插入图片描述

二维数组存储

  • 以行优先 - JAVA, C, BASIC ,COBOL ,PASCAL

    在这里插入图片描述

  • 以列优先 - FORTRAN

    在这里插入图片描述

三维数组 按页行列存放,页优先的顺序存储

在这里插入图片描述

在这里插入图片描述

扩展到n维数组存储位置计算

在这里插入图片描述

在这里插入图片描述

特殊矩阵的压缩存储

  • 压缩存储定义:若多个数据元素的值都相同 , 则只分配一个元素值的存储空间 , 且
    零元素不占存储空间 。

  • 特殊矩阵:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵(非零元素个数一般<5%)

对称矩阵

在这里插入图片描述

只需存储一半元素,存储个数为每一行个数相加,即1+2+3+…+n=n(n+1)/2

在这里插入图片描述

任一个元素存在一维数组的位置aij的位置i(i-1)/2+(j-1) 原理:前面(i-1)行个数+本行的前(j-1)个元素

三角矩阵

在这里插入图片描述

对角矩阵

[ 特点 ] 在n×n的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0 ,则称为对角矩阵 。 常见的有三对角矩阵 、 五对角矩阵 、 七对角矩阵等 。(3/5/7条数据)

在这里插入图片描述

在这里插入图片描述

稀疏矩阵

三元组(行,列,值) 和矩阵维数(总行,总列)来唯一确定一个元素的位置

在这里插入图片描述

  • 三元组顺序表又称有序的双下标法。

  • 优点:非零元素在表中按行序有序存储

  • 缺点:不能随机存储,按行号存取某一行中的非零元素要从头开始查找

十字链表 法存储稀疏矩阵

在这里插入图片描述

在这里插入图片描述

广义表

概念

广义表( 又称列表 Lists) 是 n>=0 个元素 a0, a1, a2…an-1的有限序列 , 其中每一个或者是原子 , 或者是一个广义表 。

在这里插入图片描述

性质

在这里插入图片描述

在这里插入图片描述

广义表和线性表的区别?

  • 广义表是线性表的推广,线性表是广义表的特例
  • 广义表的结构相当灵活 , 在某种前提下 , 它可以兼容线性表 、 数组 、
    树和有向图等各种常用的数据结构 。

基本运算

GetHead(L): 求非空广义表的第一个元素,可以是一个原子或者一个子表

GetTail(L):非空广义表去掉表头元素以外其他元素所构成的表。

案例分析

病毒感染检测(病毒RNA是环状)

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tK0IY99o-1687358835821)(../resources/image-20230621224425435.png)]


TO BE CONTINUED…

相关文章:

数据结构与算法基础(青岛大学-王卓)(5)

叮叮咚咚&#xff0c;新一期来袭&#xff0c;我还在吃桃子&#xff0c;吃桃子&#xff0c;吃桃子。。。串和python的字符串差不多,数组和广义表像是python的list 文章目录 串(string) - 字符串概念及术语串的类型定义存储结构&#xff08;同线性表&#xff09;串的模式匹配算法…...

微信小程序开发入门学习01-TDesign模板解读

目录 1 使用模板创建小程序2 app.json3 页面布局总结 原来我们使用微信开发者工具&#xff0c;比较困难的是前端框架的选择上&#xff0c;官方也没有提供一套框架供我们使用&#xff0c;最近开发者工具已经提供了一套前端框架&#xff0c;后续我们开发的效率会因为使用模板提高…...

使用 Jetpack Compose 创建自定义的对话框(Dialog)

在 Jetpack Compose 中&#xff0c;对话框&#xff08;Dialog&#xff09;是一种常见的用户界面组件&#xff0c;用于展示重要的信息、确认操作或者收集用户输入。本篇博客将带你深入了解 Jetpack Compose 中的对话框&#xff0c;并展示如何创建自定义的对话框&#xff0c;以满…...

c++ auto学习笔记

一、auto的意义 在C11中赋予auto的意义是&#xff1a;在声明变量时&#xff0c;根据初始化表达式自动推断该变量的类型。声明函数时作为函数返回值的占位符&#xff08;用在函数返回类型后置的情况&#xff09;。 如 auto i 6; //auto推断为intauto func()->int //函数返…...

【随机种子初始化】一个神经网络模型初始化的大坑

1 问题起因和经过 半年前写了一个模型&#xff0c;取得了不错的效果&#xff08;简称项目文件1&#xff09;&#xff0c;于是整理了一番代码&#xff0c;保存为了一个新的项目&#xff08;简称项目文件2&#xff09;。半年后的今天&#xff0c;我重新训练这个整理过的模型&…...

翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不是…...

手机照片删除后如何恢复

在如今移动互联网和智能手机时代&#xff0c;拍摄照片已经成为了人们常见的一种生活方式&#xff0c;尤其是通过手机拍摄照片已经成为了许多人记录生活点滴、分享经验和表达情感等的必备工具。但是&#xff0c;随着手机照片量的激增&#xff0c;意外删除手机中珍贵照片的事件也…...

SpringBoot 线上服务假死,CPU 内存正常,什么情况?

背景 开发小伙伴都知道线上服务挂掉&#xff0c;基本都是因为cpu或者内存不足&#xff0c;出现GC频繁OOM之类的情况。本篇文章区别以上的情况给小伙伴们带来不一样的服务挂掉。 还记得哔哩哔哩713事故中那场诡计多端的0吗&#xff1f; 图片 对就是这个0&#xff0c;和本次事…...

kotlin从入门到精通之内置类型

基本类型 声明变量 val&#xff08;value的简写&#xff09;用来声明一个不可变的变量&#xff0c;这种变量在初始赋值之后就再也不能重新赋值&#xff0c;对应Java中的final变量。 var&#xff08;variable的简写&#xff09;用来声明一个可变的变量&#xff0c;这种变量在初始…...

实战指南:使用Spring Boot实现消息的发送和接收

当涉及到消息发送和接收的场景时&#xff0c;可以使用Spring Boot和消息中间件RabbitMQ来实现。下面是一个简单的示例代码&#xff0c;展示了如何在Spring Boot应用程序中创建消息发送者和接收者&#xff0c;并发送和接收一条消息。 首先&#xff0c;你需要进行以下准备工作 确…...

常用的数据结构——栈

目录 1、入栈 2、出栈 3、获取栈顶的元素 4、从栈中查找元素 栈是一种常见的数据结构&#xff0c;栈的特点是后进先出&#xff0c;就像我们叠盘子&#xff0c;拿走上面的盘子才能拿到下一个。java中的栈java.util.Stack是通过java.util.Vector实现的&#xff0c;所以底层都…...

C++完成淄博烧烤节管理系统

背景&#xff1a; 这次我们结合今年淄博烧烤做一个餐厅管理系统&#xff0c;具体需求如下&#xff0c;我们选择的是餐饮商家信息管理 问题描述&#xff1a; 淄博烧烤今年大火&#xff0c;“进淄赶烤”是大家最想干的事情&#xff0c;淄博烧烤大火特火的原因&#xff0c;火的…...

我心中的TOP1编程语言

目录 一、评选最佳编程语言时需要考虑哪些标准 &#xff08;一&#xff09;易用性 &#xff08;二&#xff09;执行效率 &#xff08;三&#xff09;语言功能特性 &#xff08;四&#xff09;工具生态环境 &#xff08;五&#xff09;开发者社区 二、不同编程语言的优点…...

Linux工具之gdb(含移植到arm-linux系统)

文章目录 文件目录结构移植ncurses库移植gdb移植到arm板调试测试 linux主机&#xff1a;ubuntu-18.04 交叉编译器&#xff1a;arm-buildroot-linux-gnueabihf 开发板kernel&#xff1a;Linux 5.4.0-150-generic x86_64 开发板&#xff1a;100ASK_STM32MP157_PRO开发板 arm-…...

DolphinScheduler

参考 Apache DolphinScheduler v1.3.9 使用手册 内置组件 masterserverworkserverzookeepertask queuealertapiui 设计 去中心化设计 通过zk选举 UI功能 队列管理 Yarn调度器的资源队列 用户管理 租户对应的是Linux系统用户&#xff0c;是Worker执行任务使用的用户 用户…...

10大白帽黑客专用的 Linux 操作系统

平时在影视里见到的黑客都是一顿操作猛如虎&#xff0c;到底他们用的都是啥系统呢&#xff1f; 今天给大家分享十个白帽黑客专用的Linux操作系统。 ▍1. Kali Linux Kali Linux是最著名的Linux发行版&#xff0c;用于道德黑客和渗透测试。Kali Linux由Offensive Security开发&…...

Golang每日一练(leetDay0099) 单词规律I\II Word Pattern

目录 290. 单词规律 Word Pattern &#x1f31f;  291. 单词规律 II Word Pattern ii &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 …...

linux_centos7.9/ubuntu20.04_下载镜像及百度网盘分享链接

1、镜像下载站点 网易开源镜像&#xff1a;http://mirrors.163.com/ 搜狐开源镜像&#xff1a;http://mirrors.sohu.com/ 阿里开源镜像&#xff1a;https://developer.aliyun.com/mirror/ 首都在线科技股份有限公司&#xff1a;http://mirrors.yun-idc.com/ 常州贝特康姆软件技…...

Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟完美替代品)

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!Reqable HTTP一站式开发+调试工具(小黄鸟作者另一力作、小黄鸟替代品) 环境 win10pixel4Android13概览 …...

Yacc 与 Lex 快速入门

Yacc 与 Lex 快速入门 简介&#xff1a; Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上&#xff0c; 如果你熟练掌握 Lex 和 Yacc 的话&#xff0c;它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。本文详细的讨论了编写自己的语言和编译器所 用到的这两…...

ComfyUI-Manager终极指南:3个核心功能彻底解决AI工作流管理难题

ComfyUI-Manager终极指南&#xff1a;3个核心功能彻底解决AI工作流管理难题 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable vari…...

sudo企业级应用【20260525】001篇

文章目录 一、总体设计思路 1️⃣ 设计原则 2️⃣ 日志策略(重点) 二、10 个真实生产场景(含 sudoers 配置) 🔹 Linux 系统管理(3 个) ✅ 场景 1:基础运维(用户 / 权限) ✅ 场景 2:磁盘与文件系统 ✅ 场景 3:网络与防火墙 🔹 云管理(2 个) ✅ 场景 4:云 CLI …...

如何进行TVA仿真引擎的“光照地狱”训练?

重磅预告&#xff1a;本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容&#xff0c;该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

第三卷第4章:原型模式设计思想

第三卷第4章:原型模式设计思想 目录介绍 01.案例引入与思考 1.1 痛点场景 1.2 它哪里不舒服 1.3 引出本篇主角 02.原型模式介绍 2.1 原型模式由来 2.2 原型模式定义...

PCB的常规机械通孔与HDI工艺钻孔差异

结合常规 4 层通孔 PCB&#xff08;非 HDI&#xff09; 标准制程&#xff0c;分步骤讲清钻孔时机、先后顺序&#xff0c;区分机械通孔与板件结构&#xff0c;专业且贴合工厂实际流程。一、先明确 4 层通孔板基础结构4 层板结构&#xff1a;L1 → PP 半固化片 → L2/L3&#xff…...

3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍

3分钟快速安装BetterNCM插件管理器&#xff0c;让你的网易云音乐功能翻倍 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗&#xff1f;想要解锁更多个…...

【DeepSeek集成测试黄金标准】:20年专家亲授5大避坑指南与自动化落地框架

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试黄金标准的演进与核心价值 集成测试在大语言模型工程化落地过程中已从“验证功能可用”跃迁为“保障推理一致性、上下文鲁棒性与安全边界的三位一体质量门禁”。DeepSeek系列模型&…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

CentOS 8.5最小化安装后,这5个必做的安全与效率优化设置(附一键脚本)

CentOS 8.5最小化安装后的5个必做安全与效率优化刚完成CentOS 8.5最小化安装的系统就像一张白纸——干净但缺乏生产力。作为运维老手&#xff0c;我见过太多人跳过基础优化直接部署应用&#xff0c;结果在后续使用中频繁遇到权限混乱、软件安装慢、SSH爆破等问题。本文将分享我…...

从无线破解到PDF解密:盘点那些容易被忽略的‘非主流’密码审计场景与工具

密码安全审计的隐秘战场&#xff1a;从无线网络到加密文档的实战指南 当大多数人谈论密码安全时&#xff0c;脑海中浮现的往往是服务器登录、数据库访问这些企业级场景。然而在数字生活的每个角落&#xff0c;从家庭Wi-Fi到工作文档&#xff0c;密码保护的脆弱性同样可能成为安…...