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

数据结构--AVL树

一、二叉搜索树(Binary Search Tree, BST)

基本性质

  1. 对于树中的每个节点,其左子树中的所有节点值均小于该节点值。
  2. 其右子树中的所有节点值均大于该节点值。
  3. 左右子树也分别是二叉搜索树。

极端场景

在极端情况下,如插入节点顺序为升序或降序时,二叉搜索树会退化为链表结构。例如,依次插入 1, 2, 3, 4, 5,此时树的形状为一条从根节点开始不断向右延伸的链。这种退化导致树的高度变为 O (n)(n 为节点数),原本二叉搜索树查找、插入、删除操作平均时间复杂度为 O (log n),此时会退化为 O (n),效率大幅降低。

二、AVL 树(Adelson-Velsky and Landis Tree)

定义与特点

AVL 树是一种自平衡的二叉搜索树。它在向二叉搜索树中插入新节点时,通过特定的旋转操作,保证每个节点的左右子树高度之差的绝对值不超过 1。这使得 AVL 树在动态插入和删除节点过程中,始终保持较为平衡的状态,从而保证基本操作的时间复杂度稳定在 O (log n)。

平衡因子(Balance Factor)

  1. 定义:平衡因子 = 右子树高度 - 左子树高度。
  2. AVL 树的平衡条件:对于 AVL 树中的每一个节点,其平衡因子的绝对值不超过 1。即,| 右子树高度 - 左子树高度 | ≤ 1。当插入或删除节点导致某个节点的平衡因子绝对值大于 1 时,AVL 树会进行相应的旋转操作(左单旋、右单旋、双旋(先左旋后右旋和先右旋后左旋))来重新平衡树结构,确保树始终满足 AVL 树的性质。

 三、AVL 树 的实现

设计结构

1.节点结构

template<class K, class V>
class AVLTreeNode {
public:pair<K, V> _kv;              // 键值对AVLTreeNode<K, V>* _left;     // 左子节点AVLTreeNode<K, V>* _right;    // 右子节点AVLTreeNode<K, V>* _parent;   // 父节点(关键,用于回溯调整平衡)int _bf;                      // 平衡因子(右子树高度 - 左子树高度)AVLTreeNode(const pair<K,V>& kv):_kv(kv),_left(nullptr),_right(nullptr),_parent(nullptr),_bf(0){}
};

2.树结构

template<class K, class V>
class AVLTree {typedef AVLTreeNode<K, V> Node;
public://增删改查操作//......
private:Node* _root = nullptr;  // 根节点
};

操作函数

插入

