26考研——树与二叉树_树、森林(5)
408答疑
文章目录
- 二、树、森林
- 树的基本概念
- 树的定义和特性
- 树的定义
- 树的特性
- 基本术语
- 树的基本术语和概念
- 祖先、子孙、双亲、孩子、兄弟和堂兄弟
- 结点的层次、度、深度和高度
- 树的度和高度
- 分支结点和叶结点
- 有序树和无序树
- 路径和路径长度
- 森林的基本术语和概念
- 森林的定义
- 森林与树的关系
- 树的性质
- 总结
- 树的存储结构
- 概述
- 双亲表示法
- 注意事项
- 孩子表示法和孩子兄弟表示法
- 孩子表示法
- 孩子兄弟表示法
- 存储结构选择
- 树、森林与二叉树的转换
- 树转为二叉树
- 转换规则
- 转换方法
- 转换性质
- 转换示例
- 森林转为二叉树
- 转换方法
- 二叉树转换为森林
- 树和森林的遍历
- 树的遍历
- 遍历定义
- 先根遍历
- 后根遍历
- 遍历序列
- 森林的遍历
- 先序遍历森林
- 中序遍历森林
- 森林与二叉树遍历方法的对应关系
- 下表树和森林的遍历与二叉树遍历的对应关系
- 注意事项
- 四、参考资料
- 鲍鱼科技课件
- 26王道考研书
二、树、森林
树的基本概念
树的定义和特性
树的定义
树是一个递归的概念,由 n ( n ≥ 0 ) n (n \geq 0) n(n≥0) 个结点的有限集组成。当 n = 0 n=0 n=0 时,称为空树。在任意一棵非空树中应满足:
- 有且仅有一个特定的称为根的结点。
- 当 n > 1 n > 1 n>1 时,其余结点可分为 m ( m > 0 ) m (m > 0) m(m>0) 个互不相交的有限集 T 1 , T 2 , ⋯ , T m T_1, T_2, \cdots, T_m T1,T2,⋯,Tm,其中每个集合本身又是一棵树,并且称为根的子树。
树的特性
树作为逻辑结构,同时也是一种分层结构,具有以下两个特点:
- 树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。
- 树中所有结点都可以有零个或多个后继。
树适用于表示具有层次结构的数据。树中的某个结点(除根结点外)最多只和上一层的一个结点(其父结点)有直接关系,根结点没有直接上层结点,因此在 n n n 个结点的树中有 n − 1 n-1 n−1 条边。而树中每个结点与其下一层的零个或多个结点(其孩子结点)都有直接关系。
基本术语
树的基本术语和概念
祖先、子孙、双亲、孩子、兄弟和堂兄弟
- 祖先:从根结点到某一结点的唯一路径上的所有其他结点。
- 结点 K K K的祖先是从根 A A A到 K K K的唯一路径上的所有其他结点。
- 子孙:某一结点的子树中所有结点。
- 如结点 B B B是 K K K的祖先,而 K K K是 B B B的子孙,结点 B B B的子孙包括 E , F , K , L E, F, K, L E,F,K,L。
- 双亲:某一结点的直接前驱,即指向该结点的结点。
- 孩子:某一结点的直接后继,即该结点指向的结点。
- 路径上最接近 K K K的结点 E E E称为 K K K的双亲, K K K为 E E E的孩子。
- 兄弟:有相同双亲的结点。
- 堂兄弟:在同一层的结点互为堂兄弟。
- 有相同双亲的结点称为兄弟(如 K K K和 L L L)。
- 双亲在同一层的结点互为堂兄弟(如 G G G与 E E E、 F F F、 H H H、 I I I、 J J J)。
- 根 A A A是树中唯一没有双亲的结点。
结点的层次、度、深度和高度
- 层次:从树根开始定义,根结点为第1层,它的孩子为第2层,以此类推。
- 结点的度:一个结点的孩子个数称为该结点的度。
- 如结点 B B B的度为2,结点 D D D的度为3。
- 深度:结点所在的层次。
- 高度:以该结点为根的子树的高度。
树的度和高度
- 树的度:树中结点的最大度数称为树的度。
- 上图中树的度为3。
- 树的高度:树的高度(或深度)是树中结点的最大层数。
- 上图中树的高度为4。
分支结点和叶结点
- 分支结点:度大于0的结点称为分支结点(也称非终端结点)。
- 叶结点:度为0(没有孩子结点)的结点称为叶结点(也称终端结点)。
有序树和无序树
- 有序树:树中结点的各子树从左到右是有次序的,不能互换。
- 无序树:树中结点的各子树从左到右没有次序,可以互换。
- 假设上图为有序树,若将子结点位置互换,则变成一棵不同的树。
路径和路径长度
- 路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。
- 因为树中的分支是有向的,即从双亲指向孩子,所以树中的路径是从上向下的,同一双亲的两个孩子之间不存在路径。
- 路径长度:路径上所经过的边的个数。
森林的基本术语和概念
森林的定义
- 森林:是 m ( m ≥ 0 ) m (m \geq 0) m(m≥0) 棵互不相交的树的集合。
森林与树的关系
- 森林的概念与树的概念十分相近,因为只要把树的根结点删去就成了森林。反之,只要给 m m m 棵独立的树加上一个结点,并把这 m m m 棵树作为该结点的子树,则森林就变成了树。
树的性质
-
树的结点数 n n n 等于所有结点的度数之和加1。
- 结点的度数是指该结点的孩子数量,每个结点与其每个孩子都由唯一的边相连,因此树中所有结点的度数之和等于树中的边数之和。
- 树中的结点(除根外)都有唯一的双亲,因此结点数 n n n 等于边数之和加1,即所有结点的度数之和加1。
-
度为 m m m 的树中第 i i i 层上至多有 m i − 1 m^{i-1} mi−1 个结点 ( i ≥ 1 i \geq 1 i≥1)。
- 第1层至多有1个结点(根结点),第2层至多有 m m m 个结点,第3层至多有 m 2 m^2 m2 个结点,以此类推。
- 使用数学归纳法可推出第 i i i 层至多有 m i − 1 m^{i-1} mi−1 个结点。
-
高度为 h h h 的 m m m 叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m−1mh−1 个结点。
- 当各层结点数达到最大时,树中至多有 1 + m + m 2 + ⋯ + m h − 1 = m h − 1 m − 1 1 + m + m^2 + \cdots + m^{h-1} = \frac{m^h - 1}{m - 1} 1+m+m2+⋯+mh−1=m−1mh−1 个结点。
-
度为 m m m、具有 n n n 个结点的树的最小高度 h h h 为 ⌈ log m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1)+1) \rceil ⌈logm(n(m−1)+1)⌉。
- 为使树的高度最小,在前 h − 1 h-1 h−1 层中,每层的结点数都要达到最大,前 h − 1 h-1 h−1 层最多有 ( m h − 1 − 1 ) ( m − 1 ) \frac{(m^{h-1} - 1)}{(m-1)} (m−1)(mh−1−1) 个结点,前 h h h 层最多有 ( m h − 1 ) ( m − 1 ) \frac{(m^h - 1)}{(m-1)} (m−1)(mh−1) 个结点。
- 因此 ( m h − 1 − 1 ) ( m − 1 ) < n ≤ ( m h − 1 ) ( m − 1 ) \frac{(m^{h-1} - 1)}{(m-1)} < n \leq \frac{(m^h - 1)}{(m-1)} (m−1)(mh−1−1)<n≤(m−1)(mh−1),即 h − 1 < log m ( n ( m − 1 ) + 1 ) ≤ h h-1 < \log_m(n(m-1)+1) \leq h h−1<logm(n(m−1)+1)≤h,解得 h min = ⌈ log m ( n ( m − 1 ) + 1 ) ⌉ h_{\text{min}} = \lceil \log_m(n(m-1)+1) \rceil hmin=⌈logm(n(m−1)+1)⌉。
-
度为 m m m、具有 n n n 个结点的树的最大高度 h h h 为 n − m + 1 n-m+1 n−m+1。
- 树的度为 m m m,因此至少有一个结点有 m m m 个孩子,它们处于同一层。
- 为使树的高度最大,其他层可仅有一个结点,因此最大高度(层数)为 n − m + 1 n-m+1 n−m+1。
- 由此,也可逆推出高度为 h h h、度为 m m m 的树至少有 h + m − 1 h+m-1 h+m−1 个结点。
总结
- 树中的结点数等于所有结点的度数之和加1。
- 度为 m m m 的树中第 i i i 层上至多有 m i − 1 m^{i-1} mi−1 个结点。
- 高度为 h h h 的 m m m 叉树至多有 m h − 1 m − 1 \frac{m^h - 1}{m - 1} m−1mh−1 个结点。
- 具有 n n n 个结点的 m m m 叉树的最小高度为 ⌈ log m ( n ( m − 1 ) + 1 ) ⌉ \lceil \log_m(n(m-1)+1) \rceil ⌈logm(n(m−1)+1)⌉。
树的存储结构
概述
树的存储方式有多种,既可采用顺序存储结构,又可采用链式存储结构,但无论采用何种存储方式,都要求能唯一地反映树中各结点之间的逻辑关系。这里介绍3种常用的存储结构。
双亲表示法
- 定义:这种存储结构采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置。
- 特点:根结点下标为0,其伪指针域为-1。双亲表示法利用了每个结点(根结点除外)只有唯一双亲的性质,可以很快得到每个结点的双亲结点,但求结点的孩子时则需要遍历整个结构。
- 图示:如下图所示,展示了树的双亲表示法及其指针图示。
注意事项
- 顺序存储结构与链式存储结构:树的顺序存储结构中,数组下标代表结点的编号,下标中所存的内容指示了结点之间的关系。而在二叉树的顺序存储结构中,数组下标既代表了结点的编号,又指示了二叉树中各结点之间的关系。
- 存储结构选择:二叉树属于树,因此二叉树也可用树的存储结构来存储,但树却不都能用二叉树的存储结构来存储。
孩子表示法和孩子兄弟表示法
孩子表示法
- 定义:孩子表示法是将每个结点的孩子结点视为一个线性表,且以单链表作为存储结构,则 n n n 个结点就有 n n n 个孩子链表(叶结点的孩子链表为空表)。
- 特点: n n n 个头指针又组成一个线性表,为便于查找,可采用顺序存储结构。
- 图示:下图的是树的孩子表示法。
孩子兄弟表示法
- 定义:孩子兄弟表示法也称二叉树表示法,即以二叉链表作为树的存储结构。每个结点包括三部分内容:结点值、指向结点第一个孩子结点的指针,以及指向结点下一个兄弟结点的指针(沿此域可以找到结点的所有兄弟结点)。
- 图示:下图的是树的孩子兄弟表示法。
- 优点:孩子兄弟表示法比较灵活,其最大的优点是可以方便地实现树转换为二叉树的操作,易于查找结点的孩子等,但缺点是从当前结点查找其双亲结点比较麻烦。
存储结构选择
- 孩子表示法:寻找孩子的操作非常方便,而寻找双亲的操作则需要遍历 n n n 个结点中孩子链表指针域所指向的 n n n 个孩子链表。
- 孩子兄弟表示法:若为每个结点增设一个
parent
域指向其父结点,则查找结点的父结点也很方便。
树、森林与二叉树的转换
树转为二叉树
转换规则
树转换为二叉树的规则是:每个结点的左指针指向它的第一个孩子,右指针指向它在树中的相邻右兄弟,这个规则又称为“左孩子右兄弟”。由于根结点没有兄弟,因此转换得到的二叉树没有右子树。
转换方法
- 在兄弟结点之间加一连线:将树中每个结点的兄弟结点通过连线连接起来。
- 保留第一个孩子的连线:对每个结点,只保留它与第一个孩子的连线,而与其他孩子的连线全部抹掉。
- 旋转树结构:以树根为轴心,顺时针旋转45°。
转换性质
- 二叉树和树都可以用二叉链表作为存储结构。
- 从物理结构上看,树的孩子兄弟表示法与二叉树的二叉链表表示法是相同的,因此可以用同一存储结构的不同解释将一棵树转换为二叉树。
转换示例
下图展示了树与二叉树的对应关系,通过上述转换规则和方法,可以将树转换为二叉树。
森林转为二叉树
将森林转换为二叉树的规则与树类似。先将森林中的每棵树转换为二叉树,由于任意一棵树对应的二叉树的右子树必空,森林中各棵树的根也可视为兄弟关系,将第二棵树对应的二叉树当作第一棵二叉树根的右子树……以此类推,就可以将森林转换为二叉树。
转换方法
- 将森林中的每棵树转换成相应的二叉树。
- 每棵树的根也可视为兄弟关系,在每棵树的根之间加一根连线。
- 以第一棵树的根为轴心顺时针旋转45°。
二叉树转换为森林
二叉树转换为森林的规则:若二叉树非空,则二叉树的根及其左子树为第一棵树的二叉树形式,所以将根的右链断开。二叉树根的右子树又可视为一个由除第一棵树外的森林转换后的二叉树,应用同样的方法,直到最后只剩一棵没有右子树的二叉树为止,最后将每棵二叉树依次转换成树,就得到了原森林。
二叉树转换为树或森林是唯一的。
树和森林的遍历
树的遍历
遍历定义
树的遍历是指用某种方式访问树中的每个结点,且仅访问一次。主要有两种方式:
先根遍历
- 若树非空,先访问根结点。
- 再依次遍历根结点的每棵子树,遍历子树时仍遵循先根后子树的规则。
- 其遍历序列与这棵树相应二叉树的先序序列相同。
后根遍历
- 若树非空,先依次遍历根结点的每棵子树,遍历子树时仍遵循先子树后根的规则。
- 再访问根结点。
- 其遍历序列与这棵树相应二叉树的中序序列相同。
遍历序列
- 下图的树的先根遍历序列为 A B E F C D G ABEFCDG ABEFCDG,后根遍历序列为 E F B C G D A EFBCGDA EFBCGDA。
- 另外,树也有层次遍历,与二叉树的层次遍历思想基本相同,即按层序依次访问各结点。
森林的遍历
先序遍历森林
按照森林和树相互递归的定义,可得到森林的两种遍历方法。先序遍历森林的规则如下:
- 访问森林中第一棵树的根结点。
- 先序遍历第一棵树中根结点的子树森林。
- 先序遍历除去第一棵树之后剩余的树构成的森林。
中序遍历森林
中序遍历森林的规则如下:
- 中序遍历森林中第一棵树的根结点的子树森林。
- 访问第一棵树的根结点。
- 中序遍历除去第一棵树之后剩余的树构成的森林。
下图的森林的先序遍历序列为 A B C D E F G H I J ABCDEFGHIJ ABCDEFGHIJ,中序遍历序列为 B C D A F E H I G BCDAFEHIG BCDAFEHIG。
森林与二叉树遍历方法的对应关系
当森林转换成二叉树时,其第一棵树的子树森林转换成左子树,剩余树的森林转换成右子树,可知森林的先序和中序遍历即为其对应二叉树的先序和中序遍历。
下表树和森林的遍历与二叉树遍历的对应关系
树 | 森林 | 二叉树 |
---|---|---|
先根遍历 | 先序遍历 | 先序遍历 |
后根遍历 | 中序遍历 | 中序遍历 |
注意事项
部分教材也将森林的中序遍历称为后序遍历,称中序遍历是相对其二叉树而言的,称后序遍历是因为根确实是最后才访问的,若遇到这两种称谓,则可理解为同一种遍历方法。
四、参考资料
鲍鱼科技课件
b站免费王道课后题讲解:
网课全程班:
26王道考研书
相关文章:
26考研——树与二叉树_树、森林(5)
408答疑 文章目录 二、树、森林树的基本概念树的定义和特性树的定义树的特性 基本术语树的基本术语和概念祖先、子孙、双亲、孩子、兄弟和堂兄弟结点的层次、度、深度和高度树的度和高度分支结点和叶结点有序树和无序树路径和路径长度 森林的基本术语和概念森林的定义森林与树的…...
26考研——图_图的基本概念(6)
408答疑 文章目录 一、图的基本概念图的定义非空性非线性结构 顶点和边的表示顶点边 有向图 & 无向图有向图有向图 G 1 G_1 G1 的表示 无向图无向图 G 2 G_2 G2 的表示 简单图 & 多重图简单图多重图 顶点的度、入度和出度顶点的度有向图的度 路径、路径长度和回路…...
笔试面试01 c/c++
基础知识 什么是数据结构?请简要描述常见的数据结构类型。 数据结构是组织和存储数据的方式,以便于高效访问和修改。常见的数据结构包括: 数组:固定大小的线性数据结构,支持随机访问。 链表:由节点组成的线…...
2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip
一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…...
消息队列(Kafka及RocketMQ等对比联系)
目录 消息队列 一、为什么使用消息队列?消息队列有什么优点/缺点?介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍? 1.公司业务场景是什么,这个业务场景有什么挑战,如果不用MQ有什么麻…...
Go 语言 fmt 模块的完整方法详解及示例
以下是 Go 语言 fmt 模块的完整方法详解及示例,涵盖所有核心功能: 一、输出函数 将数据写入标准输出、文件或字符串。 1. Print / Println / Printf 功能 Print: 写入标准输出,不换行。Println: 写入标准输出并换行。Printf: 格式化写入标…...
Centos 7 安装VNC服务
Centos 7 安装VNC服务 1. 安装 TigerVNC2. 设置 VNC 密码3. 创建并配置 x0vncserver 服务4. 启用并启动服务5. 检查服务状态6. 配置防火墙7. 连接 VNC问题1:出现无法安装可能是镜像源导致的。手动配置镜像源清除 YUM 缓存并重新加载 1. 安装 TigerVNC 确保已安装 TigerVNC 服务…...
3.25-3 request断言
一.request断言 if断言 案例: import requests srequests.Session() url1"http://49.233.201.254:8080/cms/manage/loginJump.do" data1{userAccount:admin,loginPwd:123456} h1{"Content-Type":"application/x-www-form-urlencoded&…...
cmakelist中添加opencv
版本选择 qt的msvc,版本2019 opencv版本 4.5.3 配置了环境变量 x64下的v14中的bin 配置头文件 {"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}","d:\\QT\\6.5.3\\msvc20…...
【003安卓开发方案调研】之ReactNative技术开发安卓
基于2025年最新行业动态和搜索资料,以下是针对国内使用React Native(RN)开发安卓应用的深度分析: 一、技术成熟度评估 1. 核心架构升级 新架构全面普及:2024年起,React Native的 新架构(Fabri…...
面试中如何回答性能优化的问题
性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…...
使用cursor开发java案例——springboot整合elasticsearch
安装elasticsearch 打开cursor,输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip:192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 ࿰…...
CCF-CSP认证题目练习及其题解(4
【问题描述】 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。 【输入形式】 输入的第一行包含一个整数n&#x…...
Chrome 134 版本开发者工具(DevTools)更新内容
Chrome 134 版本开发者工具(DevTools)更新内容 一、隐私与安全面板 旧的 Security 面板已演变为隐私与安全面板,并新增了一个专注于隐私的部分。在该部分中,可以: 在 DevTools 打开时,临时限制第三方 Co…...
12届蓝桥杯—货物摆放
货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...
oracle查询归档日志使用量
1.统计最近30天的数据 SELECT TRUNC(first_time, DD) "日期", SUM(blocks * block_size) / 1024 / 1024 / 1024 "大小(GB)" FROM v$archived_log WHERE first_time > SYSDATE - 30 -- 统计最近30天的数据 GROUP BY TRUNC(first_time, DD) ORDER BY 1 D…...
Redis 发布订阅
Redis 发布订阅 概述 Redis 发布订阅(Pub/Sub)是一种消息传递模式,允许应用在多个客户端之间进行通信。在Redis中,发布订阅允许客户端订阅一个或多个频道,并在这些频道上发布消息。其他订阅了相同频道的客户端会接收到这些消息。 核心概念 频道(Channels) 频道是发…...
歌曲缓存相关功能
1. 核心组件 MusicCacheManager (音乐缓存管理器) 单例模式:确保全局只有一个实例,方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…...
MySQL学习之用户管理
MySQL学习之用户管理 一、用户1、用户信息2、创建用户3、修改用户密码4、删除用户 二、数据库权限1、MySQL中的权限2、给用户授权3、回收权限 一、用户 1、用户信息 MySQL用户管理: ①、与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。 ②、如…...
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程(持续更新)
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程-思路(持续更新) 写在前面: 1、A题、C题将会持续更新,陆续更新发布文章 2、赛题交流咨询Q群:1037590285 3、全家桶依旧包含: 代码、…...
算法训练营第二十三天 | 贪心算法(一)
文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策,从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…...
SpringCloud消息总线:Bus事件广播与配置动态刷新
文章目录 引言一、Spring Cloud Bus基本架构二、配置动态刷新实现2.1 基础配置2.2 刷新流程2.3 定向刷新 三、自定义事件广播3.1 定义自定义事件3.2 注册和监听事件3.3 发布事件 四、高级配置与优化4.1 消息持久化4.2 事件追踪4.3 安全控制 总结 引言 在微服务架构中ÿ…...
家庭网络结构之局域网通信
整个互联网非常复杂,涉及到很多知识,学习互联网不能一蹴而就,所以这里从最简单的家庭网络开始学习 家庭网络一般是通过Modem( 作用:进行数字信号和模拟信号的转换 ) 拨号上网,然后通过家庭路由器,将网络连接…...
突破反爬困境:SDK架构设计,为什么选择独立服务模式(四)
声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的,旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...
java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式
以下是 Java中设置操作系统编码、JVM平台编码和日志文件编码为UTF-8 的详细步骤和代码示例: 一、设置操作系统编码为UTF-8 1. Windows系统 修改系统区域设置: 进入 控制面板 → 时钟和区域 → 区域。在“管理”选项卡中,点击“更改系统区域…...
SpringBoot:几种常用的接口日期格式化方法
全局时间格式化 通过在配置文件中设置可以实现全局时间格式化。在 Spring Boot 的配置文件 application.properties(或 application.yml)中添加以下两行配置: #?格式化全局时间字段 spring.jackson.date-formatyyyy-MM-dd?HH:mm:ss #?指…...
解题思路:LeetCode 2711. 对角线上不同值的数量差
解题思路:LeetCode 2711. 对角线上不同值的数量差 在LeetCode的题目2711中,我们需要计算一个矩阵中每个单元格的左上角对角线和右下角对角线上不同值的数量差。这个问题可以通过暴力法解决,但效率较低。本文将介绍一种更高效的解决方案&…...
Jackson实现JSON数据的合并
JSON数据的操作,系列文章: 《Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode》 《Jackson的使用与创建Jackson工具类》 《Jackson使用ObjectNode对象实现JSON对象数据(一):增、删…...
Elasticsearch 倒排索引 和 正排索引
一、倒排索引 倒排索引是 Elasticsearch 实现高效全文搜索的核心技术。它通过将词项与文档 ID 关联,支持快速检索、短语查询、布尔查询和相关性评分。尽管倒排索引在存储和更新方面有一定的开销,但通过词典优化、倒排列表压缩、分片和缓存等技术&#x…...
Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建
引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…...
【Python】pillow库学习笔记1-Image类
《Python语言程序设计基础 》第3版,嵩天 黄天羽 杨雅婷著,P293 1.pillow库概述 Pillow 库是Python图像处理重要的第三方库。 Pillow库是PIL (Python image library) 库的一个扩展,需要通过pip工具安装。安装PIL库需要注意,安装…...
解决 MySQL 的 sql_mode 中包含 only_full_group_by模式导致group by SQL报错
sql 报错: Cause: java.sql.SQLSyntaxErrorException: Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ev_data_transmission.p.push_type which is not functionally dependent on columns in GROUP BY clause; this…...
【微服务架构】本地负载均衡的实现(基于随机算法)
前言 负载均衡 概念:一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术,旨在提高系统的可用性、性能和可伸缩性。作用: 提高性能:通过将请求分散到多个实例上,避免单个实例因请求过多而过载ÿ…...
记一次线上SQL死锁事故
一、 引言 SQL死锁是一个常见且复杂的并发控制问题。当多个事务在数据库中互相等待对方释放锁时,就会形成死锁,从而导致事务无法继续执行,影响系统的性能和可用性。死锁不仅会导致数据库操作的阻塞,增加延迟,还可能对…...
电机控制常见面试问题(十八)
文章目录 一.电机控制高级拓扑结构1.LLC 二.谈谈电压器饱和后果三.电压器绕组连接方式的影响四.有源逆变的条件 一.电机控制高级拓扑结构 1.LLC LLC是什么?—— 一个会"变魔术"的电源盒子 想象你有一个魔法盒子,能把电池的电压变大或变小&…...
数据结构之双链表
目录 1 简介 2 双链表的基本概念 2.1 节点结构 2.2 头插法和尾插法 3 代码实现 4 代码解析(部分) 4.1 初始化双链表 4.2 添加节点 4.3 删除节点 4.4 获取节点 4.5 插入节点 4.6 反转链表 4.7 打印链表 4.8 核心操作分析 5 总结 1 简介 …...
dell 台式机 电脑 纽扣电池 如何取下?
dell 台式机 电脑 纽扣电池 如何取下? 戴尔-optiplex-3060-塔式机-服务手册...
JSON二次序列化问题分析
正常的JSON应该是: json Apply to VectorServic... { "id": "d471c19c-70eb-4f29-8604-b8284e8a9400", "text": "人为干预, 降低生产成本...", "metadata": { "chunkIndex": 2, …...
WebSocket 传输大量数据好不好?稳定不稳定
使用 WebSocket 传输大量数据 是可行的,但在实际应用中需要注意一些限制和优化策略。以下是关于 WebSocket 传输大量数据的详细分析: 1. WebSocket 传输大量数据的可行性 优点 实时性:WebSocket 是全双工通信协议,适合实时传输数…...
代码随想录刷题day52|(二叉树篇)106.从中序与后序遍历序列构造二叉树(▲
目录 一、二叉树理论知识 二、构造二叉树思路 2.1 构造二叉树流程(给定中序后序 2.2 整体步骤 2.3 递归思路 2.4 给定前序和后序 三、相关算法题目 四、易错点 一、二叉树理论知识 详见:代码随想录刷题day34|(二叉树篇)二…...
无人设备遥控器之调度自动化技术篇
一、技术原理 信息采集与处理: 通过传感器、仪表等设备采集无人设备的各种数据,如位置、速度、状态等。 将采集到的数据传输到调度自动化系统中进行处理和分析,以获取设备的实时状态。 系统建模与优化: 调度自动化系统会根据…...
红宝书第十五讲:详解JavaScript迭代器与生成器:Symbol.iterator与yield
红宝书第十五讲:详解JavaScript迭代器与生成器:Symbol.iterator与yield 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、迭代器(Iterator)的“传送带”模式 迭代…...
【AI】NLP
不定期更新,建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…...
ENSP学习day10
NAT地址转换技术(一) NAT(Network Address Translation)地址转换技术是一种在计算机网络中常用的技术,在数据包从一个网络传输到另一个网络时,会对数据包中的源IP地址和目的IP地址进行修改的过程。这种技术…...
文件上传绕过的小点总结(4)
9.末尾点删除处理缺陷 给出源码: $file_name trim($_FILES[upload_file][name]); $file_name deldot($file_name);//删除文件名末尾的点 $file_ext strrchr($file_name, .); $file_ext strtolower($file_ext); //转换为小写 $file_ext str_ireplace(::$DATA,…...
实战-MySQL5.7升级8.0遇到的四个问题
近期几个项目的MySQL由5.7升级到8.0,升级过程中遇到四个问题,记录下来分享一下: 第一个问题详见之前的文章: MySQL 5.7升级8.0报异常:处理新增关键字 第二个问题详见之前的文章: MySQL 5.7升级8.0报异常…...
卷积神经网络的原理、实现及变体
卷积神经网络convolutional neural network,CNN 是为处理图像数据而生的网络,主要由卷积层(填充和步幅)、池化层(汇聚层)、全连接层组成。 卷积 虽然卷积层得名于卷积(convolution)…...
java 线程创建Executors 和 ThreadPoolExecutor 和 CompletableFuture 三者 区别
Executors是一个线程池的工具类,而ThreadPoolExecutor是Executor接口的一个实现,是线程池的核心类。 Executors提供了多种快速创建线程池的方法,而ThreadPoolExecutor则提供了更高的自定义和控制能力。 Executors是一个工具类࿰…...
Redisson 实现分布式锁简单解析
目录 Redisson 实现分布式锁业务方法:加锁逻辑LockUtil 工具类锁余额方法:工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法: 如图,简单…...
Python条件处理,新手入门到精通
Python条件处理,新手入门到精通 对话实录 **小白**:(崩溃)我写了if x 1:,为什么Python会报错? **专家**:(推眼镜)**是赋值,才是比较**!想判断相…...