数据结构 RBT 插入操作的 Python 代码实现
目录
- 一、红黑树的性质
- 二、红黑树的插入
- 1. 插入根节点或根节点变红
- 2. 双亲节点 P 为黑色
- 3. 双亲结点 P 和叔伯结点 U 均为红色
- 4. 双亲结点 P 为红色,叔伯结点 U 为黑色或缺失
- 1)情形一
- 2)情形二
- 三、插入的 Python 代码实现
红黑树动画演示网站:【Red/Black Tree】
一、红黑树的性质
虽然红黑树(RBT)的结构复杂,但它的各项操作在最坏情况下的运行时间都比较低,并且在实践中高效:它可以在 O(log2n) 的时间内完成查找,插入和删除,这里的 n 指的是树中元素的数目。
RBT 与 AVL 树的时间复杂度是一样的,但其优势在于当插入或者删除节点时,RBT 实际的调整次数更少,且旋转次数更少(牺牲了部分平衡性),所以 RBT 插入和删除的效率要高于 AVL 树,因此其在实际的应用中也更加广泛。
恢复红黑树的性质需要少量(O(log2n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次)。
RBT 是每个节点都带有颜色属性(红色或黑色)的二叉查找树,对于任何有效的 RBT 有以下要求:
-
节点是红色或黑色
-
【根叶黑】根是黑色,且所有叶子都是黑色(叶子是 NULL 节点)
-
【不红红】每个红色节点必须有两个黑色的子节点(从每个叶子到根的所有路径上不能有两个连续的红色节点)
-
【黑路同】从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点
这些约束确保了红黑树的关键特性:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。这导致 RBT 大致上是平衡的,因为插入、删除和查找某个值的最坏情况时间都与树的高度成比例,这使得红黑树在最坏情况下的操作时间都是高效的,不同于普通的二叉查找树。
二、红黑树的插入
增加节点时首先初始标记它为红色(任何新增节点都初始标记为红色放入),然后按照二叉查找树的规则进行插入操作,本文将要插入的节点标为 N ,N 的双亲节点标为 P ,N 的祖辈节点标为 G ,N 的叔伯节点标为 U 。针对红黑树的插入,分为以下五种情形:
1. 插入根节点或根节点变红
如果有以下情况:
-
新节点 N 是根节点,即 N 没有双亲节点。
-
经过调整后,红黑树的根节点 root 变为红色。
【方案】:为了满足 “根叶黑” 的性质,需要将根节点重新标记为黑色,这样每条路径上的黑色节点数目都加一,也满足 “黑路同” 性质。
2. 双亲节点 P 为黑色
如果被插入的新节点的双亲节点 P 是黑色:
-
“不红红” 性质成立(新节点是红色的)。
-
“黑路同” 性质成立,尽管新插入的节点 N 有两个黑色的子节点(叶节点,为 NULL),但由于取代之前的黑色叶节点的新节点 N 是红色,所以依然满足这个性质。
【方案】:在这种情形下,RBT 仍是有效的,直接插入新节点,不需要做出任何改变。
3. 双亲结点 P 和叔伯结点 U 均为红色
如果双亲节点 P 和叔伯节点 U 二者都为红色:将 P 节点和 U 节点重新标记为黑色,并将祖辈节点 G 重新标记为红色。
-
根据 “不红红” 性质,祖辈节点 G 在开始时必为黑色,通过 P 、U 变黑 G 变红操作,满足 “黑路同” 性质。
-
现在被插入的红色新节点 N 的双亲节点 P 为黑色,祖辈节点 G 为红色。
-
但是红色的 G 节点可能是根节点,这就违反了 “根叶黑” 性质。
-
同时 G 节点的双亲节点也可能是红色,这就违反了 “不红红” 性质。
-
-
为了解决上述问题,我们需要将祖辈节点 G 当作新加入的节点进行各种情形的检查。
-
如果 G 是根节点,那么直接将 G 变为黑色即可。
-
如果 G 不是根节点,且 G 节点的双亲节点是红色时,我们就需要把 G 看作一个新插入的子节点,观察 G 的双亲、叔伯和祖辈的颜色与位置,判断是哪种情况后做出相应的调整即可。
-
4. 双亲结点 P 为红色,叔伯结点 U 为黑色或缺失
如果双亲节点 P 是红色,而叔伯节点 U 是黑色或缺失。
1)情形一
新节点 N 是其双亲节点 P 的右子节点,而双亲节点 P 又是祖辈节点 G 的左子节点。
在这种情形下,我们需要对双亲节点 P 进行一次左旋操作,调换新节点 N 和其双亲节点 P ,接着,我们按下面的情形二处理以前的双亲节点 P 以解决失效的 “不红红” 性质。
由于没有增加黑色节点的数目,所以 “黑路同” 性质仍有效。
2)情形二
新节点 N 是其双亲节点的左子节点,而双亲节点 P 又是祖辈节点 G 的左子节点。
在这种情形下,我们需要对祖辈节点 G 进行一次右旋操作,在旋转后的树中,以前的双亲节点 P 现在是新节点 N 和以前的祖辈节点 G 的双亲节点。
根据 “不红红” 性质,以前的祖辈节点 G 必然是黑色,右旋结束后,我们将以前的双亲节点 P 和祖辈节点 G 的颜色互换,最终得到的树满足 “不红红” 以及 “黑路同” 性质。
左旋操作和右旋操作如下图所示:
三、插入的 Python 代码实现
RED = 0
BLACK = 1class RedBlackNode: # 红黑树节点def __init__(self, value):self.value = valueself.color = REDself.left = Noneself.right = Noneself.parent = Noneclass RedBlackTree: # 红黑树def __init__(self):self.root = Nonedef left_rotate(self, P: RedBlackNode): # 左旋N: RedBlackNode = P.rightG: RedBlackNode = P.parentif G is None: # 如果P是根节点self.root = Nelif G.left == P: # 如果P是左孩子G.left = Nelse: # 如果P是右孩子G.right = NN.parent = Gif N.left is not None: # 如果N有左孩子N.left.parent = PP.right = N.leftN.left = PP.parent = Ndef right_rotate(self, P: RedBlackNode): # 右旋N: RedBlackNode = P.leftG: RedBlackNode = P.parentif G is None: # 如果P是根节点self.root = Nelif G.left == P: # 如果P是左孩子G.left = Nelse: # 如果x是右孩子G.right = Nif N.right is not None: # 如果N有右孩子N.right.parent = PP.left = N.rightN.right = PP.parent = Ndef insert(self, rb_node): # 插入if self.root is None: # 如果根节点为空self.root = rb_noderb_node.color = BLACKelse: # 如果根节点不为空n: RedBlackNode = self.rootwhile n is not None: # 找到插入位置p: RedBlackNode = nif rb_node.value < n.value: # 插入值小于n的值n = n.leftelse: # 插入值大于n的值(不考虑插入值等于n的值的情况)n = n.rightrb_node.parent = pif rb_node.value < p.value:p.left = rb_nodeelse:p.right = rb_nodeself.insert_fixup(rb_node)def insert_fixup(self, rb_node): # 插入修正p_node: RedBlackNode = rb_node.parentwhile p_node and p_node.color == RED: # 如果父节点存在且为红色,此时必有黑色爷节点g_node: RedBlackNode = p_node.parentif g_node.left is p_node: # 如果父节点是爷节点的左孩子u_node: RedBlackNode = g_node.right # 叔节点if u_node and u_node.color == RED: # 如果叔节点存在且为红色p_node.color = BLACKu_node.color = BLACKg_node.color = RED # 爷变红,父叔变黑rb_node = g_node # 以爷节点开始继续向上修正p_node = rb_node.parentcontinueif p_node.right is rb_node: # 如果插入节点是父节点的右孩子self.left_rotate(p_node) # 左旋self.right_rotate(g_node) # 右旋g_node.color = REDp_node.color = BLACKelse: # 如果父节点是爷节点的右孩子u_node: RedBlackNode = g_node.left # 叔节点if u_node and u_node.color == RED: # 如果叔节点存在且为红色p_node.color = BLACKu_node.color = BLACKg_node.color = RED # 爷变红,父叔变黑rb_node = g_node # 以爷节点开始继续向上修正p_node = rb_node.parentcontinueif p_node.left is rb_node: # 如果插入节点是父节点的左孩子self.right_rotate(p_node) # 右旋self.left_rotate(g_node) # 左旋g_node.color = REDp_node.color = BLACKself.root.color = BLACKdef mid_order(self, rb_node: RedBlackNode): # 中序遍历if rb_node is None:returnelse:self.mid_order(rb_node.left)print(rb_node.value, rb_node.color, end=' ')self.mid_order(rb_node.right)def pre_order(self, rb_node: RedBlackNode): # 先序遍历if rb_node:print(rb_node.value, rb_node.color, end=' ')self.preorder_tree_walk(rb_node.left)self.preorder_tree_walk(rb_node.right)else:returndef rb_tree_print(self, rb_node, direction):# 节点的值(颜色) is 父节点的值's left/right childif rb_node:if direction == 0: # 根节点print("%2d(B) is root" % rb_node.value)else: # 分支节点print("%2d(%s) is %2d's %6s child" % (rb_node.value, ("B" if rb_node.color == 1 else "R"), rb_node.parent.value,("right" if direction == 1 else "left")))self.rb_tree_print(rb_node.left, -1)self.rb_tree_print(rb_node.right, 1)else:returnif __name__ == '__main__':number_list = (7, 4, 1, 8, 5, 2, 9, 6, 3)rb_tree = RedBlackTree()for number in number_list:node = RedBlackNode(number)rb_tree.insert(node)del noderb_tree.rb_tree_print(rb_tree.root, 0) # 验证红黑树是否构造成功
相关文章:
数据结构 RBT 插入操作的 Python 代码实现
目录 一、红黑树的性质二、红黑树的插入1. 插入根节点或根节点变红2. 双亲节点 P 为黑色3. 双亲结点 P 和叔伯结点 U 均为红色4. 双亲结点 P 为红色,叔伯结点 U 为黑色或缺失1)情形一2)情形二 三、插入的 Python 代码实现 红黑树动画演示网站…...
颖儿生活提案:用海信璀璨505U6真空冰箱重建都市鲜食自由
热播剧《六姊妹》中,演员颖儿饰演的何家艺以泼辣坚韧的形象深入人心,一双手撑起家庭的"烟火气";戏外,她平衡事业与家庭,以自律姿态书写鲜活人生。 近日,颖儿向公众展示家中厨房,意外…...
JQuery 使用技巧
文章目录 隐藏/显示淡入淡出滑动追加新元素删除元素/内容设置 CSS 样式尺寸遍历Ajax根据 input 控件中的值 实时改变另一个值 $()是jQuery()的简写getElementByTagName();如: $(“div”)getElementByTagName(“div”); $()的作用是用于查找出 HTML 的标签、属性、样…...
光流法:从传统方法到深度学习方法
1 光流法简介 光流(Optical Flow)是指图像中像素灰度值随时间的变化而产生的运动场。 简单来说,它描述了图像中每个像素点的运动速度和方向。 光流法是一种通过分析图像序列中像素灰度值来计算光流的方法。对于图像数据计算出来的光流是一个二…...
如何选择合适的RFID手持终端设备?
一、明确核心需求,锁定关键参数 选购RFID手持终端的首要任务是明确应用场景的核心需求。若用于仓储物流或零售盘点,推荐选择上海岳冉超高频RFID手持终端设备,支持1-20米远距离批量读取;若用于医疗耗材或图书管理,岳冉高…...
Axios 传参与 Spring Boot 接收参数完全指南
Axios 传参与 Spring Boot 接收参数完全指南 本文详细说明前端 Axios 传参与后端 Spring Boot 接收参数的各类场景,包括 GET/POST/PUT/DELETE 请求、路径参数/查询参数/请求体参数 的传递方式,以及如何接收 List、Map 等复杂类型。通过代码示例和对比表…...
NdrpPointerUnmarshallInternal函数分析之pStubMsg--pAllocAllNodesContext的由来
第一部分: // // Check if this is an allocate all nodes pointer AND that were // not already in an allocate all nodes context. // if ( ALLOCATE_ALL_NODES(pFormat[1]) && ! pStubMsg->pAllocAllNodesContext …...
人脑、深思考大模型与其他大模型的区别科普
文章目录 大模型的基本概念与特点深思考大模型的独特之处深思考大模型与其他大模型的对比架构与技术训练数据应用场景提示词编写 大模型给出答案的方式:基于概率还是真的会分析问题?人脑的思考过程基本单位与网络大脑结构与功能分区信息处理流程思维模式…...
Unity-粒子系统:萤火虫粒子特效效果及参数
萤火虫特效由两部分组成。萤火虫粒子底色粒子面片。萤火虫的旋转飞动主要由 Noise参数和Color over Lifetime模块控制。 贴图:中间实周边虚的圆,可随意自行制作 Shader:Universal Render Pipeline/2D/Sprite-Lit-Default 以下是粒子详细参…...
Java垃圾收集器与内存分配策略深度解析
在 Java 与 C 的世界里,内存动态分配与垃圾收集技术仿佛筑起了一道高墙。墙外的人渴望进入,享受自动内存管理的便利;而墙内的人却试图突破,追求更高的性能与控制力。今天,就让我们深入探讨 Java 的垃圾收集器与内存分配…...
优化MySQL性能:主从复制与读写分离实践指南
目录 一、知识介绍 1.MySQL主从复制原理 2.MySQL读写分离原理 二、资源清单 三、案例实施 1.修改主机名 2.搭建MySQL主从复制 3.搭建MySQL读写分离 一、知识介绍 1.MySQL主从复制原理 MySQL支持的复制类型 基于语句的复制基于行的复制混合模型复制 工作过程 主&#…...
Foupk3systemX5OS系统产品设备
Foupk3systemX5OS TXW8(基于Foupk3systemX5OS系统19.62正式版开发的智能移动设备由Foupk3systemX5OS系统与FOUPK3云服务平台共同自主研发) Foupk3systemX5OS TX6(Foupk3systemX5OS TX6基于Foupk3systemX5OS系统19.60正式版开发的智能平板设备…...
【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
一、跨域(CORS)是什么? 跨域,指的是浏览器出于安全限制,前端页面在访问不同源(协议、域名、端口任一不同)的后端接口时,会被浏览器拦截。 比如: 前端地址后端接口地址是…...
关于 【Spring Boot Configuration Annotation Processor 未配置问题】 的详细分析、解决方案及代码示例
以下是关于 Spring Boot Configuration Annotation Processor 未配置问题 的详细分析、解决方案及代码示例: 1. 问题描述 当使用 Spring Boot 的配置注解(如 ConfigurationProperties、Value、ConditionalOnProperty 等)时,若未…...
MySQL 的ANALYZE与 OPTIMIZE命令
MySQL 的ANALYZE与 OPTIMIZE命令 一、ANALYZE TABLE - 更新统计信息 1. 基本语法与功能 ANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [, tbl_name] ...作用:收集表统计信息用于优化器生成更优的执行计划,主要更新: 索引基数&am…...
【机器学习】人工智能在电力电子领域的应用
摘要: 本文概述了电力电子系统的人工智能 (AI) 应用。设计、控制和维护这三个独特的生命周期阶段与人工智能要解决的一项或多项任务相关,包括优化、分类、回归和数据结构探索。讨论了专家系统、模糊逻辑、元启发法和机器学习四类人工智能的应用。我们对…...
InferType和_checked_type的区别?
在 TVM 的 Relay IR 中,relay.frontend.common.infer_shape(node) 和 node.checked_type.shape 都与**形状(Shape)**信息相关,但它们的用途、实现机制和性能特点有显著区别。以下是详细对比: 1. 功能区别 特性node.ch…...
Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理
Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理 目录 Flutter 学习之旅 之 flutter 作为 module ,在 Android 端主动唤起 Flutter 开发的界面 简单的整理 一、简单介绍 二、Android 端唤起 Flutter …...
vue3 css模拟语音通话不同语音、正在加载等的效果
实现效果如下: 在不同的时间,显示不一样的效果(大小是一样的,截图时尺寸发生了变化) 具体实现代码如下: <script setup> import {ref} from "vue";const max_hight ref(40px) const min…...
【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第1篇,对应原…...
[Agent]AI Agent入门02——ReAct 基本理论与实战
ReAct介绍 ReAct(Reasoning and Acting)是一种通过协同推理(Reasoning)与行动(Acting)提升大语言模型(LLM)任务解决能力的技术。其核心思想是在解决复杂问题时交替生成推理和动作&a…...
uniapp自定义头部(兼容微信小程序(胶囊和状态栏),兼容h5)
很早之前就写过自定义头部,但是那时偷懒写死了,现在用插槽重新写了个 有两种形式: type1是完全自定义的,可以自己去组件改也可以用插槽改 type2是正常的返回标题和右边按钮,使用就是 title"标题" rightClic…...
mybatis的xml ${item}总是更新失败
场景 代码如下 void updateStatus(Param("deviceSerialIdCollection") Collection<String> deviceSerialIdCollection, Param("status") Integer status);<update id"updateStatus">UPDATE gb_monitor SET online#{status} WHERE d…...
数据库- JDBC
标题目录 JDBC基本概念JDBC 接口JDBC 工作原理 JDBC APIJDBC工作过程Driver 接口及驱动加载Connection 接口Statemen 接口ResultSet 接口PreparedStatement 接口 JDBC 基本概念 Java Database Connectivity:java访问数据库的解决方案希望用相同的方式访问不同的数…...
[26] cuda 应用之 nppi 实现图像格式转换
[26] cuda 应用之 nppi 实现图像格式转换 讲述 nppi 接口定义通过nppi实现 bayer 格式转rgb格式官网参考信息:http://gwmodel.whu.edu.cn/docs/CUDA/npp/group__image__color__debayer.html#details1. 接口定义 官网关于转换的原理是这么写的: Grayscale Color Filter Array …...
MYSQL-OCP官方课程学习截图
第一节 介绍...
医院信息管理系统全解析
目录 一、医院信息管理系统是什么 1. 概念阐释 2. 核心功能概述 二、医院信息管理系统的种类 1. 医院信息系统(HIS) 2. 电子病历系统(EMR) 3. 实验室信息管理系统(LIS) 三、医院信息管理系统的实际…...
模型上下文协议(MCP):技术解析与生态发展
一、概念与目标 模型上下文协议(Model Context Protocol,MCP)是由Anthropic于2024年11月推出的开源协议,旨在为大语言模型(LLM)与外部工具、数据源提供标准化的双向通信框架。其核心目标是打破数据孤岛&am…...
laravel中layui的table翻页不起作用问题的解决
本地测试是好的,部署的时候就发现,翻页不起作用了。但lay_num序号是可以变化的,查看api接口传递的数据,发现数据没有变化,加上page2等翻页,也是不起作用,看来是url参数返回给后台,后…...
python上测试neo4j库
安装完了neo4j库后,如何使用。用python来小试牛刀 1.从其他博客上找来demo #coding:utf-8 from py2neo import Graph,Node,Relationship##连接neo4j数据库,输入地址、用户名、密码 graph Graph(bolt://xx.xx.xx.xx:7687,userneo4j,passwordneo4j1234)…...
云原生周刊:Kubernetes v1.33 正式发布
开源项目推荐 Robusta Robusta 是一个开源的 K8s 可观测性与自动化平台,旨在增强 Prometheus 告警的智能化处理能力。它通过规则和 AI 技术对告警进行丰富化处理,自动附加相关的 Pod 日志、图表和可能的修复建议,支持智能分组、自动修复和高…...
网络安全入门综述
引言 在数字化时代,网络安全(Cybersecurity)已成为保护个人、企业和政府机构免受数字威胁的关键领域。随着互联网的普及、云计算的兴起以及物联网(IoT)设备的激增,网络攻击的频率和复杂性不断增加。从数据…...
LLaMA-Factory部署以及大模型的训练(细节+新手向)
LLaMA-Factory 经过一段时间的探索,从手动编写训练代码到寻求框架辅助训练,遇到了各种各样的问题。前面我介绍了dify的部署,但是并没有详细介绍使用方式,是因为我在尝试利用dify的时候碰到了很多困难,总结下来首先就是…...
ASP.NET MVC 入门指南四
21. 高级路由配置 21.1 自定义路由约束 除了使用默认的路由约束,你还可以创建自定义路由约束。自定义路由约束允许你根据特定的业务逻辑来决定一个路由是否匹配。例如,创建一个只允许特定年份的路由约束: csharp public class YearRouteCo…...
rabbitmq-集群部署
场景:单个pod,部署在主节点,基础版没有插件,进阶版多了一个插件 基础版本: --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…...
明远智睿SSD2351开发板:开启工业控制新征程
在工业控制领域,对开发板的性能、稳定性和扩展性有着极高的要求。明远智睿的SSD2351开发板凭借其卓越的特性,为工业控制带来了全新的解决方案。 SSD2351开发板搭载四核1.4GHz处理器,强大的运算能力使其在处理工业控制中的复杂任务时游刃有余。…...
RISCV学习(5)GD32VF103 MCU架构了解
RISCV学习(5)GD32VF103 MCU架构了解 1、芯片内核功能简介 GD32VF103 MCU架构,采用Bumblebee内核,芯来科技(Nuclei System Technology)与台湾晶心科技(Andes Technology)联合开发&am…...
IDEA2022.3开启热部署
1、开启IDEA的自动编译 1.1 具体步骤:打开顶部工具栏 File -> Settings -> Build,Execution,Deployment -> Compiler 然后勾选 Build project automatically 。 1.2 打开顶部工具栏 File -> Settings -> Advanced Settings -> Compiler -> 然…...
《算法吞噬幻想乡:GPT-4o引发的艺术平权运动与版权核爆》
一、引言:现象级AI艺术事件的社会回响 GPT - 4o吉卜力风格刷屏现象 在当今数字化浪潮中,GPT - 4o吉卜力风格的作品在网络上掀起了一阵刷屏热潮。吉卜力工作室以其独特的水彩质感、奇幻氛围和孤独美学,在全球范围内拥有大量粉丝。而GPT - 4o强…...
yolov5 源码 +jupyter notebook 笔记 kaggle
YOLOv5 | Kaggle 直接用的githuab的源码,git clone 后output才有文件 直接gitclone他的源码用Vscode看 好久没见过16g了 怎么这么便宜 https://gadgetversus.com/graphics-card/nvidia-tesla-p100-pcie-16gb-vs-nvidia-geforce-rtx-4060/#google_vignette 好的&am…...
聊天室系统:多任务版TCP服务端程序开发详细代码解释
1. 需求 目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢? 完成多任务,可以使用线程,比进程更加节省内存资源。 2. 具体实现步骤 编写一个TCP服务端程序,循环等…...
Python(15)迭代器和生成器
在 Python 编程领域中,迭代器和生成器是两个强大且独特的概念,它们为处理数据序列提供了高效且灵活的方式。这篇博客将结合菜鸟教程内容,通过丰富的代码示例,深入学习 Python3 中的迭代器与生成器知识,方便日后复习回顾…...
无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
一、无刷空心杯电机结构与技术解析 1. 核心结构设计 无刷空心杯电机的核心设计突破在于无铁芯转子与电子换向系统的结合。其结构由以下关键部分构成: 定子组件:采用印刷电路板(PCB)或柔性电路板(FPC)作为绕组载体,通过三维绕线技术形成空心杯状绕组,彻底消除齿槽效应…...
如何修复卡在恢复模式下的 iPhone:简短指南
Apple 建议使用恢复模式作为最后的手段,以便在 iPhone 启动循环或显示 Apple 标志时恢复 iPhone。这是解决持续问题的简单方法,但您很少使用。但是,当您的 iPhone 卡住恢复模式本身时,您会怎么做?虽然 iPhone 卡在这种…...
蒋新松:中国机器人之父
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 蒋新松:中国机器人之父 一、生平简介 1. 早年经历与求学道路 蒋新松出生…...
[Windows] MousePlus 5.5.9
[Windows] MousePlus 链接:https://pan.xunlei.com/s/VOOwKJ281kDaZV5_MpP1COd_A1?pwdn69c# MousePlus是一款轻便小巧的鼠标右键增强工具,使用鼠标右键拖动即可唤醒鼠标轮盘,这个功能界面和quicker的轮盘软件界面一样,操作逻辑…...
BT131-ASEMI无人机专用功率器件BT131
编辑:ll BT131-ASEMI无人机专用功率器件BT131 型号:BT131 品牌:ASEMI 封装:TO-92 批号:最新 引脚数量:3 特性:双向可控硅 工作温度:-40℃~150℃ 在智能化浪潮中,…...
ETL架构、数据建模及性能优化实践
ETL(Extract, Transform, Load)和数据建模是构建高性能数据仓库的核心环节。下面从架构设计、详细设计、数据建模方法和最佳实践等方面系统阐述如何优化性能。 一、ETL架构设计优化 1. 分层架构设计 核心分层: 数据源层:对接O…...
30分钟上架鸿蒙原生应用,即时通信IM UI组件库全面适配HarmonyOS 原
自去年 10 月 8 日鸿蒙5开启公测以来,鸿蒙操作系统不断迭代,生态趋向稳健。当前,支持HarmonyOS操作系统的设备数量已超过 10 亿,上架HarmonyOS 5 应用市场的鸿蒙原生应用和元服务已超过2万个。这无疑为广大开发者提供了丰富的应用…...
【虚幻5蓝图Editor Utility Widget:创建高效模型材质自动匹配和资产管理工具,从3DMax到Unreal和Unity引擎_系列第二篇】
虚幻5蓝图Editor Utility Widget 一、基础框架搭建背景:1. 创建Editor Utility Widget2.根控件选择窗口3.界面功能定位与阶段4.查看继承树5.目标效果 二、模块化设计流程1.材质替换核心流程:2.完整代码如下 三、可视化界面UI布局1. 添加标题栏2. 构建滚动…...