1.查找插入位置

  • 若树为空,直接创建根节点。
  • 否则,从根节点开始遍历查找:

    bool insert(const pair<K, V>& kv) {if (_root == nullptr) {      // 空树直接插入_root = new Node(kv);return true;}Node* cur = _root, *parent = nullptr;while (cur) {                // 向下搜索插入位置parent = cur;if (kv.first < cur->_kv.first) cur = cur->_left;else if (kv.first > cur->_kv.first) cur = cur->_right;else return false;       // 重复键不允许插入}

2.插入新节点

  • 创建新节点 cur,根据键值大小链接到父节点的左或右。

        cur = new Node(kv);cur->_parent = parent;       // 绑定父节点if (kv.first < parent->_kv.first) parent->_left = cur;     // 插入到左子树else parent->_right = cur;    // 插入到右子树
  • 设置 cur->_parent = parent(关键,后续调整依赖父指针)。

3.更新平衡因子

  • 从插入点的父节点向上回溯,调整每个祖先节点的平衡因子:

    • 插入在左子树:parent->_bf--

    • 插入在右子树:parent->_bf++

  • 根据平衡因子决定是否继续调整或旋转:

    • _bf == 0:停止调整(子树高度未变)。

    • |_bf| == 1:继续向上调整。

    • |_bf| == 2:触发旋转(需判断旋转类型)。

    while (parent) {             // 从父节点向上回溯调整if (cur == parent->_left) parent->_bf--;else parent->_bf++;if (parent->_bf == 0) break;     // 高度不变,无需调整else if (abs(parent->_bf) == 1) { // 高度变化,继续向上cur = parent;parent = parent->_parent;}else if (abs(parent->_bf) == 2) { // 需要旋转if (parent->_bf == 2 && cur->_bf == 1) rotateL(parent);        // 左单旋else if (parent->_bf == -2 && cur->_bf == -1) rotateR(parent);        // 右单旋else if (parent->_bf == 2 && cur->_bf == -1) rotateRL(parent);       //右-左旋else if (parent->_bf == -2 && cur->_bf == 1) rotateLR(parent);       //左-右旋break;}}return true;
}

左单旋(rotateL

  • 确定关键节点

    • parent:失衡节点(_bf == 2)。

    • curparent的右子节点(_bf == 1)。

    • curleftcur的左子节点。

    • grandParentparent的父节点。

  • 调整指针关系

1.处理curleft

  • parent->_right = curleft:将parent的右子指向curleft
  • curleft存在:设置curleft->_parent = parent

2.建立curparent关系

  • cur->_left = parentcur的左子指向原父节点。
  • parent->_parent = cur:原父节点的父指针指向cur

3.链接到原树

  • cur->_parent = grandParentcur的父指针指向原祖父。
  • grandParent为空:更新根节点为cur
  • 否则:根据parent在原树的位置,将grandParent的左/右子指向cur

  • 更新平衡因子

    • parent->_bf = 0

    • cur->_bf = 0

完整代码

void rotateL(Node* parent) {Node* grandParent = parent->_parent;Node* cur = parent->_right, * curleft = cur->_left;parent->_right = curleft;if (curleft) {curleft->_parent = parent;}cur->_left = parent;parent->_parent = cur;cur->_parent = grandParent;if (grandParent == nullptr) {_root = cur;}else {if (parent == grandParent->_left) {grandParent->_left = cur;}else {grandParent->_right = cur;}}parent->_bf = cur->_bf = 0;
}

右单旋 (rotateR) 

  • 参考图:
    • 确定关键节点,调节指针关系:
    • 链接到原树 :
  • 复现代码:
    void rotateR(Node* parent) {Node* grandParent = parent->_parent;Node* cur = parent->_left, * curright = cur->_right;parent->_left = curright;if (curright) {curright->_parent = parent;}cur->_right = parent;parent->_parent = cur;if (grandParent == nullptr) {_root = cur;cur->_parent = nullptr;}else {if (grandParent->_left == parent) {grandParent->_left = cur;}else {grandParent->_right = cur;}cur->_parent = grandParent;}parent->_bf = cur->_bf = 0;
    }

左-右双旋 (rotateLR)

适用场景
父节点平衡因子为 -2,左子节点平衡因子为 1(左子树的右子树过高)。

步骤

1.定位关键节点

  • parent:失衡节点(平衡因子 -2)。

  • curparent 的左子节点(平衡因子 1)。

  • currightcur 的右子节点(需记录其原始平衡因子 tmpbf)。

2.执行双旋

  • 先左旋:对 cur 调用左单旋(rotateL),使 curright 成为新的左子树根。

  • 再右旋:对 parent 调用右单旋(rotateR),使 curright 成为新的根节点。

3.调整平衡因子

 

  • tmpbf == 1

    • parent->_bf = 0cur->_bf = -1(左子树高度减少)。

    • curright->_bf = 0

  • tmpbf == -1

    • parent->_bf = 1(右子树高度增加)。

    • cur->_bf = 0curright->_bf = 0

  • tmpbf == 0:所有相关节点平衡因子置 0

完整代码

void rotateLR(Node* parent) {Node* cur = parent->_left, * curright = cur->_right;int tmpbf = curright->_bf;rotateL(parent->_left);rotateR(parent);if (tmpbf == -1) {cur->_bf = 0;curright->_bf = 0;parent->_bf = 1;}else if (tmpbf == 1) {parent->_bf = 0;cur->_bf = -1;curright->_bf = 0;}else if (tmpbf == 0) {parent->_bf = cur->_bf = curright->_bf = 0;}else {assert(false);}
}

 

右-左双旋(rotateRL) 

适用场景
父节点平衡因子为 2,右子节点平衡因子为 -1(右子树的左子树过高)。

步骤

1.定位关键节点

  • parent:失衡节点(平衡因子 2)。

  • curparent 的右子节点(平衡因子 -1)。

  • curleftcur 的左子节点(需记录其原始平衡因子 tmpbf)。

2.执行双旋

  • 先右旋:对 cur 调用右单旋(rotateR),使 curleft 成为新的右子树根。

  • 再左旋:对 parent 调用左单旋(rotateL),使 curleft 成为新的根节点。

3.调整平衡因子

  • tmpbf == -1

    • parent->_bf = 0cur->_bf = 1(右子树高度增加)。

    • curleft->_bf = 0

  • tmpbf == 1

    • parent->_bf = -1(左子树高度减少)。

    • cur->_bf = 0curleft->_bf = 0

  • tmpbf == 0:所有相关节点平衡因子置 0

补充:在 AVL 树的双旋转操作(如rotateRLrotateLR)完成后需要调整平衡因子的原因?

在左单旋(rotateL)和右单旋(rotateR)操作中,旋转完成后直接将相关节点的平衡因子置为 0。这是因为单旋转操作在特定的失衡情况下进行,能够一步将树调整为平衡状态,旋转后相关节点的左右子树高度差重新达到平衡,所以可以简单地将平衡因子置为 0。

双旋转(rotateRL 和 rotateLR)是由两次单旋转组合而成,情况更为复杂。双旋转操作会改变多个节点的左右子树结构,旋转后不同节点的左右子树高度变化不能简单地通过将平衡因子置为 0 来处理,需要根据旋转前子节点的平衡因子情况来具体调整。(具体如何调整合一参考 rotateRL 和 rotateLR  的图解和实现)

 

相关文章:

数据结构--AVL树

一、二叉搜索树&#xff08;Binary Search Tree, BST&#xff09; 基本性质 对于树中的每个节点&#xff0c;其左子树中的所有节点值均小于该节点值。其右子树中的所有节点值均大于该节点值。左右子树也分别是二叉搜索树。 极端场景 在极端情况下&#xff0c;如插入节点顺序…...

OpenManus 的提示词

OpenManus 的提示词 引言英文提示词的详细内容工具集的详细说明中文翻译的详细内容GitHub 仓库信息背景分析总结 引言 OpenManus 是一个全能 AI 助手&#xff0c;旨在通过多种工具高效地完成用户提出的各种任务&#xff0c;包括编程、信息检索、文件处理和网页浏览等。其系统提…...

达梦数据库在Linux,信创云 安装,备份,还原

&#xff08;一&#xff09;系统环境检查 1操作系统&#xff1a;确认使用的是国产麒麟操作系统&#xff0c;检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本&#xff1a; cat /etc/os-release 2硬件资源&#xff1a;确保服务器具备足够的硬件资源&#xff0…...

怎么使用Sam Helper修改手机屏幕分辨率,使得游戏视野变广?

1.准备Shizuku 和Sam Helper软件 2.打开设置&#xff0c;找到关于本机&#xff0c;连续点击版本号五次打开开发者选项 3.找到开发者选项&#xff0c;打开USB调试和无线调试 4.返回桌面&#xff0c;我们接着打开shizuku,点击配对&#xff0c;这里打开开发者选项&#xff0c;找…...

Unity DOTS 从入门到精通之 创建实体

文章目录 前言安装 DOTS 包创建实体1.手动创建空实体&#xff08;适用于运行时动态创建&#xff09;2.克隆 预制体&#xff08;主线程同步操作&#xff09;3.克隆 预制体&#xff08;兼容Job System&#xff09;4.通过 GameObject 转换&#xff08;Baker方式&#xff09; 其他E…...

【OA角色数据权限】自定数据权限(自定义部门)、本部门数据权限、本部门及以下数据权限、仅本人数据权限

文章目录 引言I 表设计部门表设计角色表设计II 数据过滤处理注解参数说明数据权限使用数据过滤处理切面 DataScopeAspectQuery 基类知识扩展引言 I 表设计 部门表设计 部门表采用部门路径反应祖先层级关系(包含自己部门的ID) 查询用户所在的本部门及其对应的下级部门:采用…...

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…...

STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步

主题内容教学目的/扩展视频旋转编码器电路原理&#xff0c;跳线设置&#xff0c;结构分析。驱动程序与调用。熟悉电路和驱动程序。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、旋转编码器原理与驱动结构1.1 旋转编码器工作原理1.2 驱动程序结构 二、方向判断…...

海思Hi3516DV00移植yolov5-7.0的模型转化流程说明

一、YOLOv5 YOLOv5作为单阶段检测框架的集大成者&#xff0c;凭借其卓越的实时性、高精度和易用性&#xff0c;已成为工业界实际部署的首选方案。yolov5的最新版本是7.0&#xff0c;该版本是官方最后更新的一个版本。yolov5-7.0 工程化实现卓越&#xff1a;基于PyTorch框架构…...

C++ string类(前)

目录 一、前言 二、正文 1.1什么是string类 1.2为什么学习string类 1.3string使用注意 1.4 string 类常用接口说明 1.4.1string类对象的常见构造 1.4.2string类对象的容量操作 1.4.3 string 类对象的访问以及遍历操作 1.4.4 string 类对象的修改操作 三、结言 一、前…...

MySQL---INSERT语句、UPDATE语句、DELETE语句

目录 INSERT语句-插入 1.格式 2.操作 UPDATE语句-修改 1.格式 2.操作 DELETE语句-删除 1.格式 2.操作 INSERT语句-插入 1.格式 格式: insert into 表名 values (value1,value2,.....) 1. value后的内容&#xff1a;与表字段匹配的数据&#xff0c;如果字段为主键&…...

vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定

创建vue项目之后我们就可以开始写代码了&#xff0c;我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目&#xff0c;它的结构是在一个vue文件内集成了HTML…...

Mysql中的常用函数

1、datediff(date1,date2) date1减去date2&#xff0c;返回两个日期之间的天数。 SELECT DATEDIFF(2008-11-30,2008-11-29) AS DiffDate -- 返回1 SELECT DATEDIFF(2008-11-29,2008-11-30) AS DiffDate -- 返回-1 2、char_length(s) 返回字符串 s 的字符数 3、round(x,d)…...

使用JMeter(组件详细介绍+使用方式及步骤)

JSON操作符 在我们使用请求时,经常会遇到JSON格式的请求体,所以在介绍组件之前我会将介绍部分操作符,在进行操作时是很重要的 Operator Description $ 表示根元素 当前元素 * 通配符,所有节点 .. 选择所有符合条件的节点 .name 子元素,name是子元素名称 [start:e…...

【大模型聊天】实时交互技术选型

在Python开发中&#xff0c;实现RAG问答或大模型聊天功能无需强制使用WebSocket&#xff0c;技术选型需结合实时性需求与交互场景。以下是技术分析及示例&#xff1a; 技术方案对比 技术适用场景优缺点WebSocket双向高频交互&#xff08;如实时对话&#xff09;优点&#xff1…...

计算机网络:计算机网络的概念

1.计算机网络&#xff1a;由若干个结点和链接这些的链路组成。 2.集线器&#xff08;Hub&#xff09;&#xff1a;可以把多个结点连接起来&#xff0c;组成一个计算机网络。 不能避免数据冲突的情况 3.交换机&#xff08;Switch&#xff09;:可以把多个结点连接起来&#x…...

Trae:引领未来的 AI 编程新时代

目录 Trae&#xff1a;引领未来的 AI 编程新时代 更快、更好、更准确的 AI IDE 无缝协作&#xff0c;AI 赋能开发者 Builder 模式&#xff1a;从 0 到 1 的智能助力 深度上下文理解&#xff0c;精准满足开发需求 实时代码补全&#xff0c;极致提升开发效率 智能 AI 协作…...

Vue _总结

文章目录 一 Vue介绍1 什么是Vue.js2 MVVM二 第一个例子1 引入vue2 html中用法3 创建vue实例对象三 Vue基本语法1 v-text2 v-bind3 v-on4 v-model5 v-if6 v-for7 计算属性8 组件化全局注册本地注册9 生命周期10 员工程序使用vue.js重构list.htmladd.htmlupdate.html四 使用vue-…...

Refreshtoken 前端 安全 前端安全方面

网络安全 前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的 介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢 网络安全汇总 XSSCSRF点击劫持SQL注入OS注入请求劫持DDOS 在我看来,前端可以了解并且防御前…...

基于深度学习的医学图像分割算法研究——结合MRI/CT图像的肿瘤区域自动分割与三维重建

针对课题《基于深度学习的医学图像分割算法研究——结合MRI/CT图像的肿瘤区域自动分割与三维重建》,以下是详细的研究框架与技术实现方案: 1. 核心研究要点 主要目标:构建端到端的深度学习模型,实现MRI/CT肿瘤区域的精准分割,并通过三维可视化支持临床诊断。核心挑战: 医…...

企业如何选择研发项目进度管理软件?盘点15款实用工具

这篇文章介绍了以下工具: 1. PingCode&#xff1b; 2. Worktile&#xff1b; 3. 腾讯 TAPD&#xff1b; 4. 华为 DevCloud&#xff1b; 5. 亿方云&#xff1b; 6. 阿里云效&#xff1b; 7. CODING 码云&#xff1b; 8. 明道云&#xff1b; 9. 进度猫&#xff1b; 10. 轻流等。 …...

【2024_CUMCM】图论模型

基本概念 注&#xff1a;以下叙述大多是自话&#xff0c;夹杂多数不专业表述 点集、边集 图论中图是由点和边组成的 G(V,E) V--点集 E--边集 权 G(V,E,W) W--权 一般都有权&#xff0c;构成赋权图 赋权图 在图中每条边都赋予一个非负实数权重的图&#xff0c;就是给每一条…...

Unity UGUI下优化需要射线检测类的UI元素的一种方式

直接上脚本 - 原理探究 先看MaskableGraphic 可以看到继承了Graphic&#xff0c;继续深入 在构造函数中找到了useLegacyMeshGeneration 而useLegacyMeshGeneration用来判断是否使用旧的网格生成系统&#xff0c;这里我们使用新的 在这个方法中&#xff0c;Graphic默认通过…...

unity3d 背景是桌面3d数字人,前面是web的表单

是可以实现的&#xff0c;但涉及多个技术栈的结合&#xff0c;包括 Unity3D、Web 技术&#xff08;HTML、JavaScript&#xff09;、以及可能的 WebGL 或 WebRTC 技术。大致有以下几种实现方案&#xff1a; 方案 1&#xff1a;Unity 作为独立应用&#xff08;桌面端&#xff0…...

一周热点-Claude 3.7 Sonnet-在响应和思考模型之间切换

Anthropic 最近发布了 Claude 3.7 Sonnet,这是一款具有混合推理能力的模型,允许用户在即时响应和扩展思考模式之间切换,以适应不同类型的任务需求。以下是关于 Claude 3.7 Sonnet 的详细介绍: 1 混合推理模式 标准模式:快速生成响应,适合日常对话和简单任务,能在短时间内…...

【大模型安全】安全解决方案

【大模型安全】安全解决方案 1.技术层面2.数据层面数据收集阶段训练阶段模型推理阶段 1.技术层面 在使用大语言模型时&#xff0c;通常有几种选择&#xff1a;一种是采用封装好的大语言模型SaaS云服务&#xff1b;另一种是在公有云上部署自有的大语言模型&#xff0c;并通过权…...

Clion快捷键、修改字体

文章目录 一、Clion快捷键1.撤销&#xff1a;crtl Z2.重做&#xff1a;crtl shift Z3.删除该行&#xff1a;crtl Y4.多行后退&#xff1a;选中多行 Tab5.多行缩进&#xff1a;选中多行 shift Tab 二、修改注释的斜体 一、Clion快捷键 1.撤销&#xff1a;crtl Z 2.重做…...

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义&#xff0c;特点&#xff0c;生存周期。软件工程的概论。软件危机。 1.☆软件&#xff1a;软件程序数据文档 &#xff08;1&#xff09;软件&#xff1a;是指在计算机系统的支持下&#xff0c;能够完成特定功能与性能的包括…...

探索DeepSeek:牛仔技术的未来在哪里?

引言 在当今快速发展的科技世界中&#xff0c;DeepSeek作为一种前沿技术&#xff0c;正逐渐改变我们对信息搜索和数据处理的认知。本文将深入探讨DeepSeek技术的核心优势、应用场景以及未来发展趋势&#xff0c;带您全面了解这一技术的魅力所在。 一、DeepSeek技术简介 1.1 什…...

Wireshark抓包标准化流程

1. 软件安装与验证 安装路径规范 按企业要求部署至指定目录&#xff1a; xxxx/xxxx/xxxx/xxxx验证安装完整性&#xff1a; 检查是否勾选 Install TShark&#xff08;默认已选&#xff09;确认安装后生成 Wireshark.exe 和 tshark.exe 可执行文件 权限配置 右键点击安装目录下…...

3月8日星期六今日早报简报微语报早读

3月8日星期六&#xff0c;农历二月初九&#xff0c;早报#微语早读。 1、国家卫健委主任&#xff1a;正会同有关部门起草育儿补贴的操作方案&#xff1b; 2、中国代表团出征第12届世界冬季特奥会&#xff0c;共48名运动员&#xff1b; 3、研究显示&#xff1a;2035年中国女性…...

计算机视觉之dlib人脸关键点绘制及微笑测试

dlib人脸关键点绘制及微笑测试 目录 dlib人脸关键点绘制及微笑测试1 dlib人脸关键点1.1 dlib1.2 人脸关键点检测1.3 检测模型1.4 凸包1.5 笑容检测1.6 函数 2 人脸检测代码2.1 关键点绘制2.2 关键点连线2.3 微笑检测 1 dlib人脸关键点 1.1 dlib dlib 是一个强大的机器学习库&a…...

周末总结(2024/03/08)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以外 职场的人际关系在面对利…...

Linux第一课

一、Linux背景与发展 1. 发展史 1968年&#xff0c;研究人员开发了Multics操作系统&#xff0c;为后续发展奠定了基础。 1969−1970年&#xff0c;Ken Thompson和Dennis Ritchie在Multics基础上开发了UNIX系统。 1991年&#xff0c;Linus Torvalds发布了Linux操作系统&#…...

【Java基础】Java中new一个对象时,JVM到底做了什么?

Java中new一个对象时&#xff0c;JVM到底做了什么&#xff1f; 在Java编程中&#xff0c;new关键字是我们创建对象的最常用方式。但你是否想过&#xff0c;当你写下new MyClass()时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;到底在背后做了哪些工作&#xff1f;今天&…...

《白帽子讲 Web 安全》之身份认证

目录 引言 一、概述 二、密码安全性 三、认证方式 &#xff08;一&#xff09;HTTP 认证 &#xff08;二&#xff09;表单登录 &#xff08;三&#xff09;客户端证书 &#xff08;四&#xff09;一次性密码&#xff08;OTP&#xff09; &#xff08;五&#xff09;多因…...

发行基础:宣传片

转载自官方文件 --------------- 宣传片 概览 作为 Steam 发行流程的一部分&#xff0c;您需要上传自己产品的宣传片。 宣传片将会显示在您的产品商店页的顶端&#xff0c;通常是您的潜在客户第一眼会看见的内容。 最佳实践 在 Steam 平台上&#xff0c;宣传片是产品营销中…...

PAT线上考试注意细节(甲/乙级)

闲谈 从此以后&#xff01;参加竞赛&#xff01; 都要为自己留够足够的时间练习&#xff01; 都要为自己留够足够的时间练习&#xff01; 都要为自己留够足够的时间练习&#xff01; 重要的事情说三遍&#xff0c;毕竟这只是我参加各种竞赛的开始&#xff01; \(&#xff…...

测试用大模型组词

已经把hanzi-writer的js的调用、hanzi-writer调用的数千个汉字的json文件&#xff0c;全都放在本地了。虽然用的办法还是比较笨的。我注意到 大模型也可以部署本地&#xff0c;虽然使用频率低的情况下不划算。 尝试直接通过html的javascript通过api key调用大语言模型&#x…...

【算法 C/C++】一维差分

2025 - 03 - 08 - 第 69 篇 Author: 郑龙浩 / 仟濹 【一维差分】 文章目录 前缀和与差分 - 我的博客差分(一维)1 大体介绍(1)**1 原数组 2 差分数组 3 差分数组的前缀和数组**&#xff08;2&#xff09;记录区间操作的边界 2 差分原理是什么&#xff1f;&#xff1f;&#xff…...

前后端数据加密传输【最佳方案】

AES和RSA区别 算法类型安全性密钥长度/输出长度速度应用场景AES对称加密高128位、192位、256位快适用于大规模数据加密&#xff0c;入HTTPS协议的数据传输RSA非对称加密高1024位、2048位、4096位较慢适用于数据安全传输、数字签名和身份验证 综上&#xff1a;兼顾安全性和性能…...

爬虫案例七Python协程爬取视频

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python协程爬取视频 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬虫案例七协程爬取视频 提示&#xff1a;以下是本篇文章正文…...

算法每日一练 (9)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (9)最小路径和题目描述解题思路解题代码…...

对接RAGflow的API接口报错

对接RAGflow的API接口&#xff0c;报错&#xff1a; {"status":"success","message":"API连接正常","response":{"code":109,"data":false,"message":"Authentication error: API key …...

智慧城市智慧社区项目建设方案

一、项目背景 在全球化进程加速的今天&#xff0c;城市化问题日益凸显&#xff0c;传统的城市管理模式已难以满足现代社会对高效、智能化管理的需求。智慧城市和智慧社区的概念应运而生&#xff0c;其核心目标是通过信息技术手段&#xff0c;提升城市资源的利用效率&#xff0…...

Orale数据文件加错位置,你直接rm引发的故障

数据库可能面临硬件故障、人为错误、恶意攻击、自然灾害等多种潜在风险&#xff0c;那么今天这个故障就是由于业务人员加错数据文件的位置&#xff0c;然后直接从物理层面rm -f了&#xff0c;导致了生产的故障&#xff01; 以下是针对Oracle数据库物理删除数据文件后的快速修复…...

Web网页开发——水果忍者

1.介绍 复刻经典小游戏——水果忍者 2.预览 3.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…...

51 单片机中断控制寄存器 TCON

在 51 单片机中&#xff0c;中断控制寄存器 TCON&#xff08;Timer/Counter Control Register&#xff0c;定时器 / 计数器控制寄存器&#xff09;主要用于控制定时器 / 计数器的启动、停止以及外部中断的触发方式等。它既可以按字节寻址&#xff0c;也可以按位寻址&#xff0c…...

电脑如何在系统默认的壁纸中切换自己喜欢的

1、声明&#xff1a;该切换壁纸仅支持win10。 当你想去切换系统默认的壁纸&#xff0c;但是不知道该怎么切换&#xff0c;别慌&#xff0c;小亦教你几招帮你快速切换自定义壁纸。 我们平常使用的win10桌面壁纸大部分都是 简单、朴素的壁纸&#xff0c;但如果你想要切换自己喜…...

AcWing 600. 仰视奶牛 单调栈模板题

https://www.acwing.com/problem/content/description/602/ 找x右边第一个大于x的数的位置 const int N 1e5 10,T 20;int n; LL a[N],stk[N],top,r[N];void solve() {cin >> n;for (int i 1;i < n;i ) cin >> a[i];for (int i n;i > 1;i --){while(top…...